Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions dotnet/src/Generated/Rpc.cs
Original file line number Diff line number Diff line change
Expand Up @@ -775,7 +775,7 @@ internal FleetApi(JsonRpc rpc, string sessionId)
}

/// <summary>Calls "session.fleet.start".</summary>
public async Task<SessionFleetStartResult> StartAsync(string? prompt, CancellationToken cancellationToken = default)
public async Task<SessionFleetStartResult> StartAsync(string? prompt = null, CancellationToken cancellationToken = default)
{
var request = new SessionFleetStartRequest { SessionId = _sessionId, Prompt = prompt };
return await CopilotClient.InvokeRpcAsync<SessionFleetStartResult>(_rpc, "session.fleet.start", [request], cancellationToken);
Expand Down Expand Up @@ -853,7 +853,7 @@ internal ToolsApi(JsonRpc rpc, string sessionId)
}

/// <summary>Calls "session.tools.handlePendingToolCall".</summary>
public async Task<SessionToolsHandlePendingToolCallResult> HandlePendingToolCallAsync(string requestId, object? result, string? error, CancellationToken cancellationToken = default)
public async Task<SessionToolsHandlePendingToolCallResult> 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<SessionToolsHandlePendingToolCallResult>(_rpc, "session.tools.handlePendingToolCall", [request], cancellationToken);
Expand Down
12 changes: 10 additions & 2 deletions scripts/codegen/csharp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -699,6 +699,13 @@ function emitSessionApiClass(className: string, node: Record<string, unknown>, 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);
Expand All @@ -711,8 +718,9 @@ function emitSessionApiClass(className: string, node: Record<string, unknown>, 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");
Expand Down
Loading