@happyvertical/repos
Standardized repository interface for GitHub, GitLab, Bitbucket, and Azure DevOps.
Installation
pnpm add @happyvertical/repos
Claude Code Context
Install Claude Code context files for AI-assisted development:
npx have-repos-context
This copies the package's AGENT.md documentation and metadata.json metadata to your project's .claude/ directory, enabling Claude to provide better assistance when working with this package.
Usage
import { getRepository } from '@happyvertical/repos';
// Create a GitHub repository client
const repo = await getRepository({
type: 'github',
owner: 'happyvertical',
repo: 'sdk',
token: process.env.GITHUB_TOKEN
});
// Get issue
const issue = await repo.getIssue(352);
// Add labels
await repo.addLabels(352, ['type: feature', 'priority: high', 'size: xl']);
// Post comment
await repo.addComment(352, '## 🤖 AI Triage\n\n**Type**: feature...');
// Search for duplicates
const duplicates = await repo.searchIssues('kanban automation', {
state: 'open',
labels: ['type: feature'],
});
Features
- Platform-agnostic: Works with GitHub, GitLab, Bitbucket, Azure DevOps
- Type-safe: Full TypeScript support
- Consistent API: Same interface across all platforms
- Factory pattern: Simple
getRepository()function - Comprehensive: Issues, PRs, labels, comments, assignments, search
API
Issues
getIssue(number)- Get issue detailscreateIssue(data)- Create new issueupdateIssue(number, data)- Update issuecloseIssue(number)- Close issue
Labels
addLabels(issueNumber, labels)- Add labels to issueremoveLabel(issueNumber, label)- Remove label from issuecreateLabel(label)- Create repository labelupdateLabel(name, label)- Update existing labellistLabels()- List all repository labels
Comments
addComment(issueNumber, body)- Add comment to issueupdateComment(commentId, body)- Update existing commentdeleteComment(commentId)- Delete commentlistComments(issueNumber)- List all comments on issue
Assignments
assignIssue(issueNumber, assignees)- Assign users to issueunassignIssue(issueNumber, assignees)- Unassign users from issue
Pull Requests
getPullRequest(number)- Get PR detailscreatePullRequest(data)- Create new PRmergePullRequest(number, method)- Merge PR
Search
searchIssues(query, filters)- Search issues with filters
Node IDs (for Projects V2)
getIssueNodeId(issueNumber)- Get GraphQL node ID for issuegetPRNodeId(prNumber)- Get GraphQL node ID for PR
Supported Platforms
- ✅ GitHub - Full support
- ⏳ GitLab - Coming soon
- ⏳ Bitbucket - Coming soon
- ⏳ Azure DevOps - Coming soon
License
MIT