Files
vibe-kanban/frontend
Louis Knight-Webb 9107b4b384 Add GitHub comments to WYSIWYG (vibe-kanban) (#1449)
* The implementation is complete. Here's a summary of what was added:

## Summary

I've implemented the endpoint to fetch all GitHub PR comments for a task attempt. The new endpoint is:

**`GET /api/task-attempts/{id}/pr/comments`**

### Files Modified

1. **`crates/services/src/services/github/cli.rs`**
   - Added `PrCommentAuthor` and `PrComment` types
   - Added `get_pr_comments()` method to `GhCli` that runs `gh pr view N --repo owner/repo --json comments`
   - Added `parse_pr_comments()` helper to parse the JSON response

2. **`crates/services/src/services/github.rs`**
   - Exported `PrComment` and `PrCommentAuthor` types
   - Added async `get_pr_comments()` method with retry logic (exponential backoff)

3. **`crates/server/src/routes/task_attempts.rs`**
   - Added `PrCommentsResponse` struct
   - Added `GetPrCommentsError` enum with variants: `NoPrAttached`, `GithubCliNotInstalled`, `GithubCliNotLoggedIn`
   - Added `get_pr_comments()` handler function
   - Registered the route at `/pr/comments`

4. **`crates/server/src/bin/generate_types.rs`**
   - Registered all new types for TypeScript generation

### Generated TypeScript Types

```typescript
type PrCommentsResponse = { comments: Array<PrComment> };

type GetPrCommentsError =
  | { "type": "no_pr_attached" }
  | { "type": "github_cli_not_installed" }
  | { "type": "github_cli_not_logged_in" };

type PrComment = {
  id: string,
  author: PrCommentAuthor,
  authorAssociation: string,
  body: string,
  createdAt: string,
  url: string
};

type PrCommentAuthor = { login: string };
```

* The enhancement is complete. Here's a summary of the changes:

## Summary

Enhanced the `GET /api/task-attempts/{id}/pr/comments` endpoint to fetch **both** general PR comments AND inline review comments, merged into a unified timeline.

### Response Format

```json
{
  "success": true,
  "data": {
    "comments": [
      {
        "comment_type": "general",
        "id": "IC_kwDOO7s21M7XzqRP",
        "author": "stunningpixels",
        "author_association": "MEMBER",
        "body": "Testing comments",
        "created_at": "2025-12-06T16:15:10Z",
        "url": "https://github.com/BloopAI/vibe-kanban/pull/1447#issuecomment-..."
      },
      {
        "comment_type": "review",
        "id": 2595085092,
        "author": "stunningpixels",
        "author_association": "MEMBER",
        "body": "undo this",
        "created_at": "2025-12-06T16:15:18Z",
        "url": "https://github.com/BloopAI/vibe-kanban/pull/1447#discussion_r...",
        "path": "frontend/src/components/layout/Navbar.tsx",
        "line": 23,
        "diff_hunk": "@@ -20,7 +20,6 @@ import {...}"
      }
    ]
  }
}
```

### TypeScript Types

```typescript
type UnifiedPrComment =
  | { comment_type: "general"; id: string; author: string; author_association: string; body: string; created_at: string; url: string; }
  | { comment_type: "review"; id: bigint; author: string; author_association: string; body: string; created_at: string; url: string; path: string; line: bigint | null; diff_hunk: string; };
```

* Add GitHub review comments (vibe-kanban b9ab9ab2)

frontend/src/components/tasks/TaskFollowUpSection.tsx

- New button to the right of attachment with github comment icon
- If user clicks, opens dialog
- Dialog will display list of comments, format like this:

```javascript

{

  "comments": [

    {

      "id": "IC_kwDOO7s21M7XAc3c",

      "author": {

        "login": "LSRCT"

      },

      "authorAssociation": "MEMBER",

      "body": "Hi! I tried to get claude to use the `AskUserQuestion` tool in vibe kanban but did not manage, it does not seem to have access to the tool at all. Could you give me a hint on how to best test this PR?",

      "createdAt": "2025-12-03T14:46:49Z",

      "includesCreatedEdit": false,

      "isMinimized": false,

      "minimizedReason": "",

      "reactionGroups": [],

      "url": "https://github.com/BloopAI/vibe-kanban/pull/1395#issuecomment-3607219676",

      "viewerDidAuthor": false

    },

    {

      "id": "IC_kwDOO7s21M7Xc1Pi",

      "author": {

        "login": "davidrudduck"

      },

      "authorAssociation": "NONE",

      "body": "> Hi! I tried to get claude to use the `AskUserQuestion` tool in vibe kanban but did not manage, it does not seem to have access to the tool at all. Could you give me a hint on how to best test this PR?\r\n\r\nI must have been having a daft night when I submitted this - am fixing this at the moment.",

      "createdAt": "2025-12-04T22:57:18Z",

      "includesCreatedEdit": false,

      "isMinimized": false,

      "minimizedReason": "",

      "reactionGroups": [],

      "url": "https://github.com/BloopAI/vibe-kanban/pull/1395#issuecomment-3614659554",

      "viewerDidAuthor": false

    }

  ]

}

```

The user will select a comment, this will then be added as a component to the chat.

The component should be fully serializable/deserializable as markdown <> WYSIWYG, just like we do for images atm.

The backend will be implemented separately so just hardcode a mock response in the frontend for now.

* PR 1449 failed because of i18n regressions (vibe-kanban 723e309c)

Please resolve the 7 hardcoded strings this PR introduces https://github.com/BloopAI/vibe-kanban/pull/1449

* PR 1449 failed because of i18n regressions (vibe-kanban 723e309c)

Please resolve the 7 hardcoded strings this PR introduces https://github.com/BloopAI/vibe-kanban/pull/1449
2025-12-06 19:26:29 +00:00
..
2025-06-25 09:36:07 +01:00
2025-06-14 15:14:08 -04:00
2025-12-05 10:50:01 +00:00
2025-06-14 15:14:08 -04:00
2025-06-14 15:14:08 -04:00