Redesign process transport options for v2 - #2536
Conversation
d37b73a to
e16c5cd
Compare
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>
e16c5cd to
2d358e0
Compare
Cross-SDK Consistency Review — PR #2536Summary: This PR extends the "process-scoped options moved onto out-of-process connections" refactor (originally landed for Node.js and Java in #2523) to the remaining four SDKs: .NET, Go, Python, and Rust. I compared the changes against the existing Node.js/Java implementations and found the migration to be consistent and well-executed. What was checked
FindingsNo cross-SDK inconsistencies found. Node.js and Java already had this design from #2523; this PR brings .NET, Go, Python, and Rust to parity with matching naming conventions per language idiom (PascalCase for .NET/Go, snake_case for Python/Rust, with Rust's per-variant No further action needed from a consistency standpoint. Nice work keeping all six SDKs aligned on this API surface.
|
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.