Redesign process transport options for v2 - #2536
Draft
SteveSandersonMS wants to merge 6 commits into
Draft
Conversation
SteveSandersonMS
force-pushed
the
copilot-sdk-2523-process-transport
branch
2 times, most recently
from
September 4, 2026 16:39
e16c5cd to
2d358e0
Compare
This comment has been minimized.
This comment has been minimized.
SteveSandersonMS
force-pushed
the
copilot-sdk-2523-process-transport
branch
from
September 10, 2026 12:06
2d358e0 to
a7bdc48
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Move process-scoped launch settings from shared client options onto the out-of-process runtime connections across SDKs. Update docs, changelog migration notes, tests, and snapshots for the new v2 API boundary. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Go: restore unconditional default of processEnv to os.Environ() when unset, matching pre-v2 behavior. The default previously only applied to out-of-process connections, which broke TestClient_EnvOptions under the inprocess CI matrix (COPILOT_SDK_DEFAULT_CONNECTION=inprocess) since the env default is harmless (and unused) for in-process transport but still part of the client's observable state. Removed the now-unused outOfProcessConnection interface and connEnv/ connWorkingDirectory methods that only existed to support the removed gate. - Python: fix two e2e tests in test_session_e2e.py that still passed working_directory/env as CopilotClient-level kwargs instead of on the RuntimeConnection, left over from an earlier pass of the v2 process/transport migration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restore all test/snapshots/**/*.yaml files to match origin/main. These had been unintentionally altered/regenerated by earlier local e2e test runs against a live model (recorded new conversation content that doesn't match the checked-in mocked-proxy fixtures) and were carried through the branch's history and this session's rebase without being noticed, since git auto-merges YAML content without conflict. None of this content is related to the process/transport option redesign; the only fixtures this PR should touch are the small 'Tool ... does not exist' message truncation that varies by available tool count, which is itself unrelated pre-existing test-environment noise, not something introduced by option relocation. Also removed two orphan snapshot files with no corresponding test in the current tree (should_use_outofprocess_connection_workingdirectory.yaml and should_report_failure_or_implemented_error_for_missing_mcp_sampling.yaml). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
should_use_outofprocess_connection_workingdirectory.yaml backs the .NET ClientOptionsE2ETests test that was renamed from Should_Use_Client_Cwd_For_Default_WorkingDirectory to Should_Use_OutOfProcess_Connection_WorkingDirectory as part of this PR (the .NET E2E harness resolves snapshot fixtures by test method name). This file was incorrectly removed as an apparent orphan in the prior snapshot-cleanup commit; it is in fact required and its content was already correct. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update the Windows-only abrupt host termination test to read process options from the Stdio transport after the v2 process option move. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
SteveSandersonMS
force-pushed
the
copilot-sdk-2523-process-transport
branch
from
September 11, 2026 10:14
1ea5ef7 to
89a02f1
Compare
This comment has been minimized.
This comment has been minimized.
Move remaining Node E2E process options onto out-of-process connections, use a supported resume model, and apply Rust formatter output after the Windows lifecycle migration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
SDK Consistency Review — PR #2536Verdict: ✅ Consistent across all six SDKs. This PR moves process-scoped launch settings (working directory, environment variables) off the shared client options and onto the out-of-process connection/transport types, and it does so identically in Node.js, Python, Go, .NET, Java, and Rust:
Observations:
No cross-language API drift, naming mismatches, or missing-language gaps were found. This is a model example of a coordinated cross-SDK breaking change.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #2523.
This PR implements the v2 process/transport configuration boundary across SDKs by moving SDK-managed process launch settings off shared client options and onto the out-of-process runtime connection/transport APIs that actually spawn a runtime process.
Current-main findings
Before editing, I refreshed and inspected the latest
origin/mainand the issue context from #2523, parent #2522, superseded tracker #1934, and linked historical issues/PRs. Currentmainalready contains the compatible in-process groundwork from #1930/#1976 for many first-class options, but the client-wide process launch APIs remained present and could still be configured for transports where they are inapplicable. This PR carries forward the remaining maintainer-intended v2 cleanup from #1934/#2523 rather than treating it as optional design exploration.Breaking changes and migration
CopilotClientOptions.WorkingDirectoryandCopilotClientOptions.Environment; moved them to stdio/TCP out-of-process runtime connections. RenamedChildProcessRuntimeConnectiontoOutOfProcessRuntimeConnection.ClientOptions.WorkingDirectoryandClientOptions.Env; moved them toStdioConnectionandTCPConnection. The unexported child-process helper is renamed to out-of-process terminology.CopilotClientOptions.cwd/setCwdandCopilotClientOptions.environment/setEnvironment; moved them toStdioRuntimeConnectionandTcpRuntimeConnectionasworkingDirectoryandenvironment. Java has no shared child-process base class, so this intentionally uses the two concrete out-of-process connection types.workingDirectoryandenv; moved them to the renamedOutOfProcessRuntimeConnectionbase used by stdio/TCP connections. RenamedChildProcessRuntimeConnectionaccordingly.working_directoryandenv; moved them to the renamedOutOfProcessRuntimeConnectionbase used by stdio/TCP connections. RenamedChildProcessRuntimeConnectionaccordingly.program, prefix/raw args,extra_args,working_directory,env, andenv_removefromClientOptionstoOutOfProcessOptionscarried by the process-spawning transport variants.Transport::Externaldoes not expose process launch options because the SDK does not own that process.The changelog and SDK READMEs include before/after examples for the migration path.
Runtime follow-up
The SDK-side API cleanup is implemented here. Runtime-side per-client host environment consumption remains tracked separately in #2533, the consolidated follow-up for runtime work required by #2523. This PR does not embed or acquire runtime artifacts and does not take lifecycle/SQLite work from #2524/#2525.
Validation
origin/mainbefore final rebase.getCwd,setCwd,.cwd,CopilotClientOptions.environment,getEnvironment,setEnvironment) after the migration../mvnw test-compile jar:jar,./mvnw -pl sdk verify -Dskip.test.harness=true, and./mvnw -pl sdk spotless:checkfor the environment-only phase. The follow-up cwd/full cross-SDK validation is intentionally left to CI because local E2E/Maven runs were prohibitively expensive in this sandbox.