<!-- source-hash: 191ada0d5f9c1c69293935f38aeafd78 -->
Defines TypeScript entity types for GitHub activity data used in chat card rendering across the Flamingo/OpenFrame platform.

## Key Components

- **`GitHubActivityKind`** — Union type discriminating between `'commit'`, `'pull_request'`, and `'pr_review'` activity variants
- **`PrReviewState`** — Union type for PR review states (`APPROVED`, `CHANGES_REQUESTED`, `COMMENTED`, `DISMISSED`, `PENDING`); drives color/badge rendering in `GitHubActivityCard`
- **`GitHubActivityItem`** — Core interface representing a single GitHub activity row passed to `GitHubActivityCard`

| Field | Type | Description |
|-------|------|-------------|
| `id` | `string` | Commit SHA, PR number, or review ID |
| `title` | `string` | Commit message, PR title, or review state label |
| `repo` | `string?` | `"owner/repo"` format, derived from URL if omitted |
| `dateUpdated` | `string \| number \| null` | ISO timestamp or ms epoch |
| `url` | `string \| null` | GitHub URL used as link target |
| `kind` | `GitHubActivityKind?` | Defaults to `'commit'` when not supplied |

## Usage Example

```typescript
import type { GitHubActivityItem, PrReviewState } from '@/lib/types/github-activity';

const commitActivity: GitHubActivityItem = {
  id: 'a1b2c3d',
  title: 'fix: resolve ticket sync edge case',
  repo: 'flamingo-run/openframe',
  dateUpdated: '2024-11-01T10:30:00Z',
  url: 'https://github.com/flamingo-run/openframe/commit/a1b2c3d',
  kind: 'commit',
};

const reviewActivity: GitHubActivityItem = {
  id: 'review-42',
  title: 'APPROVED',
  repo: 'flamingo-run/openframe',
  dateUpdated: Date.now(),
  url: 'https://github.com/flamingo-run/openframe/pull/42#pullrequestreview',
  kind: 'pr_review',
};
```

This type is intentionally decoupled from `GitHubActivityCard` so clients can construct, pass, or extend activity data without importing UI components.