diff --git a/dotnet/src/Generated/Rpc.cs b/dotnet/src/Generated/Rpc.cs
index 85e55e4b8..9cee42097 100644
--- a/dotnet/src/Generated/Rpc.cs
+++ b/dotnet/src/Generated/Rpc.cs
@@ -775,7 +775,7 @@ internal FleetApi(JsonRpc rpc, string sessionId)
}
/// Calls "session.fleet.start".
- public async Task StartAsync(string? prompt, CancellationToken cancellationToken = default)
+ public async Task StartAsync(string? prompt = null, CancellationToken cancellationToken = default)
{
var request = new SessionFleetStartRequest { SessionId = _sessionId, Prompt = prompt };
return await CopilotClient.InvokeRpcAsync(_rpc, "session.fleet.start", [request], cancellationToken);
@@ -853,7 +853,7 @@ internal ToolsApi(JsonRpc rpc, string sessionId)
}
/// Calls "session.tools.handlePendingToolCall".
- public async Task HandlePendingToolCallAsync(string requestId, object? result, string? error, CancellationToken cancellationToken = default)
+ public async Task HandlePendingToolCallAsync(string requestId, object? result = null, string? error = null, CancellationToken cancellationToken = default)
{
var request = new SessionToolsHandlePendingToolCallRequest { SessionId = _sessionId, RequestId = requestId, Result = result, Error = error };
return await CopilotClient.InvokeRpcAsync(_rpc, "session.tools.handlePendingToolCall", [request], cancellationToken);
diff --git a/scripts/codegen/csharp.ts b/scripts/codegen/csharp.ts
index 463d856c8..0956e11b2 100644
--- a/scripts/codegen/csharp.ts
+++ b/scripts/codegen/csharp.ts
@@ -699,6 +699,13 @@ function emitSessionApiClass(className: string, node: Record, c
const paramEntries = (method.params?.properties ? Object.entries(method.params.properties) : []).filter(([k]) => k !== "sessionId");
const requiredSet = new Set(method.params?.required || []);
+ // Sort so required params come before optional (C# requires defaults at end)
+ paramEntries.sort((a, b) => {
+ const aReq = requiredSet.has(a[0]) ? 0 : 1;
+ const bReq = requiredSet.has(b[0]) ? 0 : 1;
+ return aReq - bReq;
+ });
+
const requestClassName = `${typeToClassName(method.rpcMethod)}Request`;
if (method.params) {
const reqClass = emitRpcClass(requestClassName, method.params, "internal", classes);
@@ -711,8 +718,9 @@ function emitSessionApiClass(className: string, node: Record, c
for (const [pName, pSchema] of paramEntries) {
if (typeof pSchema !== "object") continue;
- const csType = resolveRpcType(pSchema as JSONSchema7, requiredSet.has(pName), requestClassName, toPascalCase(pName), classes);
- sigParams.push(`${csType} ${pName}`);
+ const isReq = requiredSet.has(pName);
+ const csType = resolveRpcType(pSchema as JSONSchema7, isReq, requestClassName, toPascalCase(pName), classes);
+ sigParams.push(`${csType} ${pName}${isReq ? "" : " = null"}`);
bodyAssignments.push(`${toPascalCase(pName)} = ${pName}`);
}
sigParams.push("CancellationToken cancellationToken = default");