chore: bump @github/copilot to ^1.0.75 and regenerate all SDKs - #2115
chore: bump @github/copilot to ^1.0.75 and regenerate all SDKs#2115MRayermannMSFT wants to merge 1 commit into
Conversation
Moves the runtime dependency from ^1.0.73 to ^1.0.75 and regenerates the
wire types for every language. No hand-written API changes beyond what the
new schemas force.
Generated surface
- Regenerates rpc/session-event types for Node.js, Python, Go, .NET, and
Rust from the 1.0.75 schemas.
Codegen: narrow the opaque-JSON conversion
- `x-opaque-json` was being applied to every annotated definition, but only
one of the fourteen (`CanvasJsonSchema`) is genuinely unconstrained; the
rest carry `anyOf` or `type` + `properties`. Blanket-converting them threw
away the structure of `McpServerConfig`, `ExternalToolResult`,
`EventLogTypes`, and `UIElicitationSchemaProperty`. The conversion now
requires the absence of any structural keyword.
- Genuinely opaque nodes emit `JsonValue` instead of `unknown`, which is a
global tightening; `ToolTelemetry` is realigned to match.
Fallout the new schemas force
- `sessionFs` gained `sqliteTransaction`, so every hand-written provider
adapter has to implement it. Node forwards to an optional provider hook
and classifies failures; Python, Go, and .NET have no transaction hook in
their provider interfaces, so they refuse the batch with a classified
`fatal` error rather than applying it non-atomically.
- `UIExitPlanModeResponse` gained `deferImplementation`, so the Rust e2e
struct literal has to name it.
- `lsp.initialize` and `telemetry.setFeatureOverrides` are declared
`Promise<void>` and now resolve with `{}` rather than `null`, so two e2e
assertions no longer pin the resolved value.
- The `JsonValue` tightening reaches `data.arguments`, which is no longer
optional-chained in the session-event type test.
There was a problem hiding this comment.
Pull request overview
Bumps @github/copilot to 1.0.75 and regenerates SDK wire types, including factory APIs and SQLite transaction handling.
Changes:
- Regenerates Node.js, Python, Go, .NET, and Rust protocol types.
- Adds recursive
JsonValueTypeScript generation. - Adds SessionFs SQLite transaction adapters and related compatibility updates.
Show a summary per file
| File | Description |
|---|---|
scripts/codegen/typescript.ts |
Refines opaque JSON generation. |
rust/tests/e2e/rpc_tasks_and_handlers.rs |
Updates exit-plan response fixture. |
rust/src/generated/session_events.rs |
Regenerates event types. |
rust/src/generated/rpc.rs |
Regenerates RPC surface. |
python/copilot/session_fs_provider.py |
Refuses unsupported transactions atomically. |
python/copilot/generated/session_events.py |
Regenerates event models. |
nodejs/test/typescript-codegen.test.ts |
Tests JsonValue generation. |
nodejs/test/session-event-types.test.ts |
Updates opaque argument assertion. |
nodejs/test/e2e/rpc_session_state.e2e.test.ts |
Stops asserting void RPC values. |
nodejs/src/types.ts |
Tightens tool telemetry types. |
nodejs/src/sessionFsProvider.ts |
Adds transaction provider support. |
nodejs/src/generated/session-events.ts |
Regenerates event definitions. |
nodejs/src/generated/rpc.ts |
Regenerates RPC definitions. |
nodejs/src/client.ts |
Serializes hook output as JSON. |
nodejs/package.json |
Bumps Copilot dependency. |
nodejs/package-lock.json |
Locks Copilot 1.0.75 binaries. |
go/zsession_events.go |
Re-exports new event types. |
go/session_fs_provider.go |
Refuses unsupported transactions. |
go/rpc/zsession_events.go |
Regenerates event models. |
go/rpc/zsession_encoding.go |
Decodes factory update events. |
go/rpc/zrpc_encoding.go |
Updates generated union decoding. |
dotnet/src/SessionFsProvider.cs |
Refuses unsupported transactions. |
dotnet/src/Generated/SessionEvents.cs |
Regenerates event models. |
Review details
Files not reviewed (6)
- go/rpc/zrpc.go: Generated file
- go/rpc/zrpc_encoding.go: Generated file
- go/rpc/zsession_encoding.go: Generated file
- go/rpc/zsession_events.go: Generated file
- go/zsession_events.go: Generated file
- nodejs/package-lock.json: Generated file
- Files reviewed: 12/27 changed files
- Comments generated: 4
- Review effort level: Medium
| const STRUCTURAL_SCHEMA_KEYWORDS = [ | ||
| "anyOf", | ||
| "oneOf", | ||
| "allOf", | ||
| "not", | ||
| "type", | ||
| "properties", | ||
| "patternProperties", | ||
| "items", | ||
| "prefixItems", | ||
| "enum", | ||
| "const", | ||
| "$ref", | ||
| ] as const; |
| transaction?( | ||
| statements: SessionFsSqliteTransactionStatement[] | ||
| ): Promise<SessionFsSqliteQueryResult[]>; |
| sqliteTransaction: async ({ statements }) => { | ||
| if (!provider.sqlite?.transaction) { | ||
| return { | ||
| results: [], | ||
| error: { |
| required: ["payload"], | ||
| }; | ||
|
|
||
| const normalized = normalizeSchemaForTypeScript(schema); |
Cross-SDK Consistency ReviewThis PR regenerates types for Node.js, Python, Go, .NET, and Rust from schema ✅ Consistent across all updated SDKsThe
The deliberate design choice (refuse atomically rather than apply non-atomically) is applied identically in all four SDKs. ✅
|
|
Parked for now. The Remaining CI blocker is a runtime regression, not this PR. Two Python E2E tests fail on Windows only, deterministically across two full runs:
Both time out waiting for the runtime to persist session state through a SessionFS provider —
Prime suspect, unconfirmed: the SessionFs port to Rust. The test passes Note that the hand-written fixes in this PR are not factory-specific — they are what bumping past 1.0.73 forces at all (the |
Why
Split out of #2114 so the Agent Factories authoring surface can be reviewed on its own. This half is almost entirely machine-generated: of ~12.1k added lines, roughly 200 are hand-written, and every one of those exists because the new schemas force it.
Bumping
@github/copilotfrom^1.0.73to^1.0.75is also useful independently of factories — 1.0.75 is the first published runtime carrying the full factory wire surface, but the regeneration picks up everything else that landed alongside it.What
Generated types — regenerated for Node.js, Python, Go, .NET, and Rust from the 1.0.75 schemas.
Codegen: narrow the opaque-JSON conversion.
x-opaque-jsonwas being applied to every annotated definition, but only 1 of the 14 (CanvasJsonSchema) is genuinely unconstrained; the other 13 carryanyOfortype+properties. Blanket-converting them threw away the structure ofMcpServerConfig,ExternalToolResult,EventLogTypes, andUIElicitationSchemaProperty. The conversion now requires the absence of any structural keyword. Genuinely opaque nodes emitJsonValuerather thanunknown, which is a global tightening.Fallout the new schemas force:
sessionFsgainedsqliteTransaction, so every hand-written provider adapter must implement it. Node forwards to an optional provider hook and classifies failures; Python, Go, and .NET have no transaction hook in their provider interfaces, so they refuse the batch with a classifiedfatalerror rather than applying it non-atomically. This is the deliberate call worth a look — refusing is safer than silently running a "transaction" that isn't atomic.UIExitPlanModeResponsegaineddeferImplementation, so a Rust e2e struct literal has to name it.lsp.initializeandtelemetry.setFeatureOverridesare declaredPromise<void>and now resolve with{}rather thannull, so two e2e assertions no longer pin the resolved value.JsonValuetightening reachesToolTelemetry, the hooks-invoke response, anddata.argumentsin a session-event type test.Verification
Verified standalone on this branch (not just as part of #2114): Node typecheck clean, lint 0 errors, 675 unit tests passing;
cargo check --all-targetsclean;go build ./...andgo vet ./...clean;dotnet buildclean with 0 warnings.Notes for reviewers
The generated files are the bulk of the diff and are reproducible —
cd scripts/codegen && npm run generateshould be a no-op on this branch. The review that matters is the ~200 hand-written lines listed under Fallout above, plus the codegen predicate change inscripts/codegen/typescript.ts.#2114 depends on this and will rebase onto it once this merges.