From fa3ebf1ff9c7dc6fac9fd71f892511b553510338 Mon Sep 17 00:00:00 2001 From: tommaso-moro Date: Mon, 23 Feb 2026 14:09:51 +0000 Subject: [PATCH] use minimal types --- pkg/github/minimal_types.go | 30 ++++++++++++++++++++++++++++++ pkg/github/pullrequests.go | 8 ++++---- pkg/github/pullrequests_test.go | 12 ++++++------ 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/pkg/github/minimal_types.go b/pkg/github/minimal_types.go index 731ff6bdf..b48f5939a 100644 --- a/pkg/github/minimal_types.go +++ b/pkg/github/minimal_types.go @@ -272,8 +272,38 @@ type MinimalProjectStatusUpdate struct { Creator *MinimalUser `json:"creator,omitempty"` } +// MinimalPullRequestReview is the trimmed output type for pull request review objects to reduce verbosity. +type MinimalPullRequestReview struct { + ID int64 `json:"id"` + State string `json:"state"` + Body string `json:"body,omitempty"` + HTMLURL string `json:"html_url"` + User *MinimalUser `json:"user,omitempty"` + CommitID string `json:"commit_id,omitempty"` + SubmittedAt string `json:"submitted_at,omitempty"` + AuthorAssociation string `json:"author_association,omitempty"` +} + // Helper functions +func convertToMinimalPullRequestReview(review *github.PullRequestReview) MinimalPullRequestReview { + m := MinimalPullRequestReview{ + ID: review.GetID(), + State: review.GetState(), + Body: review.GetBody(), + HTMLURL: review.GetHTMLURL(), + User: convertToMinimalUser(review.GetUser()), + CommitID: review.GetCommitID(), + AuthorAssociation: review.GetAuthorAssociation(), + } + + if review.SubmittedAt != nil { + m.SubmittedAt = review.SubmittedAt.Format(time.RFC3339) + } + + return m +} + func convertToMinimalIssue(issue *github.Issue) MinimalIssue { m := MinimalIssue{ Number: issue.GetNumber(), diff --git a/pkg/github/pullrequests.go b/pkg/github/pullrequests.go index 2fba113aa..5da61231a 100644 --- a/pkg/github/pullrequests.go +++ b/pkg/github/pullrequests.go @@ -471,12 +471,12 @@ func GetPullRequestReviews(ctx context.Context, client *github.Client, deps Tool } } - r, err := json.Marshal(reviews) - if err != nil { - return nil, fmt.Errorf("failed to marshal response: %w", err) + minimalReviews := make([]MinimalPullRequestReview, 0, len(reviews)) + for _, review := range reviews { + minimalReviews = append(minimalReviews, convertToMinimalPullRequestReview(review)) } - return utils.NewToolResultText(string(r)), nil + return MarshalledTextResult(minimalReviews), nil } // PullRequestWriteUIResourceURI is the URI for the create_pull_request tool's MCP App UI resource. diff --git a/pkg/github/pullrequests_test.go b/pkg/github/pullrequests_test.go index 018636d40..7a0562a9c 100644 --- a/pkg/github/pullrequests_test.go +++ b/pkg/github/pullrequests_test.go @@ -2005,18 +2005,18 @@ func Test_GetPullRequestReviews(t *testing.T) { textContent := getTextResult(t, result) // Unmarshal and verify the result - var returnedReviews []*github.PullRequestReview + var returnedReviews []MinimalPullRequestReview err = json.Unmarshal([]byte(textContent.Text), &returnedReviews) require.NoError(t, err) assert.Len(t, returnedReviews, len(tc.expectedReviews)) for i, review := range returnedReviews { + assert.Equal(t, tc.expectedReviews[i].GetID(), review.ID) + assert.Equal(t, tc.expectedReviews[i].GetState(), review.State) + assert.Equal(t, tc.expectedReviews[i].GetBody(), review.Body) require.NotNil(t, tc.expectedReviews[i].User) require.NotNil(t, review.User) - assert.Equal(t, tc.expectedReviews[i].GetID(), review.GetID()) - assert.Equal(t, tc.expectedReviews[i].GetState(), review.GetState()) - assert.Equal(t, tc.expectedReviews[i].GetBody(), review.GetBody()) - assert.Equal(t, tc.expectedReviews[i].GetUser().GetLogin(), review.GetUser().GetLogin()) - assert.Equal(t, tc.expectedReviews[i].GetHTMLURL(), review.GetHTMLURL()) + assert.Equal(t, tc.expectedReviews[i].GetUser().GetLogin(), review.User.Login) + assert.Equal(t, tc.expectedReviews[i].GetHTMLURL(), review.HTMLURL) } }) }