Skip to content

Enhance CLI build process and strong-name sign .NET SDK#4

Merged
anishi1222 merged 4 commits into
anishi1222:mainfrom
github:main
Jun 24, 2026
Merged

Enhance CLI build process and strong-name sign .NET SDK#4
anishi1222 merged 4 commits into
anishi1222:mainfrom
github:main

Conversation

@anishi1222

Copy link
Copy Markdown
Owner

This pull request introduces support for client-side interception of LLM inference requests in the .NET Copilot SDK, enabling advanced scenarios such as BYOK (Bring Your Own Key) or custom model routing. It also adds new polyfills for .NET Standard 2.0 compatibility and improves process cleanup logic. Additionally, comprehensive end-to-end tests are included for the new request interception feature.

LLM Inference Request Interception:

  • Added a new RequestHandler property to CopilotClientOptions, allowing clients to intercept and handle all LLM inference HTTP/WebSocket requests via a custom CopilotRequestHandler implementation. This enables scenarios like BYOK and custom model routing. [1] [2] [3] [4] [5]
  • Integrated registration and configuration of client-global API handlers for LLM inference in the client connection lifecycle, ensuring that the handler is registered and used for outbound requests. [1] [2]

Process Cleanup and Runtime Shutdown:

  • Simplified and corrected the process cleanup logic: after runtime shutdown, the client now immediately terminates the child process instead of waiting for a self-exit that will never occur, preventing unnecessary timeouts. [1] [2]

.NET Standard 2.0 Polyfills:

  • Added polyfills to DownlevelExtensions.cs for missing .NET Standard 2.0 APIs, including Encoding.GetString(ReadOnlySpan<byte>), cancellable HttpContent.ReadAsStreamAsync, and WebSocket extensions for span-based send/receive methods and a ValueWebSocketReceiveResult struct. [1] [2]

Testing:

  • Introduced new end-to-end tests (CopilotRequestCancelErrorE2ETests) covering error and cancellation scenarios for custom LLM inference handlers, ensuring robust handling of thrown exceptions and runtime-initiated request cancellations.

Assembly Signing:

  • Enabled strong-name signing for the GitHub.Copilot.SDK assembly by specifying an Open.snk key file and setting SignAssembly to true.

SteveSandersonMS and others added 4 commits June 23, 2026 10:58
…ation (#1776)

* fix(rust): backdate extracted CLI mtime to stop self-invalidation

When `bundled-cli` is off, `build.rs` watches the extracted CLI binary via
`cargo:rerun-if-changed` so a deleted cache binary forces a re-extract. On a
cold cache the same build script *creates* that binary mid-build, after the
download — so its mtime ends up newer than cargo's build-script `output`
reference (stamped when the script was spawned). The next identical `cargo`
invocation then sees the watched file as "changed", reruns build.rs, recompiles
the SDK crate, and relinks every downstream crate (observed ~9 min of wasted CI
on a second cargo invocation in the same job).

Backdate the staged binary's mtime to the Unix epoch before the atomic rename
(rename preserves mtime), so it lands unambiguously older than any real build
reference and a no-change rebuild stays a true no-op. Best-effort: on error we
emit a `cargo:warning` and continue, reverting to the prior redundant-rebuild
behaviour rather than breaking the build. The deleted-file recovery contract is
untouched — a missing file still can't be stat'd, so cargo still reruns.

Embed mode (`bundled-cli` on) is unaffected: it emits no `rerun-if-changed` on
any build-created file.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor(rust): write staging binary through a single file handle

Address review: open the staging file once and perform the write, permission-set, and mtime-backdate on one handle instead of reopening it for each step. Write and chmod failures stay fatal; the epoch backdate stays best-effort (warn and continue). Behavior is otherwise unchanged: the extracted binary still lands epoch-dated so a no-change rebuild is a true no-op.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use the canonical .NET Open.snk key to strong-name sign the GitHub.Copilot.SDK assembly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@anishi1222 anishi1222 merged commit b302822 into anishi1222:main Jun 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants