Skip to content

Commit d35c6a6

Browse files
authored
Merge pull request #224 from github/copilot/reference-impl-sync
Merge reference implementation SDK changes (2026-05-22)
2 parents aa96214 + 1f65147 commit d35c6a6

309 files changed

Lines changed: 8939 additions & 235 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.lastmerge

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
f6c1adf8329ad4206e5ed2e8d12fb8082bc841a2
1+
f4d22d70016c377881d86e4c77f8a3f93746ffae

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494
reference-impl-sync workflow and deal with the subsequent
9595
PR.
9696
-->
97-
<readonly-copilot-sdk-ref-impl-version-from-lastmerge-file-updated-by-reference-impl-sync>^1.0.49-1</readonly-copilot-sdk-ref-impl-version-from-lastmerge-file-updated-by-reference-impl-sync>
97+
<readonly-copilot-sdk-ref-impl-version-from-lastmerge-file-updated-by-reference-impl-sync>^1.0.52-1</readonly-copilot-sdk-ref-impl-version-from-lastmerge-file-updated-by-reference-impl-sync>
9898

9999
</properties>
100100

scripts/codegen/java.ts

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,25 @@ function toJavaClassName(typeName: string): string {
3737
return typeName.split(/[._]/).map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join("");
3838
}
3939

40+
/** Java reserved keywords and Object method names that cannot be used as record component names. */
41+
const JAVA_RESERVED_IDENTIFIERS = new Set([
42+
"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
43+
"continue", "default", "do", "double", "else", "enum", "extends", "final", "finally", "float",
44+
"for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native",
45+
"new", "package", "private", "protected", "public", "return", "short", "static", "strictfp",
46+
"super", "switch", "synchronized", "this", "throw", "throws", "transient", "try", "void",
47+
"volatile", "while",
48+
// Object methods that conflict with record component accessor names
49+
"wait", "notify", "notifyAll", "getClass", "clone", "finalize", "toString", "hashCode", "equals",
50+
]);
51+
4052
function toCamelCase(name: string): string {
4153
const pascal = toPascalCase(name);
42-
return pascal.charAt(0).toLowerCase() + pascal.slice(1);
54+
let result = pascal.charAt(0).toLowerCase() + pascal.slice(1);
55+
if (JAVA_RESERVED_IDENTIFIERS.has(result)) {
56+
result = result + "_";
57+
}
58+
return result;
4359
}
4460

4561
function toEnumConstant(value: string): string {
@@ -102,6 +118,11 @@ interface JavaTypeResult {
102118
let currentDefinitions: Record<string, JSONSchema7> = {};
103119
const pendingStandaloneTypes = new Map<string, JSONSchema7>();
104120

121+
// Cross-schema definitions: keyed by schema filename (e.g. "session-events.schema.json"),
122+
// value is the definitions map from that schema. Populated by generateRpcTypes so that
123+
// cross-schema $ref values like "session-events.schema.json#/definitions/Foo" can be resolved.
124+
const crossSchemaDefinitions = new Map<string, Record<string, JSONSchema7>>();
125+
105126
/**
106127
* Resolve a $ref in a JSON Schema against the current definitions.
107128
* Returns the resolved schema, or the original if no $ref is present.
@@ -131,6 +152,28 @@ function schemaTypeToJava(
131152

132153
// Resolve $ref first — register standalone types for generation
133154
if (schema.$ref) {
155+
// Handle cross-schema $ref (e.g. "session-events.schema.json#/definitions/Foo")
156+
const crossSchemaMatch = schema.$ref.match(/^([^#]+)#\/definitions\/(.+)$/);
157+
if (crossSchemaMatch) {
158+
const [, schemaFile, typeName] = crossSchemaMatch;
159+
const externalDefs = crossSchemaDefinitions.get(schemaFile);
160+
if (externalDefs) {
161+
const resolved = externalDefs[typeName];
162+
if (resolved) {
163+
// Save and swap currentDefinitions so recursive calls resolve against
164+
// the external schema's definitions.
165+
const savedDefs = currentDefinitions;
166+
currentDefinitions = externalDefs;
167+
const result = schemaTypeToJava(resolved, required, context, propName, nestedTypes);
168+
currentDefinitions = savedDefs;
169+
return result;
170+
}
171+
}
172+
// Fallback: extract just the type name and warn
173+
console.warn(`[codegen] Unresolved cross-schema $ref: ${schema.$ref}`);
174+
return { javaType: typeName, imports };
175+
}
176+
134177
const name = schema.$ref.replace(/^#\/definitions\//, "");
135178
const resolved = currentDefinitions[name];
136179
if (resolved) {
@@ -883,6 +926,19 @@ async function generateRpcTypes(schemaPath: string): Promise<void> {
883926
// Set module-level definitions for $ref resolution
884927
currentDefinitions = (schema.definitions ?? {}) as Record<string, JSONSchema7>;
885928
pendingStandaloneTypes.clear();
929+
crossSchemaDefinitions.clear();
930+
931+
// Load cross-schema definitions (session-events) so that cross-schema $ref values
932+
// like "session-events.schema.json#/definitions/Foo" can be resolved.
933+
try {
934+
const sessionEventsSchemaPath = await getSessionEventsSchemaPath();
935+
const sessionEventsContent = await fs.readFile(sessionEventsSchemaPath, "utf-8");
936+
const sessionEventsSchema = JSON.parse(sessionEventsContent) as JSONSchema7;
937+
crossSchemaDefinitions.set("session-events.schema.json",
938+
(sessionEventsSchema.definitions ?? {}) as Record<string, JSONSchema7>);
939+
} catch (e) {
940+
console.warn(`[codegen] Could not load session-events schema for cross-ref resolution: ${e}`);
941+
}
886942

887943
const packageName = "com.github.copilot.sdk.generated.rpc";
888944
const packageDir = `src/generated/java/com/github/copilot/sdk/generated/rpc`;

scripts/codegen/package-lock.json

Lines changed: 100 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/codegen/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"generate:java": "tsx java.ts"
88
},
99
"dependencies": {
10-
"@github/copilot": "^1.0.49-1",
10+
"@github/copilot": "^1.0.52-1",
1111
"json-schema": "^0.4.0",
1212
"tsx": "^4.20.6"
1313
}

src/generated/java/com/github/copilot/sdk/generated/AssistantMessageEvent.java

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantStreamingDeltaEvent.java

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantUsageCopilotUsageTokenDetail.java

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantUsageEvent.java

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generated/java/com/github/copilot/sdk/generated/AssistantUsageQuotaSnapshot.java

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)