From 6561490d4afc797a366524fcad1b9cfe95868316 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 12 Apr 2026 20:31:26 +0000
Subject: [PATCH 1/2] Initial plan
From 3ef1b22407b5f6daa3d5107dcd6073d9a3fcfddb Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sun, 12 Apr 2026 20:43:47 +0000
Subject: [PATCH 2/2] Add Java code generation from JSON schemas
- Add scripts/codegen/java.ts - Java code generator from session-events and api schemas
- Add scripts/codegen/package.json with @github/copilot dependency
- Add scripts/codegen/package-lock.json
- Generate src/generated/java/com/github/copilot/sdk/generated/ - 76 session event files
- Generate src/generated/java/com/github/copilot/sdk/generated/rpc/ - 111 RPC type files
- Update pom.xml: add build-helper-maven-plugin, exclude generated from Spotless
- Update config/checkstyle/checkstyle.xml: exclude generated packages
- Update .gitattributes: mark src/generated/java/** as generated
- Add .github/workflows/codegen-check.yml - CI check workflow
- Add .github/workflows/update-copilot-dependency.yml - update workflow
- Update docs/WORKFLOWS.md with new workflow documentation
- Update .gitignore to exclude scripts/codegen/node_modules/"
Agent-Logs-Url: https://github.com/github/copilot-sdk-java/sessions/aee4deda-40d4-4ecd-a831-2af9cb9461e7
Co-authored-by: edburns <75821+edburns@users.noreply.github.com>
---
.gitattributes | 3 +-
.github/workflows/codegen-check.yml | 44 +
.../workflows/update-copilot-dependency.yml | 92 ++
.gitignore | 1 +
config/checkstyle/checkstyle.xml | 4 +-
docs/WORKFLOWS.md | 38 +
pom.xml | 23 +
scripts/codegen/.gitignore | 1 +
scripts/codegen/java.ts | 821 ++++++++++++++++++
scripts/codegen/package-lock.json | 645 ++++++++++++++
scripts/codegen/package.json | 14 +
.../copilot/sdk/generated/AbortEvent.java | 38 +
.../sdk/generated/AssistantIntentEvent.java | 38 +
.../generated/AssistantMessageDeltaEvent.java | 52 ++
.../sdk/generated/AssistantMessageEvent.java | 179 ++++
.../AssistantReasoningDeltaEvent.java | 45 +
.../generated/AssistantReasoningEvent.java | 45 +
.../AssistantStreamingDeltaEvent.java | 38 +
.../sdk/generated/AssistantTurnEndEvent.java | 38 +
.../generated/AssistantTurnStartEvent.java | 45 +
.../sdk/generated/AssistantUsageEvent.java | 270 ++++++
.../generated/CapabilitiesChangedEvent.java | 52 ++
.../sdk/generated/CommandCompletedEvent.java | 38 +
.../sdk/generated/CommandExecuteEvent.java | 59 ++
.../sdk/generated/CommandQueuedEvent.java | 45 +
.../sdk/generated/CommandsChangedEvent.java | 57 ++
.../generated/ElicitationCompletedEvent.java | 69 ++
.../generated/ElicitationRequestedEvent.java | 123 +++
.../generated/ExitPlanModeCompletedEvent.java | 66 ++
.../generated/ExitPlanModeRequestedEvent.java | 67 ++
.../generated/ExternalToolCompletedEvent.java | 38 +
.../generated/ExternalToolRequestedEvent.java | 80 ++
.../copilot/sdk/generated/HookEndEvent.java | 87 ++
.../copilot/sdk/generated/HookStartEvent.java | 52 ++
.../sdk/generated/McpOauthCompletedEvent.java | 38 +
.../sdk/generated/McpOauthRequiredEvent.java | 80 ++
.../PendingMessagesModifiedEvent.java | 20 +
.../generated/PermissionCompletedEvent.java | 81 ++
.../generated/PermissionRequestedEvent.java | 52 ++
.../sdk/generated/SamplingCompletedEvent.java | 38 +
.../sdk/generated/SamplingRequestedEvent.java | 52 ++
.../SessionBackgroundTasksChangedEvent.java | 20 +
.../SessionCompactionCompleteEvent.java | 164 ++++
.../SessionCompactionStartEvent.java | 52 ++
.../generated/SessionContextChangedEvent.java | 94 ++
.../SessionCustomAgentsUpdatedEvent.java | 115 +++
.../sdk/generated/SessionErrorEvent.java | 73 ++
.../copilot/sdk/generated/SessionEvent.java | 134 +++
.../SessionExtensionsLoadedEvent.java | 104 +++
.../sdk/generated/SessionHandoffEvent.java | 122 +++
.../sdk/generated/SessionIdleEvent.java | 38 +
.../sdk/generated/SessionInfoEvent.java | 52 ++
.../SessionMcpServerStatusChangedEvent.java | 67 ++
.../SessionMcpServersLoadedEvent.java | 95 ++
.../generated/SessionModeChangedEvent.java | 45 +
.../generated/SessionModelChangeEvent.java | 59 ++
.../generated/SessionPlanChangedEvent.java | 54 ++
.../SessionRemoteSteerableChangedEvent.java | 38 +
.../sdk/generated/SessionResumeEvent.java | 151 ++++
.../sdk/generated/SessionShutdownEvent.java | 239 +++++
.../generated/SessionSkillsLoadedEvent.java | 87 ++
.../generated/SessionSnapshotRewindEvent.java | 45 +
.../sdk/generated/SessionStartEvent.java | 172 ++++
.../generated/SessionTaskCompleteEvent.java | 45 +
.../generated/SessionTitleChangedEvent.java | 38 +
.../generated/SessionToolsUpdatedEvent.java | 37 +
.../sdk/generated/SessionTruncationEvent.java | 87 ++
.../sdk/generated/SessionUsageInfoEvent.java | 80 ++
.../sdk/generated/SessionWarningEvent.java | 52 ++
.../SessionWorkspaceFileChangedEvent.java | 59 ++
.../sdk/generated/SkillInvokedEvent.java | 81 ++
.../sdk/generated/SubagentCompletedEvent.java | 80 ++
.../generated/SubagentDeselectedEvent.java | 20 +
.../sdk/generated/SubagentFailedEvent.java | 87 ++
.../sdk/generated/SubagentSelectedEvent.java | 53 ++
.../sdk/generated/SubagentStartedEvent.java | 59 ++
.../sdk/generated/SystemMessageEvent.java | 94 ++
.../generated/SystemNotificationEvent.java | 45 +
.../generated/ToolExecutionCompleteEvent.java | 144 +++
.../ToolExecutionPartialResultEvent.java | 45 +
.../generated/ToolExecutionProgressEvent.java | 45 +
.../generated/ToolExecutionStartEvent.java | 73 ++
.../sdk/generated/ToolUserRequestedEvent.java | 52 ++
.../sdk/generated/UnknownSessionEvent.java | 16 +
.../generated/UserInputCompletedEvent.java | 52 ++
.../generated/UserInputRequestedEvent.java | 67 ++
.../sdk/generated/UserMessageEvent.java | 92 ++
.../generated/rpc/AccountGetQuotaResult.java | 76 ++
.../sdk/generated/rpc/McpConfigAddParams.java | 34 +
.../generated/rpc/McpConfigListResult.java | 28 +
.../generated/rpc/McpConfigRemoveParams.java | 27 +
.../generated/rpc/McpConfigUpdateParams.java | 34 +
.../sdk/generated/rpc/McpDiscoverParams.java | 27 +
.../sdk/generated/rpc/McpDiscoverResult.java | 80 ++
.../sdk/generated/rpc/ModelsListResult.java | 220 +++++
.../copilot/sdk/generated/rpc/PingParams.java | 27 +
.../copilot/sdk/generated/rpc/PingResult.java | 41 +
.../rpc/SessionAgentDeselectParams.java | 27 +
.../rpc/SessionAgentDeselectResult.java | 20 +
.../rpc/SessionAgentGetCurrentParams.java | 27 +
.../rpc/SessionAgentGetCurrentResult.java | 54 ++
.../generated/rpc/SessionAgentListParams.java | 27 +
.../generated/rpc/SessionAgentListResult.java | 55 ++
.../rpc/SessionAgentReloadParams.java | 27 +
.../rpc/SessionAgentReloadResult.java | 55 ++
.../rpc/SessionAgentSelectParams.java | 34 +
.../rpc/SessionAgentSelectResult.java | 55 ++
...ionCommandsHandlePendingCommandParams.java | 41 +
...ionCommandsHandlePendingCommandResult.java | 27 +
.../rpc/SessionExtensionsDisableParams.java | 34 +
.../rpc/SessionExtensionsDisableResult.java | 20 +
.../rpc/SessionExtensionsEnableParams.java | 34 +
.../rpc/SessionExtensionsEnableResult.java | 20 +
.../rpc/SessionExtensionsListParams.java | 27 +
.../rpc/SessionExtensionsListResult.java | 100 +++
.../rpc/SessionExtensionsReloadParams.java | 27 +
.../rpc/SessionExtensionsReloadResult.java | 20 +
.../rpc/SessionFleetStartParams.java | 34 +
.../rpc/SessionFleetStartResult.java | 27 +
.../rpc/SessionFsAppendFileParams.java | 48 +
.../generated/rpc/SessionFsExistsParams.java | 34 +
.../generated/rpc/SessionFsExistsResult.java | 27 +
.../generated/rpc/SessionFsMkdirParams.java | 48 +
.../rpc/SessionFsReadFileParams.java | 34 +
.../rpc/SessionFsReadFileResult.java | 27 +
.../generated/rpc/SessionFsReaddirParams.java | 34 +
.../generated/rpc/SessionFsReaddirResult.java | 28 +
.../rpc/SessionFsReaddirWithTypesParams.java | 34 +
.../rpc/SessionFsReaddirWithTypesResult.java | 62 ++
.../generated/rpc/SessionFsRenameParams.java | 41 +
.../sdk/generated/rpc/SessionFsRmParams.java | 48 +
.../rpc/SessionFsSetProviderParams.java | 55 ++
.../rpc/SessionFsSetProviderResult.java | 27 +
.../generated/rpc/SessionFsStatParams.java | 34 +
.../generated/rpc/SessionFsStatResult.java | 55 ++
.../rpc/SessionFsWriteFileParams.java | 48 +
.../rpc/SessionHistoryCompactParams.java | 27 +
.../rpc/SessionHistoryCompactResult.java | 97 +++
.../rpc/SessionHistoryTruncateParams.java | 34 +
.../rpc/SessionHistoryTruncateResult.java | 27 +
.../sdk/generated/rpc/SessionLogParams.java | 71 ++
.../sdk/generated/rpc/SessionLogResult.java | 28 +
.../rpc/SessionMcpDisableParams.java | 34 +
.../rpc/SessionMcpDisableResult.java | 20 +
.../generated/rpc/SessionMcpEnableParams.java | 34 +
.../generated/rpc/SessionMcpEnableResult.java | 20 +
.../generated/rpc/SessionMcpListParams.java | 27 +
.../generated/rpc/SessionMcpListResult.java | 84 ++
.../generated/rpc/SessionMcpReloadParams.java | 27 +
.../generated/rpc/SessionMcpReloadResult.java | 20 +
.../generated/rpc/SessionModeGetParams.java | 27 +
.../generated/rpc/SessionModeGetResult.java | 43 +
.../generated/rpc/SessionModeSetParams.java | 50 ++
.../generated/rpc/SessionModeSetResult.java | 43 +
.../rpc/SessionModelGetCurrentParams.java | 27 +
.../rpc/SessionModelGetCurrentResult.java | 27 +
.../rpc/SessionModelSwitchToParams.java | 147 ++++
.../rpc/SessionModelSwitchToResult.java | 27 +
...sHandlePendingPermissionRequestParams.java | 40 +
...sHandlePendingPermissionRequestResult.java | 27 +
.../rpc/SessionPlanDeleteParams.java | 27 +
.../rpc/SessionPlanDeleteResult.java | 20 +
.../generated/rpc/SessionPlanReadParams.java | 27 +
.../generated/rpc/SessionPlanReadResult.java | 41 +
.../rpc/SessionPlanUpdateParams.java | 34 +
.../rpc/SessionPlanUpdateResult.java | 20 +
.../rpc/SessionPluginsListParams.java | 27 +
.../rpc/SessionPluginsListResult.java | 62 ++
.../generated/rpc/SessionShellExecParams.java | 48 +
.../generated/rpc/SessionShellExecResult.java | 27 +
.../generated/rpc/SessionShellKillParams.java | 57 ++
.../generated/rpc/SessionShellKillResult.java | 27 +
.../rpc/SessionSkillsDisableParams.java | 34 +
.../rpc/SessionSkillsDisableResult.java | 20 +
.../rpc/SessionSkillsEnableParams.java | 34 +
.../rpc/SessionSkillsEnableResult.java | 20 +
.../rpc/SessionSkillsListParams.java | 27 +
.../rpc/SessionSkillsListResult.java | 76 ++
.../rpc/SessionSkillsReloadParams.java | 27 +
.../rpc/SessionSkillsReloadResult.java | 20 +
...ssionToolsHandlePendingToolCallParams.java | 48 +
...ssionToolsHandlePendingToolCallResult.java | 27 +
.../rpc/SessionUiElicitationParams.java | 71 ++
.../rpc/SessionUiElicitationResult.java | 51 ++
...ssionUiHandlePendingElicitationParams.java | 79 ++
...ssionUiHandlePendingElicitationResult.java | 27 +
.../rpc/SessionUsageGetMetricsParams.java | 27 +
.../rpc/SessionUsageGetMetricsResult.java | 193 ++++
.../rpc/SessionWorkspaceCreateFileParams.java | 41 +
.../rpc/SessionWorkspaceCreateFileResult.java | 20 +
.../rpc/SessionWorkspaceListFilesParams.java | 27 +
.../rpc/SessionWorkspaceListFilesResult.java | 28 +
.../rpc/SessionWorkspaceReadFileParams.java | 34 +
.../rpc/SessionWorkspaceReadFileResult.java | 27 +
.../sdk/generated/rpc/SessionsForkParams.java | 34 +
.../sdk/generated/rpc/SessionsForkResult.java | 27 +
.../sdk/generated/rpc/ToolsListParams.java | 27 +
.../sdk/generated/rpc/ToolsListResult.java | 70 ++
198 files changed, 11799 insertions(+), 3 deletions(-)
create mode 100644 .github/workflows/codegen-check.yml
create mode 100644 .github/workflows/update-copilot-dependency.yml
create mode 100644 scripts/codegen/.gitignore
create mode 100644 scripts/codegen/java.ts
create mode 100644 scripts/codegen/package-lock.json
create mode 100644 scripts/codegen/package.json
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AbortEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantIntentEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantMessageDeltaEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantMessageEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantReasoningDeltaEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantReasoningEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantStreamingDeltaEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantTurnEndEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantTurnStartEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/AssistantUsageEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/CapabilitiesChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/CommandCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/CommandExecuteEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/CommandQueuedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/CommandsChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ElicitationCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ElicitationRequestedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ExitPlanModeCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ExitPlanModeRequestedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ExternalToolCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ExternalToolRequestedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/HookEndEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/HookStartEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/McpOauthCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/McpOauthRequiredEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/PendingMessagesModifiedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/PermissionCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/PermissionRequestedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SamplingCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SamplingRequestedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionBackgroundTasksChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionCompactionCompleteEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionCompactionStartEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionContextChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionCustomAgentsUpdatedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionErrorEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionExtensionsLoadedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionHandoffEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionIdleEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionInfoEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionMcpServerStatusChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionMcpServersLoadedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionModeChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionModelChangeEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionPlanChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionRemoteSteerableChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionResumeEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionShutdownEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionSkillsLoadedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionSnapshotRewindEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionStartEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionTaskCompleteEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionTitleChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionToolsUpdatedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionTruncationEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionUsageInfoEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionWarningEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SessionWorkspaceFileChangedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SkillInvokedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SubagentCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SubagentDeselectedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SubagentFailedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SubagentSelectedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SubagentStartedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SystemMessageEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/SystemNotificationEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ToolExecutionCompleteEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ToolExecutionPartialResultEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ToolExecutionProgressEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ToolExecutionStartEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/ToolUserRequestedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/UnknownSessionEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/UserInputCompletedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/UserInputRequestedEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/UserMessageEvent.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/AccountGetQuotaResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/McpConfigAddParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/McpConfigListResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/McpConfigRemoveParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/McpConfigUpdateParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/McpDiscoverParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/McpDiscoverResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/ModelsListResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/PingParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/PingResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentDeselectParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentDeselectResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentGetCurrentParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentGetCurrentResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentListParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentListResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentReloadParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentReloadResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentSelectParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionAgentSelectResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsHandlePendingCommandParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionCommandsHandlePendingCommandResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionExtensionsDisableParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionExtensionsDisableResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionExtensionsEnableParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionExtensionsEnableResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionExtensionsListParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionExtensionsListResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionExtensionsReloadParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionExtensionsReloadResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFleetStartParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFleetStartResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsAppendFileParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsExistsParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsExistsResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsMkdirParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsReadFileParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsReadFileResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsReaddirParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsReaddirResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsReaddirWithTypesParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsReaddirWithTypesResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsRenameParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsRmParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsSetProviderParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsSetProviderResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsStatParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsStatResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionFsWriteFileParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionHistoryCompactParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionHistoryCompactResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionHistoryTruncateParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionHistoryTruncateResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionLogParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionLogResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionMcpDisableParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionMcpDisableResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionMcpEnableParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionMcpEnableResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionMcpListParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionMcpListResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionMcpReloadParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionMcpReloadResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionModeGetParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionModeGetResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionModeSetParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionModeSetResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionModelGetCurrentParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionModelGetCurrentResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionModelSwitchToParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionModelSwitchToResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPermissionsHandlePendingPermissionRequestParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPermissionsHandlePendingPermissionRequestResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPlanDeleteParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPlanDeleteResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPlanReadParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPlanReadResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPlanUpdateParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPlanUpdateResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPluginsListParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionPluginsListResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionShellExecParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionShellExecResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionShellKillParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionShellKillResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSkillsDisableParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSkillsDisableResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSkillsEnableParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSkillsEnableResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSkillsListParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSkillsListResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSkillsReloadParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionSkillsReloadResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionToolsHandlePendingToolCallParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionToolsHandlePendingToolCallResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionUiElicitationParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionUiElicitationResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionUiHandlePendingElicitationParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionUiHandlePendingElicitationResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionUsageGetMetricsParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionUsageGetMetricsResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionWorkspaceCreateFileParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionWorkspaceCreateFileResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionWorkspaceListFilesParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionWorkspaceListFilesResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionWorkspaceReadFileParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionWorkspaceReadFileResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionsForkParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/SessionsForkResult.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/ToolsListParams.java
create mode 100644 src/generated/java/com/github/copilot/sdk/generated/rpc/ToolsListResult.java
diff --git a/.gitattributes b/.gitattributes
index c1965c216..adb3de78e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,2 @@
-.github/workflows/*.lock.yml linguist-generated=true merge=ours
\ No newline at end of file
+.github/workflows/*.lock.yml linguist-generated=true merge=ours
+src/generated/java/** eol=lf linguist-generated=true
diff --git a/.github/workflows/codegen-check.yml b/.github/workflows/codegen-check.yml
new file mode 100644
index 000000000..675629c1e
--- /dev/null
+++ b/.github/workflows/codegen-check.yml
@@ -0,0 +1,44 @@
+name: "Codegen Check"
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ paths:
+ - 'scripts/codegen/**'
+ - 'src/generated/java/**'
+ - '.github/workflows/codegen-check.yml'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ check:
+ name: "Verify generated files are up-to-date"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+ - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
+ with:
+ node-version: 22
+
+ - name: Install codegen dependencies
+ working-directory: ./scripts/codegen
+ run: npm ci
+
+ - name: Run codegen
+ working-directory: ./scripts/codegen
+ run: npm run generate
+
+ - name: Check for uncommitted changes
+ run: |
+ if [ -n "$(git status --porcelain)" ]; then
+ echo "::error::Generated files are out of date. Run 'cd scripts/codegen && npm run generate' and commit the changes."
+ git diff --stat
+ git diff
+ exit 1
+ fi
+ echo "✅ Generated files are up-to-date"
diff --git a/.github/workflows/update-copilot-dependency.yml b/.github/workflows/update-copilot-dependency.yml
new file mode 100644
index 000000000..277434ead
--- /dev/null
+++ b/.github/workflows/update-copilot-dependency.yml
@@ -0,0 +1,92 @@
+name: "Update @github/copilot Dependency"
+
+on:
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'Target version of @github/copilot (e.g. 1.0.24)'
+ required: true
+ type: string
+
+permissions:
+ contents: write
+ pull-requests: write
+
+jobs:
+ update:
+ name: "Update @github/copilot to ${{ inputs.version }}"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Validate version input
+ env:
+ VERSION: ${{ inputs.version }}
+ run: |
+ if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9._-]+)?$ ]]; then
+ echo "::error::Invalid version format '$VERSION'. Expected semver (e.g. 1.0.24)."
+ exit 1
+ fi
+
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+ - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
+ with:
+ node-version: 22
+
+ - name: Update @github/copilot in scripts/codegen
+ env:
+ VERSION: ${{ inputs.version }}
+ working-directory: ./scripts/codegen
+ run: npm install "@github/copilot@$VERSION"
+
+ - name: Install codegen dependencies
+ working-directory: ./scripts/codegen
+ run: npm ci
+
+ - name: Run codegen
+ working-directory: ./scripts/codegen
+ run: npm run generate
+
+ - name: Create pull request
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ VERSION: ${{ inputs.version }}
+ run: |
+ BRANCH="update-copilot-$VERSION"
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+ if git rev-parse --verify "origin/$BRANCH" >/dev/null 2>&1; then
+ git checkout "$BRANCH"
+ git reset --hard HEAD
+ else
+ git checkout -b "$BRANCH"
+ fi
+
+ git add -A
+
+ if git diff --cached --quiet; then
+ echo "No changes detected; skipping commit and PR creation."
+ exit 0
+ fi
+
+ git commit -m "Update @github/copilot to $VERSION
+
+ - Updated @github/copilot in scripts/codegen
+ - Re-ran Java code generator"
+ git push origin "$BRANCH" --force-with-lease
+
+ if gh pr view "$BRANCH" >/dev/null 2>&1; then
+ echo "Pull request for branch '$BRANCH' already exists; updated branch only."
+ else
+ gh pr create \
+ --title "Update @github/copilot to $VERSION" \
+ --body "Automated update of \`@github/copilot\` to version \`$VERSION\`.
+
+ ### Changes
+ - Updated \`@github/copilot\` in \`scripts/codegen/package.json\`
+ - Re-ran Java code generator (\`scripts/codegen\`)
+
+ > Created by the **Update @github/copilot Dependency** workflow." \
+ --base main \
+ --head "$BRANCH"
+ fi
diff --git a/.gitignore b/.gitignore
index ddb2508ba..85e604a7f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ changebundle.txt*
.classpath
.project
.settings
+scripts/codegen/node_modules/
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
index 33c9ac5f2..9a6f3761b 100644
--- a/config/checkstyle/checkstyle.xml
+++ b/config/checkstyle/checkstyle.xml
@@ -11,9 +11,9 @@
-
+
-
+
diff --git a/docs/WORKFLOWS.md b/docs/WORKFLOWS.md
index 74afbd337..4725ff8f2 100644
--- a/docs/WORKFLOWS.md
+++ b/docs/WORKFLOWS.md
@@ -5,6 +5,8 @@
| Workflow | Description | Triggers | Schedule |
|----------|-------------|----------|----------|
| [Build & Test](workflows/build-test.yml) | Builds, lints, and tests the Java SDK | `push` (main), `pull_request`, `merge_group`, `workflow_dispatch` | Sundays at 00:00 UTC |
+| [Codegen Check](workflows/codegen-check.yml) | Verifies that generated Java files are up-to-date with the JSON schemas | `push` (main), `pull_request`, `workflow_dispatch` | — |
+| [Update @github/copilot Dependency](workflows/update-copilot-dependency.yml) | Updates the `@github/copilot` npm package, re-runs code generation, and opens a PR | `workflow_dispatch` | — |
| [Deploy Documentation](workflows/deploy-site.yml) | Generates and deploys versioned docs to GitHub Pages | `workflow_run` (after Build & Test), `release`, `workflow_dispatch` | — |
| [Publish to Maven Central](workflows/publish-maven.yml) | Releases the SDK to Maven Central and creates a GitHub Release | `workflow_dispatch` | — |
| [Weekly Upstream Sync](workflows/weekly-upstream-sync.yml) | Checks for new upstream commits and creates an issue for Copilot to merge | `workflow_dispatch` | Mondays at 10:00 UTC |
@@ -87,6 +89,42 @@ Auto-generated compiled workflow produced by `gh aw compile` from the correspond
---
+## Codegen Check
+
+**File:** [`codegen-check.yml`](workflows/codegen-check.yml)
+
+Verifies that the generated Java source files in `src/generated/java/` are up-to-date with the JSON schemas distributed in the `@github/copilot` npm package.
+
+Steps:
+1. Installs the codegen dependencies from `scripts/codegen/`
+2. Runs the Java code generator (`npm run generate`)
+3. Fails with a diff if any generated file differs from what is committed
+
+Run this locally with:
+```bash
+cd scripts/codegen && npm ci && npm run generate
+```
+
+If changes appear, commit the updated generated files.
+
+---
+
+## Update @github/copilot Dependency
+
+**File:** [`update-copilot-dependency.yml`](workflows/update-copilot-dependency.yml)
+
+Manual workflow triggered when a new version of the `@github/copilot` npm package is published. Accepts a `version` input (e.g. `1.0.25`).
+
+Steps:
+1. Updates `@github/copilot` in `scripts/codegen/package.json`
+2. Re-runs the Java code generator
+3. Commits the updated `package.json`, `package-lock.json`, and all regenerated Java files
+4. Opens (or updates) a pull request for review
+
+The resulting PR will be automatically validated by the **Codegen Check** workflow.
+
+---
+
## Copilot Setup Steps
**File:** [`copilot-setup-steps.yml`](workflows/copilot-setup-steps.yml)
diff --git a/pom.xml b/pom.xml
index b61c36166..95ed2602d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -255,12 +255,35 @@
+
+
+ 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.44.5
+
+ src/generated/java/**/*.java
+
4.33
diff --git a/scripts/codegen/.gitignore b/scripts/codegen/.gitignore
new file mode 100644
index 000000000..c2658d7d1
--- /dev/null
+++ b/scripts/codegen/.gitignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/scripts/codegen/java.ts b/scripts/codegen/java.ts
new file mode 100644
index 000000000..2a37e92af
--- /dev/null
+++ b/scripts/codegen/java.ts
@@ -0,0 +1,821 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+/**
+ * Java code generator for session-events and RPC types.
+ * Generates Java source files under src/generated/java/ from JSON Schema files.
+ */
+
+import fs from "fs/promises";
+import path from "path";
+import { fileURLToPath } from "url";
+import type { JSONSchema7 } from "json-schema";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+/** Root of the copilot-sdk-java repo */
+const REPO_ROOT = path.resolve(__dirname, "../..");
+
+/** Event types to exclude from generation (internal/legacy types) */
+const EXCLUDED_EVENT_TYPES = new Set(["session.import_legacy"]);
+
+const AUTO_GENERATED_HEADER = `// AUTO-GENERATED FILE - DO NOT EDIT`;
+const GENERATED_FROM_SESSION_EVENTS = `// Generated from: session-events.schema.json`;
+const GENERATED_FROM_API = `// Generated from: api.schema.json`;
+const GENERATED_ANNOTATION = `@javax.annotation.processing.Generated("copilot-sdk-codegen")`;
+const COPYRIGHT = `/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n *--------------------------------------------------------------------------------------------*/`;
+
+// ── Naming utilities ─────────────────────────────────────────────────────────
+
+function toPascalCase(name: string): string {
+ return name.split(/[-_.]/).map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join("");
+}
+
+function toJavaClassName(typeName: string): string {
+ return typeName.split(/[._]/).map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join("");
+}
+
+function toCamelCase(name: string): string {
+ const pascal = toPascalCase(name);
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
+}
+
+function toEnumConstant(value: string): string {
+ return value.toUpperCase().replace(/[-. ]/g, "_");
+}
+
+// ── Schema path resolution ───────────────────────────────────────────────────
+
+async function getSessionEventsSchemaPath(): Promise {
+ const candidates = [
+ path.join(REPO_ROOT, "scripts/codegen/node_modules/@github/copilot/schemas/session-events.schema.json"),
+ path.join(REPO_ROOT, "nodejs/node_modules/@github/copilot/schemas/session-events.schema.json"),
+ ];
+ for (const p of candidates) {
+ try {
+ await fs.access(p);
+ return p;
+ } catch {
+ // try next
+ }
+ }
+ throw new Error("session-events.schema.json not found. Run 'npm ci' in scripts/codegen first.");
+}
+
+async function getApiSchemaPath(): Promise {
+ const candidates = [
+ path.join(REPO_ROOT, "scripts/codegen/node_modules/@github/copilot/schemas/api.schema.json"),
+ path.join(REPO_ROOT, "nodejs/node_modules/@github/copilot/schemas/api.schema.json"),
+ ];
+ for (const p of candidates) {
+ try {
+ await fs.access(p);
+ return p;
+ } catch {
+ // try next
+ }
+ }
+ throw new Error("api.schema.json not found. Run 'npm ci' in scripts/codegen first.");
+}
+
+// ── File writing ─────────────────────────────────────────────────────────────
+
+async function writeGeneratedFile(relativePath: string, content: string): Promise {
+ const fullPath = path.join(REPO_ROOT, relativePath);
+ await fs.mkdir(path.dirname(fullPath), { recursive: true });
+ await fs.writeFile(fullPath, content, "utf-8");
+ console.log(` ✓ ${relativePath}`);
+ return fullPath;
+}
+
+// ── Java type mapping ─────────────────────────────────────────────────────────
+
+interface JavaTypeResult {
+ javaType: string;
+ imports: Set;
+}
+
+function schemaTypeToJava(
+ schema: JSONSchema7,
+ required: boolean,
+ context: string,
+ propName: string,
+ nestedTypes: Map
+): JavaTypeResult {
+ const imports = new Set();
+
+ if (schema.anyOf) {
+ const hasNull = schema.anyOf.some((s) => typeof s === "object" && (s as JSONSchema7).type === "null");
+ const nonNull = schema.anyOf.filter((s) => typeof s === "object" && (s as JSONSchema7).type !== "null");
+ if (nonNull.length === 1) {
+ const result = schemaTypeToJava(nonNull[0] as JSONSchema7, required && !hasNull, context, propName, nestedTypes);
+ return result;
+ }
+ return { javaType: "Object", imports };
+ }
+
+ if (schema.type === "string") {
+ if (schema.format === "uuid") {
+ imports.add("java.util.UUID");
+ return { javaType: "UUID", imports };
+ }
+ if (schema.format === "date-time") {
+ imports.add("java.time.OffsetDateTime");
+ return { javaType: "OffsetDateTime", imports };
+ }
+ if (schema.enum && Array.isArray(schema.enum)) {
+ const enumName = `${context}${toPascalCase(propName)}`;
+ nestedTypes.set(enumName, {
+ kind: "enum",
+ name: enumName,
+ values: schema.enum as string[],
+ description: schema.description,
+ });
+ return { javaType: enumName, imports };
+ }
+ return { javaType: "String", imports };
+ }
+
+ if (Array.isArray(schema.type)) {
+ const nonNullTypes = schema.type.filter((t) => t !== "null");
+ if (nonNullTypes.length === 1) {
+ const baseSchema = { ...schema, type: nonNullTypes[0] };
+ return schemaTypeToJava(baseSchema as JSONSchema7, required, context, propName, nestedTypes);
+ }
+ }
+
+ if (schema.type === "number" || schema.type === "integer") {
+ return { javaType: "Double", imports };
+ }
+
+ if (schema.type === "boolean") {
+ return { javaType: "Boolean", imports };
+ }
+
+ if (schema.type === "array") {
+ const items = schema.items as JSONSchema7 | undefined;
+ if (items) {
+ const itemResult = schemaTypeToJava(items, true, context, propName + "Item", nestedTypes);
+ imports.add("java.util.List");
+ for (const imp of itemResult.imports) imports.add(imp);
+ return { javaType: `List<${itemResult.javaType}>`, imports };
+ }
+ imports.add("java.util.List");
+ return { javaType: "List