Skip to content
Open
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
1,098 changes: 1,006 additions & 92 deletions dotnet/src/Generated/Rpc.cs

Large diffs are not rendered by default.

222 changes: 222 additions & 0 deletions dotnet/src/Generated/SessionEvents.cs

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions dotnet/src/Types.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2736,6 +2736,10 @@ public sealed class SessionMetadata
/// </summary>
public string? Summary { get; set; }
/// <summary>
/// Identifier of the client driving the session.
/// </summary>
public string? ClientName { get; set; }
/// <summary>
/// Whether the session is running on a remote server.
/// </summary>
public bool IsRemote { get; set; }
Expand Down
24 changes: 24 additions & 0 deletions dotnet/test/Unit/SerializationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,30 @@ public void ResumeSessionRequest_CanSerializeInstructionDirectories_WithSdkOptio
Assert.Equal("C:\\resume-instructions", root.GetProperty("instructionDirectories")[0].GetString());
}

[Fact]
public void SessionMetadata_CanRoundTripClientName_WithSdkOptions()
{
var options = GetSerializerOptions();
var original = new SessionMetadata
{
SessionId = "session-1",
StartTime = DateTimeOffset.Parse("2025-01-01T00:00:00Z"),
ModifiedTime = DateTimeOffset.Parse("2025-01-01T01:00:00Z"),
Summary = "loaded session",
ClientName = "my-app",
IsRemote = false
};

var json = JsonSerializer.Serialize(original, options);
using var document = JsonDocument.Parse(json);
var root = document.RootElement;
Assert.Equal("my-app", root.GetProperty("clientName").GetString());

var deserialized = JsonSerializer.Deserialize<SessionMetadata>(json, options);
Assert.NotNull(deserialized);
Assert.Equal("my-app", deserialized.ClientName);
}

[Fact]
public void CreateSessionRequest_CanSerializeEnableSessionTelemetry_WithSdkOptions()
{
Expand Down
27 changes: 27 additions & 0 deletions go/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,33 @@ func TestResumeSessionRequest_ClientName(t *testing.T) {
})
}

func TestSessionMetadata_ClientName(t *testing.T) {
t.Run("round-trips clientName in JSON", func(t *testing.T) {
var metadata SessionMetadata
if err := json.Unmarshal([]byte(`{
"sessionId":"s1",
"startTime":"2025-01-01T00:00:00Z",
"modifiedTime":"2025-01-01T01:00:00Z",
"summary":"loaded session",
"clientName":"my-app",
"isRemote":false
}`), &metadata); err != nil {
t.Fatalf("Failed to unmarshal: %v", err)
}
if metadata.ClientName == nil || *metadata.ClientName != "my-app" {
t.Fatalf("Expected clientName to be my-app, got %v", metadata.ClientName)
}

data, err := json.Marshal(metadata)
if err != nil {
t.Fatalf("Failed to marshal: %v", err)
}
if !strings.Contains(string(data), `"clientName":"my-app"`) {
t.Fatalf("Expected marshaled JSON to include clientName, got %s", string(data))
}
})
}

func TestCreateSessionRequest_Agent(t *testing.T) {
t.Run("includes agent in JSON when set", func(t *testing.T) {
req := createSessionRequest{Agent: "test-agent"}
Expand Down
Loading
Loading