@github-tools/sdk 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-D9aKsd_7.mjs","names":[],"sources":["../src/client.ts","../src/tools/repository.ts","../src/tools/pull-requests.ts","../src/tools/issues.ts","../src/tools/search.ts","../src/tools/commits.ts","../src/tools/gists.ts","../src/tools/workflows.ts","../src/agents.ts"],"sourcesContent":["import { Octokit } from 'octokit'\n\nexport function createOctokit(token: string): Octokit {\n return new Octokit({ auth: token })\n}\n","import { tool } from 'ai'\nimport { z } from 'zod'\nimport { createOctokit } from '../client'\nimport type { ToolOptions } from '../types'\n\nasync function getRepositoryStep({ token, owner, repo }: { token: string, owner: string, repo: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.repos.get({ owner, repo })\n return {\n name: data.name,\n fullName: data.full_name,\n description: data.description,\n url: data.html_url,\n defaultBranch: data.default_branch,\n stars: data.stargazers_count,\n forks: data.forks_count,\n openIssues: data.open_issues_count,\n language: data.language,\n private: data.private,\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n }\n}\n\nexport const getRepository = (token: string) =>\n tool({\n description: 'Get information about a GitHub repository including description, stars, forks, language, and default branch',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner (user or organization)'),\n repo: z.string().describe('Repository name'),\n }),\n execute: async args => getRepositoryStep({ token, ...args }),\n })\n\nasync function listBranchesStep({ token, owner, repo, perPage }: { token: string, owner: string, repo: string, perPage: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.repos.listBranches({ owner, repo, per_page: perPage })\n return data.map(branch => ({\n name: branch.name,\n sha: branch.commit.sha,\n protected: branch.protected,\n }))\n}\n\nexport const listBranches = (token: string) =>\n tool({\n description: 'List branches in a GitHub repository',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n perPage: z.number().optional().default(30).describe('Number of branches to return (max 100)'),\n }),\n execute: async args => listBranchesStep({ token, ...args }),\n })\n\nasync function getFileContentStep({ token, owner, repo, path, ref }: { token: string, owner: string, repo: string, path: string, ref?: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.repos.getContent({ owner, repo, path, ref })\n if (Array.isArray(data)) {\n return { type: 'directory', entries: data.map(e => ({ name: e.name, type: e.type, path: e.path })) }\n }\n if (data.type !== 'file') {\n return { type: data.type, path: data.path }\n }\n const content = Buffer.from(data.content, 'base64').toString('utf-8')\n return {\n type: 'file',\n path: data.path,\n sha: data.sha,\n size: data.size,\n content,\n }\n}\n\nexport const getFileContent = (token: string) =>\n tool({\n description: 'Get the content of a file from a GitHub repository',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n path: z.string().describe('Path to the file in the repository'),\n ref: z.string().optional().describe('Branch, tag, or commit SHA (defaults to the default branch)'),\n }),\n execute: async args => getFileContentStep({ token, ...args }),\n })\n\nasync function createBranchStep({ token, owner, repo, branch, from }: { token: string, owner: string, repo: string, branch: string, from?: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n let sha = from\n if (!sha || !sha.match(/^[0-9a-f]{40}$/i)) {\n const { data: ref } = await octokit.rest.git.getRef({\n owner,\n repo,\n ref: `heads/${from || (await octokit.rest.repos.get({ owner, repo })).data.default_branch}`,\n })\n sha = ref.object.sha\n }\n const { data } = await octokit.rest.git.createRef({\n owner,\n repo,\n ref: `refs/heads/${branch}`,\n sha,\n })\n return {\n ref: data.ref,\n sha: data.object.sha,\n url: data.url,\n }\n}\n\nexport const createBranch = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Create a new branch in a GitHub repository from an existing branch or commit SHA',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n branch: z.string().describe('Name for the new branch'),\n from: z.string().optional().describe('Source branch name or commit SHA to branch from (defaults to the default branch)'),\n }),\n execute: async args => createBranchStep({ token, ...args }),\n })\n\nasync function forkRepositoryStep({ token, owner, repo, organization, name }: { token: string, owner: string, repo: string, organization?: string, name?: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.repos.createFork({\n owner,\n repo,\n organization,\n name,\n })\n return {\n name: data.name,\n fullName: data.full_name,\n url: data.html_url,\n cloneUrl: data.clone_url,\n sshUrl: data.ssh_url,\n defaultBranch: data.default_branch,\n private: data.private,\n parent: data.parent ? { fullName: data.parent.full_name, url: data.parent.html_url } : null,\n }\n}\n\nexport const forkRepository = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Fork a GitHub repository to the authenticated user account or a specified organization',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner to fork from'),\n repo: z.string().describe('Repository name to fork'),\n organization: z.string().optional().describe('Organization to fork into (omit to fork to your personal account)'),\n name: z.string().optional().describe('Name for the forked repository (defaults to the original name)'),\n }),\n execute: async args => forkRepositoryStep({ token, ...args }),\n })\n\nasync function createRepositoryStep({ token, name, description, isPrivate, autoInit, gitignoreTemplate, licenseTemplate, org }: { token: string, name: string, description?: string, isPrivate: boolean, autoInit: boolean, gitignoreTemplate?: string, licenseTemplate?: string, org?: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const params = {\n name,\n description,\n private: isPrivate,\n auto_init: autoInit,\n gitignore_template: gitignoreTemplate,\n license_template: licenseTemplate,\n }\n\n const { data } = org\n ? await octokit.rest.repos.createInOrg({ org, ...params })\n : await octokit.rest.repos.createForAuthenticatedUser(params)\n\n return {\n name: data.name,\n fullName: data.full_name,\n description: data.description,\n url: data.html_url,\n cloneUrl: data.clone_url,\n sshUrl: data.ssh_url,\n defaultBranch: data.default_branch,\n private: data.private,\n createdAt: data.created_at,\n }\n}\n\nexport const createRepository = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Create a new GitHub repository for the authenticated user or a specified organization',\n needsApproval,\n inputSchema: z.object({\n name: z.string().describe('Repository name'),\n description: z.string().optional().describe('A short description of the repository'),\n isPrivate: z.boolean().optional().default(false).describe('Whether the repository is private'),\n autoInit: z.boolean().optional().default(false).describe('Create an initial commit with a README'),\n gitignoreTemplate: z.string().optional().describe('Gitignore template to use (e.g. \"Node\", \"Python\")'),\n licenseTemplate: z.string().optional().describe('License keyword (e.g. \"mit\", \"apache-2.0\")'),\n org: z.string().optional().describe('Organization to create the repository in (omit for personal repo)'),\n }),\n execute: async args => createRepositoryStep({ token, ...args }),\n })\n\nasync function createOrUpdateFileStep({ token, owner, repo, path, message, content, branch, sha }: { token: string, owner: string, repo: string, path: string, message: string, content: string, branch?: string, sha?: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const encoded = Buffer.from(content).toString('base64')\n const { data } = await octokit.rest.repos.createOrUpdateFileContents({\n owner,\n repo,\n path,\n message,\n content: encoded,\n branch,\n sha,\n })\n return {\n path: data.content?.path,\n sha: data.content?.sha,\n commitSha: data.commit.sha,\n commitUrl: data.commit.html_url,\n }\n}\n\nexport const createOrUpdateFile = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Create or update a file in a GitHub repository. Provide the SHA when updating an existing file.',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n path: z.string().describe('Path to the file in the repository'),\n message: z.string().describe('Commit message'),\n content: z.string().describe('File content (plain text, will be base64-encoded automatically)'),\n branch: z.string().optional().describe('Branch to commit to (defaults to the default branch)'),\n sha: z.string().optional().describe('SHA of the file being replaced (required when updating an existing file)'),\n }),\n execute: async args => createOrUpdateFileStep({ token, ...args }),\n })\n","import { tool } from 'ai'\nimport { z } from 'zod'\nimport { createOctokit } from '../client'\nimport type { ToolOptions } from '../types'\n\nasync function listPullRequestsStep({ token, owner, repo, state, perPage }: { token: string, owner: string, repo: string, state: 'open' | 'closed' | 'all', perPage: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.pulls.list({ owner, repo, state, per_page: perPage })\n return data.map(pr => ({\n number: pr.number,\n title: pr.title,\n state: pr.state,\n url: pr.html_url,\n author: pr.user?.login,\n branch: pr.head.ref,\n base: pr.base.ref,\n draft: pr.draft,\n createdAt: pr.created_at,\n updatedAt: pr.updated_at,\n }))\n}\n\nexport const listPullRequests = (token: string) =>\n tool({\n description: 'List pull requests for a GitHub repository',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n state: z.enum(['open', 'closed', 'all']).optional().default('open').describe('Filter by state'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n }),\n execute: async args => listPullRequestsStep({ token, ...args }),\n })\n\nasync function getPullRequestStep({ token, owner, repo, pullNumber }: { token: string, owner: string, repo: string, pullNumber: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.pulls.get({ owner, repo, pull_number: pullNumber })\n return {\n number: data.number,\n title: data.title,\n body: data.body,\n state: data.state,\n url: data.html_url,\n author: data.user?.login,\n branch: data.head.ref,\n base: data.base.ref,\n draft: data.draft,\n merged: data.merged,\n mergeable: data.mergeable,\n additions: data.additions,\n deletions: data.deletions,\n changedFiles: data.changed_files,\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n mergedAt: data.merged_at,\n }\n}\n\nexport const getPullRequest = (token: string) =>\n tool({\n description: 'Get detailed information about a specific pull request',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n pullNumber: z.number().describe('Pull request number'),\n }),\n execute: async args => getPullRequestStep({ token, ...args }),\n })\n\nasync function createPullRequestStep({ token, owner, repo, title, body, head, base, draft }: { token: string, owner: string, repo: string, title: string, body?: string, head: string, base: string, draft: boolean }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.pulls.create({ owner, repo, title, body, head, base, draft })\n return {\n number: data.number,\n title: data.title,\n url: data.html_url,\n state: data.state,\n draft: data.draft,\n branch: data.head.ref,\n base: data.base.ref,\n }\n}\n\nexport const createPullRequest = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Create a new pull request in a GitHub repository',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n title: z.string().describe('Pull request title'),\n body: z.string().optional().describe('Pull request description (supports Markdown)'),\n head: z.string().describe('Branch containing the changes (format: branch or username:branch)'),\n base: z.string().describe('Branch to merge into'),\n draft: z.boolean().optional().default(false).describe('Create as draft pull request'),\n }),\n execute: async args => createPullRequestStep({ token, ...args }),\n })\n\nasync function mergePullRequestStep({ token, owner, repo, pullNumber, commitTitle, commitMessage, mergeMethod }: { token: string, owner: string, repo: string, pullNumber: number, commitTitle?: string, commitMessage?: string, mergeMethod: 'merge' | 'squash' | 'rebase' }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.pulls.merge({\n owner,\n repo,\n pull_number: pullNumber,\n commit_title: commitTitle,\n commit_message: commitMessage,\n merge_method: mergeMethod,\n })\n return {\n merged: data.merged,\n message: data.message,\n sha: data.sha,\n }\n}\n\nexport const mergePullRequest = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Merge a pull request',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n pullNumber: z.number().describe('Pull request number'),\n commitTitle: z.string().optional().describe('Title for the automatic merge commit'),\n commitMessage: z.string().optional().describe('Extra detail to append to automatic commit message'),\n mergeMethod: z.enum(['merge', 'squash', 'rebase']).optional().default('merge').describe('Merge strategy'),\n }),\n execute: async args => mergePullRequestStep({ token, ...args }),\n })\n\nasync function addPullRequestCommentStep({ token, owner, repo, pullNumber, body }: { token: string, owner: string, repo: string, pullNumber: number, body: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.issues.createComment({ owner, repo, issue_number: pullNumber, body })\n return {\n id: data.id,\n url: data.html_url,\n body: data.body,\n author: data.user?.login,\n createdAt: data.created_at,\n }\n}\n\nexport const addPullRequestComment = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Add a comment to a pull request',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n pullNumber: z.number().describe('Pull request number'),\n body: z.string().describe('Comment text (supports Markdown)'),\n }),\n execute: async args => addPullRequestCommentStep({ token, ...args }),\n })\n\nasync function listPullRequestFilesStep({ token, owner, repo, pullNumber, perPage, page }: { token: string, owner: string, repo: string, pullNumber: number, perPage: number, page: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.pulls.listFiles({ owner, repo, pull_number: pullNumber, per_page: perPage, page })\n return data.map(file => ({\n filename: file.filename,\n status: file.status,\n additions: file.additions,\n deletions: file.deletions,\n changes: file.changes,\n patch: file.patch,\n }))\n}\n\nexport const listPullRequestFiles = (token: string) =>\n tool({\n description: 'List files changed in a pull request, including diff status and patch content',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n pullNumber: z.number().describe('Pull request number'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n page: z.number().optional().default(1).describe('Page number for pagination'),\n }),\n execute: async args => listPullRequestFilesStep({ token, ...args }),\n })\n\nasync function listPullRequestReviewsStep({ token, owner, repo, pullNumber, perPage, page }: { token: string, owner: string, repo: string, pullNumber: number, perPage: number, page: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.pulls.listReviews({ owner, repo, pull_number: pullNumber, per_page: perPage, page })\n return data.map(review => ({\n id: review.id,\n state: review.state,\n body: review.body,\n author: review.user?.login,\n url: review.html_url,\n submittedAt: review.submitted_at,\n }))\n}\n\nexport const listPullRequestReviews = (token: string) =>\n tool({\n description: 'List reviews on a pull request (approvals, change requests, and comments)',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n pullNumber: z.number().describe('Pull request number'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n page: z.number().optional().default(1).describe('Page number for pagination'),\n }),\n execute: async args => listPullRequestReviewsStep({ token, ...args }),\n })\n\nasync function createPullRequestReviewStep({ token, owner, repo, pullNumber, body, event, comments }: { token: string, owner: string, repo: string, pullNumber: number, body?: string, event: 'APPROVE' | 'REQUEST_CHANGES' | 'COMMENT', comments?: Array<{ path: string, body: string, line?: number, side?: 'LEFT' | 'RIGHT' }> }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.pulls.createReview({\n owner,\n repo,\n pull_number: pullNumber,\n body,\n event,\n comments,\n })\n return {\n id: data.id,\n state: data.state,\n body: data.body,\n url: data.html_url,\n author: data.user?.login,\n submittedAt: data.submitted_at,\n }\n}\n\nexport const createPullRequestReview = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Submit a pull request review — approve, request changes, or comment with optional inline comments on specific lines',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n pullNumber: z.number().describe('Pull request number'),\n body: z.string().optional().describe('Review body text (supports Markdown)'),\n event: z.enum(['APPROVE', 'REQUEST_CHANGES', 'COMMENT']).describe('Review action: approve, request changes, or comment'),\n comments: z.array(z.object({\n path: z.string().describe('File path relative to the repository root'),\n body: z.string().describe('Inline comment text'),\n line: z.number().optional().describe('Line number in the file to comment on'),\n side: z.enum(['LEFT', 'RIGHT']).optional().describe('Which side of the diff to comment on (LEFT = base, RIGHT = head)'),\n })).optional().describe('Inline review comments on specific files and lines'),\n }),\n execute: async args => createPullRequestReviewStep({ token, ...args }),\n })\n","import { tool } from 'ai'\nimport { z } from 'zod'\nimport { createOctokit } from '../client'\nimport type { ToolOptions } from '../types'\n\nasync function listIssuesStep({ token, owner, repo, state, labels, perPage }: { token: string, owner: string, repo: string, state: 'open' | 'closed' | 'all', labels?: string, perPage: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.issues.listForRepo({\n owner,\n repo,\n state,\n labels,\n per_page: perPage,\n })\n return data\n .filter(issue => !issue.pull_request)\n .map(issue => ({\n number: issue.number,\n title: issue.title,\n state: issue.state,\n url: issue.html_url,\n author: issue.user?.login,\n labels: issue.labels.map(l => (typeof l === 'string' ? l : l.name)),\n createdAt: issue.created_at,\n updatedAt: issue.updated_at,\n }))\n}\n\nexport const listIssues = (token: string) =>\n tool({\n description: 'List issues for a GitHub repository (excludes pull requests)',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n state: z.enum(['open', 'closed', 'all']).optional().default('open').describe('Filter by state'),\n labels: z.string().optional().describe('Comma-separated list of label names to filter by'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n }),\n execute: async args => listIssuesStep({ token, ...args }),\n })\n\nasync function getIssueStep({ token, owner, repo, issueNumber }: { token: string, owner: string, repo: string, issueNumber: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.issues.get({ owner, repo, issue_number: issueNumber })\n return {\n number: data.number,\n title: data.title,\n body: data.body,\n state: data.state,\n url: data.html_url,\n author: data.user?.login,\n assignees: data.assignees?.map(a => a.login),\n labels: data.labels.map(l => (typeof l === 'string' ? l : l.name)),\n comments: data.comments,\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n closedAt: data.closed_at,\n }\n}\n\nexport const getIssue = (token: string) =>\n tool({\n description: 'Get detailed information about a specific issue',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n issueNumber: z.number().describe('Issue number'),\n }),\n execute: async args => getIssueStep({ token, ...args }),\n })\n\nasync function createIssueStep({ token, owner, repo, title, body, labels, assignees }: { token: string, owner: string, repo: string, title: string, body?: string, labels?: string[], assignees?: string[] }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.issues.create({ owner, repo, title, body, labels, assignees })\n return {\n number: data.number,\n title: data.title,\n url: data.html_url,\n state: data.state,\n labels: data.labels.map(l => (typeof l === 'string' ? l : l.name)),\n }\n}\n\nexport const createIssue = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Create a new issue in a GitHub repository',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n title: z.string().describe('Issue title'),\n body: z.string().optional().describe('Issue description (supports Markdown)'),\n labels: z.array(z.string()).optional().describe('Labels to apply to the issue'),\n assignees: z.array(z.string()).optional().describe('GitHub usernames to assign to the issue'),\n }),\n execute: async args => createIssueStep({ token, ...args }),\n })\n\nasync function addIssueCommentStep({ token, owner, repo, issueNumber, body }: { token: string, owner: string, repo: string, issueNumber: number, body: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.issues.createComment({ owner, repo, issue_number: issueNumber, body })\n return {\n id: data.id,\n url: data.html_url,\n body: data.body,\n author: data.user?.login,\n createdAt: data.created_at,\n }\n}\n\nexport const addIssueComment = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Add a comment to a GitHub issue',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n issueNumber: z.number().describe('Issue number'),\n body: z.string().describe('Comment text (supports Markdown)'),\n }),\n execute: async args => addIssueCommentStep({ token, ...args }),\n })\n\nasync function closeIssueStep({ token, owner, repo, issueNumber, stateReason }: { token: string, owner: string, repo: string, issueNumber: number, stateReason: 'completed' | 'not_planned' }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.issues.update({\n owner,\n repo,\n issue_number: issueNumber,\n state: 'closed',\n state_reason: stateReason,\n })\n return {\n number: data.number,\n title: data.title,\n state: data.state,\n url: data.html_url,\n closedAt: data.closed_at,\n }\n}\n\nexport const closeIssue = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Close an open GitHub issue',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n issueNumber: z.number().describe('Issue number to close'),\n stateReason: z.enum(['completed', 'not_planned']).optional().default('completed').describe('Reason for closing'),\n }),\n execute: async args => closeIssueStep({ token, ...args }),\n })\n\nasync function listLabelsStep({ token, owner, repo, perPage, page }: { token: string, owner: string, repo: string, perPage: number, page: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.issues.listLabelsForRepo({ owner, repo, per_page: perPage, page })\n return data.map(label => ({\n name: label.name,\n color: label.color,\n description: label.description,\n }))\n}\n\nexport const listLabels = (token: string) =>\n tool({\n description: 'List labels available in a GitHub repository',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n page: z.number().optional().default(1).describe('Page number for pagination'),\n }),\n execute: async args => listLabelsStep({ token, ...args }),\n })\n\nasync function addLabelsStep({ token, owner, repo, issueNumber, labels }: { token: string, owner: string, repo: string, issueNumber: number, labels: string[] }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.issues.addLabels({ owner, repo, issue_number: issueNumber, labels })\n return data.map(label => ({\n name: label.name,\n color: label.color,\n description: label.description,\n }))\n}\n\nexport const addLabels = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Add labels to an issue or pull request',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n issueNumber: z.number().describe('Issue or pull request number'),\n labels: z.array(z.string()).describe('Label names to add'),\n }),\n execute: async args => addLabelsStep({ token, ...args }),\n })\n\nasync function removeLabelStep({ token, owner, repo, issueNumber, label }: { token: string, owner: string, repo: string, issueNumber: number, label: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n await octokit.rest.issues.removeLabel({ owner, repo, issue_number: issueNumber, name: label })\n return { removed: true, label, issueNumber }\n}\n\nexport const removeLabel = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Remove a label from an issue or pull request',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n issueNumber: z.number().describe('Issue or pull request number'),\n label: z.string().describe('Label name to remove'),\n }),\n execute: async args => removeLabelStep({ token, ...args }),\n })\n","import { tool } from 'ai'\nimport { z } from 'zod'\nimport { createOctokit } from '../client'\n\nasync function searchCodeStep({ token, query, perPage }: { token: string, query: string, perPage: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.search.code({ q: query, per_page: perPage })\n return {\n totalCount: data.total_count,\n items: data.items.map(item => ({\n name: item.name,\n path: item.path,\n url: item.html_url,\n repository: item.repository.full_name,\n sha: item.sha,\n })),\n }\n}\n\nexport const searchCode = (token: string) =>\n tool({\n description: 'Search for code in GitHub repositories. Use qualifiers like \"repo:owner/name\" to scope the search.',\n inputSchema: z.object({\n query: z.string().describe('Search query. Supports GitHub search qualifiers, e.g. \"useState repo:facebook/react\"'),\n perPage: z.number().optional().default(10).describe('Number of results to return (max 30)'),\n }),\n execute: async args => searchCodeStep({ token, ...args }),\n })\n\nasync function searchRepositoriesStep({ token, query, perPage, sort, order }: { token: string, query: string, perPage: number, sort?: 'stars' | 'forks' | 'help-wanted-issues' | 'updated', order: 'asc' | 'desc' }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.search.repos({ q: query, per_page: perPage, sort, order })\n return {\n totalCount: data.total_count,\n items: data.items.map(repo => ({\n name: repo.name,\n fullName: repo.full_name,\n description: repo.description,\n url: repo.html_url,\n stars: repo.stargazers_count,\n forks: repo.forks_count,\n language: repo.language,\n topics: repo.topics,\n })),\n }\n}\n\nexport const searchRepositories = (token: string) =>\n tool({\n description: 'Search for GitHub repositories by keyword, topic, language, or other qualifiers',\n inputSchema: z.object({\n query: z.string().describe('Search query. Supports GitHub search qualifiers, e.g. \"nuxt language:typescript stars:>1000\"'),\n perPage: z.number().optional().default(10).describe('Number of results to return (max 30)'),\n sort: z.enum(['stars', 'forks', 'help-wanted-issues', 'updated']).optional().describe('Sort field'),\n order: z.enum(['asc', 'desc']).optional().default('desc').describe('Sort order'),\n }),\n execute: async args => searchRepositoriesStep({ token, ...args }),\n })\n","import { tool } from 'ai'\nimport { z } from 'zod'\nimport { createOctokit } from '../client'\n\nconst BLAME_QUERY = `\n query ($owner: String!, $name: String!, $expression: String!, $path: String!) {\n repository(owner: $owner, name: $name) {\n object(expression: $expression) {\n ... on Commit {\n oid\n blame(path: $path) {\n ranges {\n startingLine\n endingLine\n age\n commit {\n oid\n abbreviatedOid\n messageHeadline\n authoredDate\n url\n author {\n name\n email\n user {\n login\n }\n }\n }\n }\n }\n }\n }\n }\n }\n`\n\ntype BlameQueryData = {\n repository: {\n object: null | {\n oid?: string\n blame?: {\n ranges: Array<{\n startingLine: number\n endingLine: number\n age: number\n commit: {\n oid: string\n abbreviatedOid: string\n messageHeadline: string\n authoredDate: string\n url: string\n author: null | {\n name: string | null\n email: string | null\n user: null | { login: string }\n }\n }\n }>\n }\n }\n } | null\n}\n\nasync function listCommitsStep({ token, owner, repo, path, sha, author, since, until, perPage }: { token: string, owner: string, repo: string, path?: string, sha?: string, author?: string, since?: string, until?: string, perPage: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.repos.listCommits({\n owner,\n repo,\n path,\n sha,\n author,\n since,\n until,\n per_page: perPage,\n })\n return data.map(commit => ({\n sha: commit.sha,\n message: commit.commit.message,\n author: commit.commit.author?.name,\n authorLogin: commit.author?.login,\n date: commit.commit.author?.date,\n url: commit.html_url,\n }))\n}\n\nexport const listCommits = (token: string) =>\n tool({\n description:\n 'List commits for a GitHub repository. Filter by file path to see commits that touched a file. For line-by-line attribution at a given ref, use getBlame instead.',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n path: z.string().optional().describe('Only commits containing this file path'),\n sha: z.string().optional().describe('Branch name or commit SHA to start listing from'),\n author: z.string().optional().describe('GitHub username or email to filter commits by'),\n since: z.string().optional().describe('Only commits after this date (ISO 8601 format)'),\n until: z.string().optional().describe('Only commits before this date (ISO 8601 format)'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n }),\n execute: async args => listCommitsStep({ token, ...args }),\n })\n\nasync function getCommitStep({ token, owner, repo, ref }: { token: string, owner: string, repo: string, ref: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.repos.getCommit({ owner, repo, ref })\n return {\n sha: data.sha,\n message: data.commit.message,\n author: data.commit.author?.name,\n authorLogin: data.author?.login,\n date: data.commit.author?.date,\n url: data.html_url,\n stats: data.stats ? {\n additions: data.stats.additions,\n deletions: data.stats.deletions,\n total: data.stats.total,\n } : null,\n files: data.files?.map(file => ({\n filename: file.filename,\n status: file.status,\n additions: file.additions,\n deletions: file.deletions,\n patch: file.patch,\n })),\n }\n}\n\nexport const getCommit = (token: string) =>\n tool({\n description: 'Get detailed information about a specific commit, including the list of files changed with additions and deletions',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n ref: z.string().describe('Commit SHA, branch name, or tag'),\n }),\n execute: async args => getCommitStep({ token, ...args }),\n })\n\nasync function getBlameStep({ token, owner, repo, path, ref, line, lineStart, lineEnd }: { token: string, owner: string, repo: string, path: string, ref?: string, line?: number, lineStart?: number, lineEnd?: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n let expression = ref\n if (!expression) {\n const { data } = await octokit.rest.repos.get({ owner, repo })\n expression = data.default_branch\n }\n\n const data = (await octokit.graphql(BLAME_QUERY, {\n owner,\n name: repo,\n expression,\n path,\n })) as BlameQueryData\n\n if (!data.repository) {\n return { error: `Repository not found: ${owner}/${repo}` }\n }\n\n const obj = data.repository.object\n if (!obj?.oid || !obj?.blame) {\n return {\n error:\n `Ref \"${expression}\" did not resolve to a commit for this repository (or the path is invalid). Pass a branch name, tag, or full commit SHA.`,\n }\n }\n\n let ranges = obj.blame.ranges.map(r => ({\n startingLine: r.startingLine,\n endingLine: r.endingLine,\n age: r.age,\n commit: {\n sha: r.commit.oid,\n abbreviatedSha: r.commit.abbreviatedOid,\n messageHeadline: r.commit.messageHeadline,\n authoredDate: r.commit.authoredDate,\n url: r.commit.url,\n authorName: r.commit.author?.name ?? null,\n authorEmail: r.commit.author?.email ?? null,\n authorLogin: r.commit.author?.user?.login ?? null,\n },\n }))\n\n if (line != null) {\n ranges = ranges.filter(r => line >= r.startingLine && line <= r.endingLine)\n } else if (lineStart != null || lineEnd != null) {\n const start = lineStart ?? 1\n const end = lineEnd ?? Number.MAX_SAFE_INTEGER\n ranges = ranges.filter(r => r.endingLine >= start && r.startingLine <= end)\n }\n\n return {\n ref: expression,\n tipSha: obj.oid,\n path,\n rangeCount: ranges.length,\n ranges,\n }\n}\n\nexport const getBlame = (token: string) =>\n tool({\n description:\n 'Line-level git blame for a file at a commit-like ref (branch, tag, or SHA). Returns contiguous ranges mapping lines to the commits that last modified them — use this to see who introduced a line and when (GitHub GraphQL API).',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n path: z.string().describe('Path to the file in the repository'),\n ref: z\n .string()\n .optional()\n .describe('Branch name, tag, or commit SHA (defaults to the repository default branch)'),\n line: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('If set, only return blame ranges that include this line number'),\n lineStart: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('When used with lineEnd, only return ranges overlapping this window'),\n lineEnd: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('When used with lineStart, only return ranges overlapping this window'),\n }),\n execute: async args => getBlameStep({ token, ...args }),\n })\n","import { tool } from 'ai'\nimport { z } from 'zod'\nimport { createOctokit } from '../client'\nimport type { ToolOptions } from '../types'\n\nasync function listGistsStep({ token, username, perPage, page }: { token: string, username?: string, perPage: number, page: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = username\n ? await octokit.rest.gists.listForUser({ username, per_page: perPage, page })\n : await octokit.rest.gists.list({ per_page: perPage, page })\n return data.map(gist => ({\n id: gist.id,\n description: gist.description,\n public: gist.public,\n url: gist.html_url,\n files: Object.keys(gist.files ?? {}),\n owner: gist.owner?.login,\n comments: gist.comments,\n createdAt: gist.created_at,\n updatedAt: gist.updated_at,\n }))\n}\n\nexport const listGists = (token: string) =>\n tool({\n description: 'List gists for the authenticated user or a specific user',\n inputSchema: z.object({\n username: z.string().optional().describe('GitHub username — omit to list your own gists'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n page: z.number().optional().default(1).describe('Page number for pagination'),\n }),\n execute: async args => listGistsStep({ token, ...args }),\n })\n\nasync function getGistStep({ token, gistId }: { token: string, gistId: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.gists.get({ gist_id: gistId })\n return {\n id: data.id,\n description: data.description,\n public: data.public,\n url: data.html_url,\n owner: data.owner?.login,\n files: Object.values(data.files ?? {}).map(file => ({\n filename: file?.filename,\n language: file?.language,\n size: file?.size,\n content: file?.content,\n })),\n comments: data.comments,\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n }\n}\n\nexport const getGist = (token: string) =>\n tool({\n description: 'Get a gist by ID, including file contents',\n inputSchema: z.object({\n gistId: z.string().describe('Gist ID'),\n }),\n execute: async args => getGistStep({ token, ...args }),\n })\n\nasync function listGistCommentsStep({ token, gistId, perPage, page }: { token: string, gistId: string, perPage: number, page: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.gists.listComments({ gist_id: gistId, per_page: perPage, page })\n return data.map(comment => ({\n id: comment.id,\n body: comment.body,\n author: comment.user?.login,\n url: comment.url,\n createdAt: comment.created_at,\n updatedAt: comment.updated_at,\n }))\n}\n\nexport const listGistComments = (token: string) =>\n tool({\n description: 'List comments on a gist',\n inputSchema: z.object({\n gistId: z.string().describe('Gist ID'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n page: z.number().optional().default(1).describe('Page number for pagination'),\n }),\n execute: async args => listGistCommentsStep({ token, ...args }),\n })\n\nasync function createGistStep({ token, description, files, isPublic }: { token: string, description?: string, files: Record<string, { content: string }>, isPublic: boolean }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.gists.create({\n description,\n files,\n public: isPublic,\n })\n return {\n id: data.id,\n description: data.description,\n public: data.public,\n url: data.html_url,\n files: Object.keys(data.files ?? {}),\n owner: data.owner?.login,\n }\n}\n\nexport const createGist = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Create a new gist with one or more files',\n needsApproval,\n inputSchema: z.object({\n description: z.string().optional().describe('Gist description'),\n files: z.record(z.string(), z.object({ content: z.string().describe('File content') }))\n .describe('Files to include, keyed by filename'),\n isPublic: z.boolean().optional().default(false).describe('Whether the gist is public'),\n }),\n execute: async args => createGistStep({ token, ...args }),\n })\n\nasync function updateGistStep({ token, gistId, description, files, filesToDelete }: { token: string, gistId: string, description?: string, files?: Record<string, { content: string }>, filesToDelete?: string[] }) {\n \"use step\"\n const octokit = createOctokit(token)\n const fileUpdates: Record<string, { content: string } | null> = {}\n if (files) Object.assign(fileUpdates, files)\n if (filesToDelete) {\n for (const name of filesToDelete) fileUpdates[name] = null\n }\n const { data } = await octokit.rest.gists.update({\n gist_id: gistId,\n description,\n files: fileUpdates as Record<string, { content: string }>,\n })\n return {\n id: data.id,\n description: data.description,\n url: data.html_url,\n files: Object.keys(data.files ?? {}),\n }\n}\n\nexport const updateGist = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Update an existing gist — edit description, update files, or remove files',\n needsApproval,\n inputSchema: z.object({\n gistId: z.string().describe('Gist ID'),\n description: z.string().optional().describe('New gist description'),\n files: z.record(z.string(), z.object({ content: z.string().describe('New file content') }))\n .optional().describe('Files to add or update, keyed by filename'),\n filesToDelete: z.array(z.string()).optional().describe('Filenames to remove from the gist'),\n }),\n execute: async args => updateGistStep({ token, ...args }),\n })\n\nasync function deleteGistStep({ token, gistId }: { token: string, gistId: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n await octokit.rest.gists.delete({ gist_id: gistId })\n return { deleted: true, gistId }\n}\n\nexport const deleteGist = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Delete a gist permanently',\n needsApproval,\n inputSchema: z.object({\n gistId: z.string().describe('Gist ID to delete'),\n }),\n execute: async args => deleteGistStep({ token, ...args }),\n })\n\nasync function createGistCommentStep({ token, gistId, body }: { token: string, gistId: string, body: string }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.gists.createComment({ gist_id: gistId, body })\n return {\n id: data.id,\n url: data.url,\n body: data.body,\n author: data.user?.login,\n createdAt: data.created_at,\n }\n}\n\nexport const createGistComment = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Add a comment to a gist',\n needsApproval,\n inputSchema: z.object({\n gistId: z.string().describe('Gist ID'),\n body: z.string().describe('Comment text (supports Markdown)'),\n }),\n execute: async args => createGistCommentStep({ token, ...args }),\n })\n","import { tool } from 'ai'\nimport { z } from 'zod'\nimport { createOctokit } from '../client'\nimport type { ToolOptions } from '../types'\n\nasync function listWorkflowsStep({ token, owner, repo, perPage, page }: { token: string, owner: string, repo: string, perPage: number, page: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.actions.listRepoWorkflows({ owner, repo, per_page: perPage, page })\n return {\n totalCount: data.total_count,\n workflows: data.workflows.map(wf => ({\n id: wf.id,\n name: wf.name,\n path: wf.path,\n state: wf.state,\n url: wf.html_url,\n createdAt: wf.created_at,\n updatedAt: wf.updated_at,\n })),\n }\n}\n\nexport const listWorkflows = (token: string) =>\n tool({\n description: 'List GitHub Actions workflows in a repository',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n page: z.number().optional().default(1).describe('Page number for pagination'),\n }),\n execute: async args => listWorkflowsStep({ token, ...args }),\n })\n\ntype WorkflowRunStatus = 'completed' | 'action_required' | 'cancelled' | 'failure' | 'neutral' | 'skipped' | 'stale' | 'success' | 'timed_out' | 'in_progress' | 'queued' | 'requested' | 'waiting' | 'pending'\n\nasync function listWorkflowRunsStep({ token, owner, repo, workflowId, branch, event, status, perPage, page }: { token: string, owner: string, repo: string, workflowId?: string | number, branch?: string, event?: string, status?: WorkflowRunStatus, perPage: number, page: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = workflowId\n ? await octokit.rest.actions.listWorkflowRuns({ owner, repo, workflow_id: workflowId, per_page: perPage, page, ...branch && { branch }, ...event && { event }, ...status && { status } })\n : await octokit.rest.actions.listWorkflowRunsForRepo({ owner, repo, per_page: perPage, page, ...branch && { branch }, ...event && { event }, ...status && { status } })\n\n return {\n totalCount: data.total_count,\n runs: data.workflow_runs.map(run => ({\n id: run.id,\n name: run.name,\n status: run.status,\n conclusion: run.conclusion,\n branch: run.head_branch,\n event: run.event,\n url: run.html_url,\n actor: run.actor?.login,\n createdAt: run.created_at,\n updatedAt: run.updated_at,\n runNumber: run.run_number,\n runAttempt: run.run_attempt,\n })),\n }\n}\n\nexport const listWorkflowRuns = (token: string) =>\n tool({\n description: 'List workflow runs for a repository, optionally filtered by workflow, branch, status, or event',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n workflowId: z.union([z.string(), z.number()]).optional().describe('Workflow ID or filename (e.g. \"ci.yml\") to filter by'),\n branch: z.string().optional().describe('Branch name to filter by'),\n event: z.string().optional().describe('Event type to filter by (e.g. \"push\", \"pull_request\")'),\n status: z.enum(['completed', 'action_required', 'cancelled', 'failure', 'neutral', 'skipped', 'stale', 'success', 'timed_out', 'in_progress', 'queued', 'requested', 'waiting', 'pending']).optional().describe('Status to filter by'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n page: z.number().optional().default(1).describe('Page number for pagination'),\n }),\n execute: async args => listWorkflowRunsStep({ token, ...args }),\n })\n\nasync function getWorkflowRunStep({ token, owner, repo, runId }: { token: string, owner: string, repo: string, runId: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.actions.getWorkflowRun({ owner, repo, run_id: runId })\n return {\n id: data.id,\n name: data.name,\n status: data.status,\n conclusion: data.conclusion,\n branch: data.head_branch,\n sha: data.head_sha,\n event: data.event,\n url: data.html_url,\n actor: data.actor?.login,\n runNumber: data.run_number,\n runAttempt: data.run_attempt,\n createdAt: data.created_at,\n updatedAt: data.updated_at,\n runStartedAt: data.run_started_at,\n }\n}\n\nexport const getWorkflowRun = (token: string) =>\n tool({\n description: 'Get details of a specific workflow run including status, timing, and trigger info',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n runId: z.number().describe('Workflow run ID'),\n }),\n execute: async args => getWorkflowRunStep({ token, ...args }),\n })\n\nasync function listWorkflowJobsStep({ token, owner, repo, runId, filter, perPage, page }: { token: string, owner: string, repo: string, runId: number, filter: 'latest' | 'all', perPage: number, page: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n const { data } = await octokit.rest.actions.listJobsForWorkflowRun({ owner, repo, run_id: runId, filter, per_page: perPage, page })\n return {\n totalCount: data.total_count,\n jobs: data.jobs.map(job => ({\n id: job.id,\n name: job.name,\n status: job.status,\n conclusion: job.conclusion,\n url: job.html_url,\n startedAt: job.started_at,\n completedAt: job.completed_at,\n runnerName: job.runner_name,\n steps: job.steps?.map(step => ({\n name: step.name,\n status: step.status,\n conclusion: step.conclusion,\n number: step.number,\n startedAt: step.started_at,\n completedAt: step.completed_at,\n })),\n })),\n }\n}\n\nexport const listWorkflowJobs = (token: string) =>\n tool({\n description: 'List jobs for a workflow run, including step-level status and timing',\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n runId: z.number().describe('Workflow run ID'),\n filter: z.enum(['latest', 'all']).optional().default('latest').describe('Filter by the latest attempt or all attempts'),\n perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n page: z.number().optional().default(1).describe('Page number for pagination'),\n }),\n execute: async args => listWorkflowJobsStep({ token, ...args }),\n })\n\nasync function triggerWorkflowStep({ token, owner, repo, workflowId, ref, inputs }: { token: string, owner: string, repo: string, workflowId: string | number, ref: string, inputs?: Record<string, string> }) {\n \"use step\"\n const octokit = createOctokit(token)\n await octokit.rest.actions.createWorkflowDispatch({\n owner,\n repo,\n workflow_id: workflowId,\n ref,\n inputs,\n })\n return { triggered: true, workflowId, ref }\n}\n\nexport const triggerWorkflow = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Trigger a workflow via workflow_dispatch event',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n workflowId: z.union([z.string(), z.number()]).describe('Workflow ID or filename (e.g. \"deploy.yml\")'),\n ref: z.string().describe('Git ref (branch or tag) to run the workflow on'),\n inputs: z.record(z.string(), z.string()).optional().describe('Input parameters defined in the workflow_dispatch trigger'),\n }),\n execute: async args => triggerWorkflowStep({ token, ...args }),\n })\n\nasync function cancelWorkflowRunStep({ token, owner, repo, runId }: { token: string, owner: string, repo: string, runId: number }) {\n \"use step\"\n const octokit = createOctokit(token)\n await octokit.rest.actions.cancelWorkflowRun({ owner, repo, run_id: runId })\n return { cancelled: true, runId }\n}\n\nexport const cancelWorkflowRun = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Cancel an in-progress workflow run',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n runId: z.number().describe('Workflow run ID to cancel'),\n }),\n execute: async args => cancelWorkflowRunStep({ token, ...args }),\n })\n\nasync function rerunWorkflowRunStep({ token, owner, repo, runId, onlyFailedJobs }: { token: string, owner: string, repo: string, runId: number, onlyFailedJobs: boolean }) {\n \"use step\"\n const octokit = createOctokit(token)\n if (onlyFailedJobs) {\n await octokit.rest.actions.reRunWorkflowFailedJobs({ owner, repo, run_id: runId })\n } else {\n await octokit.rest.actions.reRunWorkflow({ owner, repo, run_id: runId })\n }\n return { rerun: true, runId, onlyFailedJobs }\n}\n\nexport const rerunWorkflowRun = (token: string, { needsApproval = true }: ToolOptions = {}) =>\n tool({\n description: 'Re-run a workflow run, optionally only the failed jobs',\n needsApproval,\n inputSchema: z.object({\n owner: z.string().describe('Repository owner'),\n repo: z.string().describe('Repository name'),\n runId: z.number().describe('Workflow run ID to re-run'),\n onlyFailedJobs: z.boolean().optional().default(false).describe('Only re-run failed jobs instead of the entire workflow'),\n }),\n execute: async args => rerunWorkflowRunStep({ token, ...args }),\n })\n","import { ToolLoopAgent } from 'ai'\nimport type { ToolLoopAgentSettings } from 'ai'\nimport { createGithubTools } from './index'\nimport type { GithubToolPreset, ApprovalConfig } from './index'\n\nconst SHARED_RULES = `When a tool execution is denied by the user, do not retry it. Briefly acknowledge the decision and move on.`\n\nconst DEFAULT_INSTRUCTIONS = `You are a helpful GitHub assistant. You can read and explore repositories, issues, pull requests, commits, code, gists, and workflows. You can also create issues, pull requests, comments, gists, trigger workflows, and update files when asked.\n\n${SHARED_RULES}`\n\nconst PRESET_INSTRUCTIONS: Record<GithubToolPreset, string> = {\n 'code-review': `You are a code review assistant. Your job is to review pull requests thoroughly and provide constructive feedback.\n\nWhen reviewing a PR:\n- Read the PR description and changed files carefully\n- To trace why a specific line exists or who last touched it, use getBlame on the file path and ref (branch or merge commit), then follow up with getCommit if you need the full patch\n- Check for bugs, logic errors, and edge cases\n- Suggest improvements when you spot issues\n- Be constructive — explain why something is a problem and how to fix it\n- Use listPullRequestFiles to see exactly which files changed before diving into details\n- Use createPullRequestReview to submit a formal review with inline comments on specific lines\n- Post your review as PR comments when asked\n\n${SHARED_RULES}`,\n\n 'issue-triage': `You are an issue triage assistant. Your job is to help manage and organize GitHub issues.\n\nWhen triaging issues:\n- Read issue descriptions carefully to understand the problem\n- Identify duplicates when possible\n- Help categorize and prioritize issues\n- Respond to users with clear, helpful information\n- Use listLabels to see available labels, then addLabels and removeLabel to categorize issues\n- Create new issues when asked, with clear titles and descriptions\n\n${SHARED_RULES}`,\n\n 'ci-ops': `You are a CI/CD operations assistant. Your job is to help monitor and manage GitHub Actions workflows.\n\nWhen working with workflows:\n- Check workflow run status and report failures clearly\n- Inspect job steps to identify exactly where a run failed\n- Re-run failed workflows when asked\n- Trigger workflow dispatches with the correct inputs and branch\n- Be careful with cancel and re-run operations — confirm the target run\n- Summarize run history and trends when asked\n\n${SHARED_RULES}`,\n\n 'repo-explorer': `You are a repository explorer. Your job is to help users understand codebases and find information across GitHub repositories.\n\nWhen exploring repos:\n- Answer questions about code structure and organization\n- Use getBlame when the user asks about history or ownership of specific lines in a file\n- Summarize recent activity (commits, PRs, issues)\n- Find specific files, functions, or patterns in code\n- Explain how different parts of the codebase work together\n- You have read-only access — you cannot make changes\n\n${SHARED_RULES}`,\n\n 'maintainer': `You are a repository maintainer assistant. You have full access to manage repositories, issues, pull requests, gists, and workflows.\n\nWhen maintaining repos:\n- Be careful with write operations — review before acting\n- Create well-structured issues and PRs with clear descriptions\n- Use merge strategies appropriate for the repository\n- Keep commit messages clean and descriptive\n- When closing issues, provide a clear reason\n\n${SHARED_RULES}`\n}\n\nexport function resolveInstructions(options: {\n preset?: GithubToolPreset | GithubToolPreset[]\n instructions?: string\n additionalInstructions?: string\n}): string {\n const defaultPrompt = options.preset && !Array.isArray(options.preset)\n ? PRESET_INSTRUCTIONS[options.preset]\n : DEFAULT_INSTRUCTIONS\n\n if (options.instructions) return options.instructions\n if (options.additionalInstructions) return `${defaultPrompt}\\n\\n${options.additionalInstructions}`\n return defaultPrompt\n}\n\ntype AgentOptions = Omit<ToolLoopAgentSettings, 'model' | 'tools' | 'instructions'>\n\nexport type CreateGithubAgentOptions = AgentOptions & {\n model: ToolLoopAgentSettings['model']\n /**\n * GitHub personal access token.\n * Falls back to `process.env.GITHUB_TOKEN` when omitted.\n */\n token?: string\n preset?: GithubToolPreset | GithubToolPreset[]\n requireApproval?: ApprovalConfig\n instructions?: string\n additionalInstructions?: string\n}\n\n/**\n * Create a pre-configured GitHub agent powered by the AI SDK's `ToolLoopAgent`.\n *\n * Returns a `ToolLoopAgent` instance with `.generate()` and `.stream()` methods.\n *\n * @example\n * ```ts\n * import { createGithubAgent } from '@github-tools/sdk'\n *\n * const agent = createGithubAgent({\n * model: 'anthropic/claude-sonnet-4.6',\n * token: process.env.GITHUB_TOKEN!,\n * preset: 'code-review',\n * })\n *\n * const result = await agent.generate({ prompt: 'Review PR #42 on vercel/ai' })\n * ```\n */\nexport function createGithubAgent({\n token,\n preset,\n requireApproval,\n instructions,\n additionalInstructions,\n ...agentOptions\n}: CreateGithubAgentOptions) {\n const tools = createGithubTools({ token, requireApproval, preset })\n\n return new ToolLoopAgent({\n ...agentOptions,\n tools,\n instructions: resolveInstructions({ preset, instructions, additionalInstructions })\n })\n}\n"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
- import { A as listPullRequests, B as ToolOptions, C as closeIssue, D as addPullRequestComment, E as listIssues, F as forkRepository, I as getFileContent, L as getRepository, M as createBranch, N as createOrUpdateFile, O as createPullRequest, P as createRepository, R as listBranches, S as addIssueComment, T as getIssue, V as createOctokit, _ as getBlame, a as listWorkflowJobs, b as searchCode, c as rerunWorkflowRun, d as createGistComment, f as deleteGist, g as updateGist, h as listGists, i as getWorkflowRun, j as mergePullRequest, k as getPullRequest, l as triggerWorkflow, m as listGistComments, n as createGithubAgent, o as listWorkflowRuns, p as getGist, r as cancelWorkflowRun, s as listWorkflows, t as CreateGithubAgentOptions, u as createGist, v as getCommit, w as createIssue, x as searchRepositories, y as listCommits, z as Octokit } from "./agents-CnwdZ0Wk.mjs";
1
+ import { A as addPullRequestComment, B as createRepository, C as addLabels, D as listIssues, E as getIssue, F as listPullRequestReviews, G as createOctokit, H as getFileContent, I as listPullRequests, J as ToolOverrides, K as Octokit, L as mergePullRequest, M as createPullRequestReview, N as getPullRequest, O as listLabels, P as listPullRequestFiles, R as createBranch, S as addIssueComment, T as createIssue, U as getRepository, V as forkRepository, W as listBranches, _ as getBlame, a as listWorkflowJobs, b as searchCode, c as rerunWorkflowRun, d as createGistComment, f as deleteGist, g as updateGist, h as listGists, i as getWorkflowRun, j as createPullRequest, k as removeLabel, l as triggerWorkflow, m as listGistComments, n as createGithubAgent, o as listWorkflowRuns, p as getGist, q as ToolOptions, r as cancelWorkflowRun, s as listWorkflows, t as CreateGithubAgentOptions, u as createGist, v as getCommit, w as closeIssue, x as searchRepositories, y as listCommits, z as createOrUpdateFile } from "./agents-C6nqZiYp.mjs";
2
2
  import * as ai from "ai";
3
3
 
4
4
  //#region src/index.d.ts
5
- type GithubWriteToolName = 'createBranch' | 'forkRepository' | 'createRepository' | 'createOrUpdateFile' | 'createPullRequest' | 'mergePullRequest' | 'addPullRequestComment' | 'createIssue' | 'addIssueComment' | 'closeIssue' | 'createGist' | 'updateGist' | 'deleteGist' | 'createGistComment' | 'triggerWorkflow' | 'cancelWorkflowRun' | 'rerunWorkflowRun';
5
+ type GithubWriteToolName = 'createBranch' | 'forkRepository' | 'createRepository' | 'createOrUpdateFile' | 'createPullRequest' | 'mergePullRequest' | 'addPullRequestComment' | 'createPullRequestReview' | 'createIssue' | 'addIssueComment' | 'closeIssue' | 'addLabels' | 'removeLabel' | 'createGist' | 'updateGist' | 'deleteGist' | 'createGistComment' | 'triggerWorkflow' | 'cancelWorkflowRun' | 'rerunWorkflowRun';
6
6
  /**
7
7
  * Whether write operations require user approval.
8
8
  * - `true` — all write tools need approval (default)
@@ -37,6 +37,22 @@ type GithubToolsOptions = {
37
37
  */
38
38
  token?: string;
39
39
  requireApproval?: ApprovalConfig;
40
+ /**
41
+ * Per-tool overrides for customizing tool behavior (description, title, needsApproval, etc.)
42
+ * without changing the underlying implementation. `execute`, `inputSchema`, and `outputSchema`
43
+ * cannot be overridden.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * createGithubTools({
48
+ * overrides: {
49
+ * deleteGist: { needsApproval: false },
50
+ * listIssues: { description: 'List bugs for the current sprint' },
51
+ * }
52
+ * })
53
+ * ```
54
+ */
55
+ overrides?: Partial<Record<string, ToolOverrides>>;
40
56
  /**
41
57
  * Restrict the returned tools to a predefined preset.
42
58
  * Omit to get all tools.
@@ -85,7 +101,8 @@ type GithubToolsOptions = {
85
101
  declare function createGithubTools({
86
102
  token,
87
103
  requireApproval,
88
- preset
104
+ preset,
105
+ overrides
89
106
  }?: GithubToolsOptions): Partial<{
90
107
  getRepository: ai.Tool<{
91
108
  owner: string;
@@ -429,6 +446,54 @@ declare function createGithubTools({
429
446
  author: string | undefined;
430
447
  createdAt: string;
431
448
  }>;
449
+ listPullRequestFiles: ai.Tool<{
450
+ owner: string;
451
+ repo: string;
452
+ pullNumber: number;
453
+ perPage: number;
454
+ page: number;
455
+ }, {
456
+ filename: string;
457
+ status: "added" | "removed" | "modified" | "renamed" | "copied" | "changed" | "unchanged";
458
+ additions: number;
459
+ deletions: number;
460
+ changes: number;
461
+ patch: string | undefined;
462
+ }[]>;
463
+ listPullRequestReviews: ai.Tool<{
464
+ owner: string;
465
+ repo: string;
466
+ pullNumber: number;
467
+ perPage: number;
468
+ page: number;
469
+ }, {
470
+ id: number;
471
+ state: string;
472
+ body: string;
473
+ author: string | undefined;
474
+ url: string;
475
+ submittedAt: string | undefined;
476
+ }[]>;
477
+ createPullRequestReview: ai.Tool<{
478
+ owner: string;
479
+ repo: string;
480
+ pullNumber: number;
481
+ event: "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
482
+ body?: string | undefined;
483
+ comments?: {
484
+ path: string;
485
+ body: string;
486
+ line?: number | undefined;
487
+ side?: "LEFT" | "RIGHT" | undefined;
488
+ }[] | undefined;
489
+ }, {
490
+ id: number;
491
+ state: string;
492
+ body: string;
493
+ url: string;
494
+ author: string | undefined;
495
+ submittedAt: string | undefined;
496
+ }>;
432
497
  createIssue: ai.Tool<{
433
498
  owner: string;
434
499
  repo: string;
@@ -467,6 +532,36 @@ declare function createGithubTools({
467
532
  url: string;
468
533
  closedAt: string | null;
469
534
  }>;
535
+ listLabels: ai.Tool<{
536
+ owner: string;
537
+ repo: string;
538
+ perPage: number;
539
+ page: number;
540
+ }, {
541
+ name: string;
542
+ color: string;
543
+ description: string | null;
544
+ }[]>;
545
+ addLabels: ai.Tool<{
546
+ owner: string;
547
+ repo: string;
548
+ issueNumber: number;
549
+ labels: string[];
550
+ }, {
551
+ name: string;
552
+ color: string;
553
+ description: string | null;
554
+ }[]>;
555
+ removeLabel: ai.Tool<{
556
+ owner: string;
557
+ repo: string;
558
+ issueNumber: number;
559
+ label: string;
560
+ }, {
561
+ removed: boolean;
562
+ label: string;
563
+ issueNumber: number;
564
+ }>;
470
565
  listGists: ai.Tool<{
471
566
  perPage: number;
472
567
  page: number;
@@ -678,5 +773,5 @@ declare function createGithubTools({
678
773
  }>;
679
774
  type GithubTools = ReturnType<typeof createGithubTools>;
680
775
  //#endregion
681
- export { ApprovalConfig, type CreateGithubAgentOptions, GithubToolPreset, GithubTools, GithubToolsOptions, GithubWriteToolName, type Octokit, type ToolOptions, addIssueComment, addPullRequestComment, cancelWorkflowRun, closeIssue, createBranch, createGist, createGistComment, createGithubAgent, createGithubTools, createIssue, createOctokit, createOrUpdateFile, createPullRequest, createRepository, deleteGist, forkRepository, getBlame, getCommit, getFileContent, getGist, getIssue, getPullRequest, getRepository, getWorkflowRun, listBranches, listCommits, listGistComments, listGists, listIssues, listPullRequests, listWorkflowJobs, listWorkflowRuns, listWorkflows, mergePullRequest, rerunWorkflowRun, searchCode, searchRepositories, triggerWorkflow, updateGist };
776
+ export { ApprovalConfig, type CreateGithubAgentOptions, GithubToolPreset, GithubTools, GithubToolsOptions, GithubWriteToolName, type Octokit, type ToolOptions, type ToolOverrides, addIssueComment, addLabels, addPullRequestComment, cancelWorkflowRun, closeIssue, createBranch, createGist, createGistComment, createGithubAgent, createGithubTools, createIssue, createOctokit, createOrUpdateFile, createPullRequest, createPullRequestReview, createRepository, deleteGist, forkRepository, getBlame, getCommit, getFileContent, getGist, getIssue, getPullRequest, getRepository, getWorkflowRun, listBranches, listCommits, listGistComments, listGists, listIssues, listLabels, listPullRequestFiles, listPullRequestReviews, listPullRequests, listWorkflowJobs, listWorkflowRuns, listWorkflows, mergePullRequest, removeLabel, rerunWorkflowRun, searchCode, searchRepositories, triggerWorkflow, updateGist };
682
777
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;KAQY,mBAAA;;;;AAAZ;;;;;AAmCA;;;;;;;;KAAY,cAAA,aAA2B,OAAA,CAAQ,MAAA,CAAO,mBAAA;;;;;AAWtD;;;;;KAAY,gBAAA;AAAA,KAsCA,kBAAA;;;;;EAKV,KAAA;EACA,eAAA,GAAkB,cAAA;EADlB;;;;;;;;AA+DF;;;;;EAhDE,MAAA,GAAS,gBAAA,GAAmB,gBAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgDd,iBAAA,CAAA;EAAoB,KAAA;EAAO,eAAA;EAAwB;AAAA,IAAU,kBAAA,GAAuB,OAAA;iBAAA,EAAA,CAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsDxF,WAAA,GAAc,UAAA,QAAkB,iBAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;;KASY,mBAAA;;;AAAZ;;;;;AAsCA;;;;;;;;;KAAY,cAAA,aAA2B,OAAA,CAAQ,MAAA,CAAO,mBAAA;;;;AAWtD;;;;;AAyCA;KAzCY,gBAAA;AAAA,KAyCA,kBAAA;EAMQ;;;;EADlB,KAAA;EACA,eAAA,GAAkB,cAAA;EA8B0B;;;;;;;;;;;;;;AAgD9C;EA9DE,SAAA,GAAY,OAAA,CAAQ,MAAA,SAAe,aAAA;;;;;;;;;;;;;;EAcnC,MAAA,GAAS,gBAAA,GAAmB,gBAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgDd,iBAAA,CAAA;EAAoB,KAAA;EAAO,eAAA;EAAwB,MAAA;EAAQ;AAAA,IAAa,kBAAA,GAAuB,OAAA;iBAAA,EAAA,CAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAqEnG,WAAA,GAAc,UAAA,QAAkB,iBAAA"}
package/dist/index.mjs CHANGED
@@ -1,10 +1,12 @@
1
- import { A as listPullRequests, C as closeIssue, D as addPullRequestComment, E as listIssues, F as forkRepository, I as getFileContent, L as getRepository, M as createBranch, N as createOrUpdateFile, O as createPullRequest, P as createRepository, R as listBranches, S as addIssueComment, T as getIssue, _ as getBlame, a as listWorkflowJobs, b as searchCode, c as rerunWorkflowRun, d as createGistComment, f as deleteGist, g as updateGist, h as listGists, i as getWorkflowRun, j as mergePullRequest, k as getPullRequest, l as triggerWorkflow, m as listGistComments, o as listWorkflowRuns, p as getGist, r as cancelWorkflowRun, s as listWorkflows, t as createGithubAgent, u as createGist, v as getCommit, w as createIssue, x as searchRepositories, y as listCommits, z as createOctokit } from "./agents-Cdb0a8CP.mjs";
1
+ import { A as addPullRequestComment, B as createRepository, C as addLabels, D as listIssues, E as getIssue, F as listPullRequestReviews, G as createOctokit, H as getFileContent, I as listPullRequests, L as mergePullRequest, M as createPullRequestReview, N as getPullRequest, O as listLabels, P as listPullRequestFiles, R as createBranch, S as addIssueComment, T as createIssue, U as getRepository, V as forkRepository, W as listBranches, _ as getBlame, a as listWorkflowJobs, b as searchCode, c as rerunWorkflowRun, d as createGistComment, f as deleteGist, g as updateGist, h as listGists, i as getWorkflowRun, j as createPullRequest, k as removeLabel, l as triggerWorkflow, m as listGistComments, o as listWorkflowRuns, p as getGist, r as cancelWorkflowRun, s as listWorkflows, t as createGithubAgent, u as createGist, v as getCommit, w as closeIssue, x as searchRepositories, y as listCommits, z as createOrUpdateFile } from "./agents-D9aKsd_7.mjs";
2
2
 
3
3
  //#region src/index.ts
4
4
  const PRESET_TOOLS = {
5
5
  "code-review": [
6
6
  "getPullRequest",
7
7
  "listPullRequests",
8
+ "listPullRequestFiles",
9
+ "listPullRequestReviews",
8
10
  "getFileContent",
9
11
  "listCommits",
10
12
  "getCommit",
@@ -12,7 +14,8 @@ const PRESET_TOOLS = {
12
14
  "getRepository",
13
15
  "listBranches",
14
16
  "searchCode",
15
- "addPullRequestComment"
17
+ "addPullRequestComment",
18
+ "createPullRequestReview"
16
19
  ],
17
20
  "issue-triage": [
18
21
  "listIssues",
@@ -20,6 +23,9 @@ const PRESET_TOOLS = {
20
23
  "createIssue",
21
24
  "addIssueComment",
22
25
  "closeIssue",
26
+ "listLabels",
27
+ "addLabels",
28
+ "removeLabel",
23
29
  "getRepository",
24
30
  "searchRepositories",
25
31
  "searchCode"
@@ -43,8 +49,11 @@ const PRESET_TOOLS = {
43
49
  "getFileContent",
44
50
  "listPullRequests",
45
51
  "getPullRequest",
52
+ "listPullRequestFiles",
53
+ "listPullRequestReviews",
46
54
  "listIssues",
47
55
  "getIssue",
56
+ "listLabels",
48
57
  "listCommits",
49
58
  "getCommit",
50
59
  "getBlame",
@@ -68,14 +77,20 @@ const PRESET_TOOLS = {
68
77
  "createOrUpdateFile",
69
78
  "listPullRequests",
70
79
  "getPullRequest",
80
+ "listPullRequestFiles",
81
+ "listPullRequestReviews",
71
82
  "createPullRequest",
72
83
  "mergePullRequest",
73
84
  "addPullRequestComment",
85
+ "createPullRequestReview",
74
86
  "listIssues",
75
87
  "getIssue",
76
88
  "createIssue",
77
89
  "addIssueComment",
78
90
  "closeIssue",
91
+ "listLabels",
92
+ "addLabels",
93
+ "removeLabel",
79
94
  "listCommits",
80
95
  "getCommit",
81
96
  "getBlame",
@@ -138,7 +153,7 @@ function resolvePresetTools(preset) {
138
153
  * })
139
154
  * ```
140
155
  */
141
- function createGithubTools({ token, requireApproval = true, preset } = {}) {
156
+ function createGithubTools({ token, requireApproval = true, preset, overrides } = {}) {
142
157
  const resolvedToken = token || process.env.GITHUB_TOKEN;
143
158
  if (!resolvedToken) throw new Error("GitHub token is required. Pass it as `token` or set the GITHUB_TOKEN environment variable.");
144
159
  const approval = (name) => ({ needsApproval: resolveApproval(name, requireApproval) });
@@ -163,9 +178,15 @@ function createGithubTools({ token, requireApproval = true, preset } = {}) {
163
178
  createPullRequest: createPullRequest(resolvedToken, approval("createPullRequest")),
164
179
  mergePullRequest: mergePullRequest(resolvedToken, approval("mergePullRequest")),
165
180
  addPullRequestComment: addPullRequestComment(resolvedToken, approval("addPullRequestComment")),
181
+ listPullRequestFiles: listPullRequestFiles(resolvedToken),
182
+ listPullRequestReviews: listPullRequestReviews(resolvedToken),
183
+ createPullRequestReview: createPullRequestReview(resolvedToken, approval("createPullRequestReview")),
166
184
  createIssue: createIssue(resolvedToken, approval("createIssue")),
167
185
  addIssueComment: addIssueComment(resolvedToken, approval("addIssueComment")),
168
186
  closeIssue: closeIssue(resolvedToken, approval("closeIssue")),
187
+ listLabels: listLabels(resolvedToken),
188
+ addLabels: addLabels(resolvedToken, approval("addLabels")),
189
+ removeLabel: removeLabel(resolvedToken, approval("removeLabel")),
169
190
  listGists: listGists(resolvedToken),
170
191
  getGist: getGist(resolvedToken),
171
192
  listGistComments: listGistComments(resolvedToken),
@@ -181,10 +202,19 @@ function createGithubTools({ token, requireApproval = true, preset } = {}) {
181
202
  cancelWorkflowRun: cancelWorkflowRun(resolvedToken, approval("cancelWorkflowRun")),
182
203
  rerunWorkflowRun: rerunWorkflowRun(resolvedToken, approval("rerunWorkflowRun"))
183
204
  };
205
+ if (overrides) {
206
+ for (const [name, toolOverrides] of Object.entries(overrides)) if (name in allTools && toolOverrides) {
207
+ const key = name;
208
+ Object.assign(allTools, { [key]: {
209
+ ...allTools[key],
210
+ ...toolOverrides
211
+ } });
212
+ }
213
+ }
184
214
  if (!allowed) return allTools;
185
215
  return Object.fromEntries(Object.entries(allTools).filter(([name]) => allowed.has(name)));
186
216
  }
187
217
 
188
218
  //#endregion
189
- export { addIssueComment, addPullRequestComment, cancelWorkflowRun, closeIssue, createBranch, createGist, createGistComment, createGithubAgent, createGithubTools, createIssue, createOctokit, createOrUpdateFile, createPullRequest, createRepository, deleteGist, forkRepository, getBlame, getCommit, getFileContent, getGist, getIssue, getPullRequest, getRepository, getWorkflowRun, listBranches, listCommits, listGistComments, listGists, listIssues, listPullRequests, listWorkflowJobs, listWorkflowRuns, listWorkflows, mergePullRequest, rerunWorkflowRun, searchCode, searchRepositories, triggerWorkflow, updateGist };
219
+ export { addIssueComment, addLabels, addPullRequestComment, cancelWorkflowRun, closeIssue, createBranch, createGist, createGistComment, createGithubAgent, createGithubTools, createIssue, createOctokit, createOrUpdateFile, createPullRequest, createPullRequestReview, createRepository, deleteGist, forkRepository, getBlame, getCommit, getFileContent, getGist, getIssue, getPullRequest, getRepository, getWorkflowRun, listBranches, listCommits, listGistComments, listGists, listIssues, listLabels, listPullRequestFiles, listPullRequestReviews, listPullRequests, listWorkflowJobs, listWorkflowRuns, listWorkflows, mergePullRequest, removeLabel, rerunWorkflowRun, searchCode, searchRepositories, triggerWorkflow, updateGist };
190
220
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { getRepository, listBranches, getFileContent, createBranch, forkRepository, createRepository, createOrUpdateFile } from './tools/repository'\nimport { listPullRequests, getPullRequest, createPullRequest, mergePullRequest, addPullRequestComment } from './tools/pull-requests'\nimport { listIssues, getIssue, createIssue, addIssueComment, closeIssue } from './tools/issues'\nimport { searchCode, searchRepositories } from './tools/search'\nimport { listCommits, getCommit, getBlame } from './tools/commits'\nimport { listGists, getGist, listGistComments, createGist, updateGist, deleteGist, createGistComment } from './tools/gists'\nimport { listWorkflows, listWorkflowRuns, getWorkflowRun, listWorkflowJobs, triggerWorkflow, cancelWorkflowRun, rerunWorkflowRun } from './tools/workflows'\n\nexport type GithubWriteToolName =\n | 'createBranch'\n | 'forkRepository'\n | 'createRepository'\n | 'createOrUpdateFile'\n | 'createPullRequest'\n | 'mergePullRequest'\n | 'addPullRequestComment'\n | 'createIssue'\n | 'addIssueComment'\n | 'closeIssue'\n | 'createGist'\n | 'updateGist'\n | 'deleteGist'\n | 'createGistComment'\n | 'triggerWorkflow'\n | 'cancelWorkflowRun'\n | 'rerunWorkflowRun'\n\n/**\n * Whether write operations require user approval.\n * - `true` — all write tools need approval (default)\n * - `false` — no approval needed for any write tool\n * - object — per-tool override; unspecified write tools default to `true`\n *\n * @example\n * ```ts\n * requireApproval: {\n * mergePullRequest: true,\n * createOrUpdateFile: true,\n * addPullRequestComment: false,\n * addIssueComment: false,\n * }\n * ```\n */\nexport type ApprovalConfig = boolean | Partial<Record<GithubWriteToolName, boolean>>\n\n/**\n * Predefined tool presets for common use cases.\n *\n * - `'code-review'` — Review PRs: read PRs, file content, commits, and post comments\n * - `'issue-triage'` — Triage issues: read/create/close issues, search, and comment\n * - `'repo-explorer'` — Explore repos: read-only access to repos, branches, code, and search\n * - `'ci-ops'` — CI operations: monitor and manage GitHub Actions workflows\n * - `'maintainer'` — Full maintenance: all read + create PRs, merge, manage issues\n */\nexport type GithubToolPreset = 'code-review' | 'issue-triage' | 'repo-explorer' | 'ci-ops' | 'maintainer'\n\nconst PRESET_TOOLS: Record<GithubToolPreset, string[]> = {\n 'code-review': [\n 'getPullRequest', 'listPullRequests', 'getFileContent', 'listCommits', 'getCommit', 'getBlame',\n 'getRepository', 'listBranches', 'searchCode',\n 'addPullRequestComment'\n ],\n 'issue-triage': [\n 'listIssues', 'getIssue', 'createIssue', 'addIssueComment', 'closeIssue',\n 'getRepository', 'searchRepositories', 'searchCode'\n ],\n 'ci-ops': [\n 'getRepository', 'listBranches',\n 'listCommits', 'getCommit',\n 'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs',\n 'triggerWorkflow', 'cancelWorkflowRun', 'rerunWorkflowRun'\n ],\n 'repo-explorer': [\n 'getRepository', 'listBranches', 'getFileContent',\n 'listPullRequests', 'getPullRequest',\n 'listIssues', 'getIssue',\n 'listCommits', 'getCommit', 'getBlame',\n 'searchCode', 'searchRepositories',\n 'listGists', 'getGist', 'listGistComments',\n 'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs'\n ],\n 'maintainer': [\n 'getRepository', 'listBranches', 'getFileContent', 'createBranch', 'forkRepository', 'createRepository', 'createOrUpdateFile',\n 'listPullRequests', 'getPullRequest', 'createPullRequest', 'mergePullRequest', 'addPullRequestComment',\n 'listIssues', 'getIssue', 'createIssue', 'addIssueComment', 'closeIssue',\n 'listCommits', 'getCommit', 'getBlame',\n 'searchCode', 'searchRepositories',\n 'listGists', 'getGist', 'listGistComments', 'createGist', 'updateGist', 'deleteGist', 'createGistComment',\n 'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs', 'triggerWorkflow', 'cancelWorkflowRun', 'rerunWorkflowRun'\n ]\n}\n\nexport type GithubToolsOptions = {\n /**\n * GitHub personal access token.\n * Falls back to `process.env.GITHUB_TOKEN` when omitted.\n */\n token?: string\n requireApproval?: ApprovalConfig\n /**\n * Restrict the returned tools to a predefined preset.\n * Omit to get all tools.\n *\n * @example\n * ```ts\n * // Only code-review tools\n * createGithubTools({ token, preset: 'code-review' })\n *\n * // Combine presets\n * createGithubTools({ token, preset: ['code-review', 'issue-triage'] })\n * ```\n */\n preset?: GithubToolPreset | GithubToolPreset[]\n}\n\nfunction resolveApproval(toolName: GithubWriteToolName, config: ApprovalConfig): boolean {\n if (typeof config === 'boolean') return config\n return config[toolName] ?? true\n}\n\nfunction resolvePresetTools(preset: GithubToolPreset | GithubToolPreset[]): Set<string> | null {\n if (!preset) return null\n const presets = Array.isArray(preset) ? preset : [preset]\n const tools = new Set<string>()\n for (const p of presets) {\n for (const t of PRESET_TOOLS[p]) tools.add(t)\n }\n return tools\n}\n\n/**\n * Create a set of GitHub tools for the Vercel AI SDK.\n *\n * Write operations require user approval by default.\n * Control this globally or per-tool via `requireApproval`.\n * Use `preset` to get only the tools you need.\n *\n * @example\n * ```ts\n * // All tools (default)\n * createGithubTools({ token })\n *\n * // Code-review agent — only PR & commit tools\n * createGithubTools({ token, preset: 'code-review' })\n *\n * // Combine presets\n * createGithubTools({ token, preset: ['code-review', 'issue-triage'] })\n *\n * // Granular approval\n * createGithubTools({\n * token,\n * preset: 'maintainer',\n * requireApproval: {\n * mergePullRequest: true,\n * createOrUpdateFile: true,\n * addPullRequestComment: false,\n * }\n * })\n * ```\n */\nexport function createGithubTools({ token, requireApproval = true, preset }: GithubToolsOptions = {}) {\n const resolvedToken = token || process.env.GITHUB_TOKEN\n if (!resolvedToken) {\n throw new Error('GitHub token is required. Pass it as `token` or set the GITHUB_TOKEN environment variable.')\n }\n const approval = (name: GithubWriteToolName) => ({ needsApproval: resolveApproval(name, requireApproval) })\n const allowed = preset ? resolvePresetTools(preset) : null\n\n const allTools = {\n getRepository: getRepository(resolvedToken),\n listBranches: listBranches(resolvedToken),\n getFileContent: getFileContent(resolvedToken),\n listPullRequests: listPullRequests(resolvedToken),\n getPullRequest: getPullRequest(resolvedToken),\n listIssues: listIssues(resolvedToken),\n getIssue: getIssue(resolvedToken),\n searchCode: searchCode(resolvedToken),\n searchRepositories: searchRepositories(resolvedToken),\n listCommits: listCommits(resolvedToken),\n getCommit: getCommit(resolvedToken),\n getBlame: getBlame(resolvedToken),\n createBranch: createBranch(resolvedToken, approval('createBranch')),\n forkRepository: forkRepository(resolvedToken, approval('forkRepository')),\n createRepository: createRepository(resolvedToken, approval('createRepository')),\n createOrUpdateFile: createOrUpdateFile(resolvedToken, approval('createOrUpdateFile')),\n createPullRequest: createPullRequest(resolvedToken, approval('createPullRequest')),\n mergePullRequest: mergePullRequest(resolvedToken, approval('mergePullRequest')),\n addPullRequestComment: addPullRequestComment(resolvedToken, approval('addPullRequestComment')),\n createIssue: createIssue(resolvedToken, approval('createIssue')),\n addIssueComment: addIssueComment(resolvedToken, approval('addIssueComment')),\n closeIssue: closeIssue(resolvedToken, approval('closeIssue')),\n listGists: listGists(resolvedToken),\n getGist: getGist(resolvedToken),\n listGistComments: listGistComments(resolvedToken),\n createGist: createGist(resolvedToken, approval('createGist')),\n updateGist: updateGist(resolvedToken, approval('updateGist')),\n deleteGist: deleteGist(resolvedToken, approval('deleteGist')),\n createGistComment: createGistComment(resolvedToken, approval('createGistComment')),\n listWorkflows: listWorkflows(resolvedToken),\n listWorkflowRuns: listWorkflowRuns(resolvedToken),\n getWorkflowRun: getWorkflowRun(resolvedToken),\n listWorkflowJobs: listWorkflowJobs(resolvedToken),\n triggerWorkflow: triggerWorkflow(resolvedToken, approval('triggerWorkflow')),\n cancelWorkflowRun: cancelWorkflowRun(resolvedToken, approval('cancelWorkflowRun')),\n rerunWorkflowRun: rerunWorkflowRun(resolvedToken, approval('rerunWorkflowRun')),\n }\n\n if (!allowed) return allTools\n\n return Object.fromEntries(\n Object.entries(allTools).filter(([name]) => allowed.has(name))\n ) as Partial<typeof allTools>\n}\n\nexport type GithubTools = ReturnType<typeof createGithubTools>\n\n// Re-export individual tool factories for cherry-picking\nexport { createOctokit } from './client'\nexport { getRepository, listBranches, getFileContent, createBranch, forkRepository, createRepository, createOrUpdateFile } from './tools/repository'\nexport { listPullRequests, getPullRequest, createPullRequest, mergePullRequest, addPullRequestComment } from './tools/pull-requests'\nexport { listIssues, getIssue, createIssue, addIssueComment, closeIssue } from './tools/issues'\nexport { searchCode, searchRepositories } from './tools/search'\nexport { listCommits, getCommit, getBlame } from './tools/commits'\nexport { listGists, getGist, listGistComments, createGist, updateGist, deleteGist, createGistComment } from './tools/gists'\nexport { listWorkflows, listWorkflowRuns, getWorkflowRun, listWorkflowJobs, triggerWorkflow, cancelWorkflowRun, rerunWorkflowRun } from './tools/workflows'\nexport type { Octokit, ToolOptions } from './types'\nexport { createGithubAgent } from './agents'\nexport type { CreateGithubAgentOptions } from './agents'\n"],"mappings":";;;AAwDA,MAAM,eAAmD;CACvD,eAAe;EACb;EAAkB;EAAoB;EAAkB;EAAe;EAAa;EACpF;EAAiB;EAAgB;EACjC;EACD;CACD,gBAAgB;EACd;EAAc;EAAY;EAAe;EAAmB;EAC5D;EAAiB;EAAsB;EACxC;CACD,UAAU;EACR;EAAiB;EACjB;EAAe;EACf;EAAiB;EAAoB;EAAkB;EACvD;EAAmB;EAAqB;EACzC;CACD,iBAAiB;EACf;EAAiB;EAAgB;EACjC;EAAoB;EACpB;EAAc;EACd;EAAe;EAAa;EAC5B;EAAc;EACd;EAAa;EAAW;EACxB;EAAiB;EAAoB;EAAkB;EACxD;CACD,cAAc;EACZ;EAAiB;EAAgB;EAAkB;EAAgB;EAAkB;EAAoB;EACzG;EAAoB;EAAkB;EAAqB;EAAoB;EAC/E;EAAc;EAAY;EAAe;EAAmB;EAC5D;EAAe;EAAa;EAC5B;EAAc;EACd;EAAa;EAAW;EAAoB;EAAc;EAAc;EAAc;EACtF;EAAiB;EAAoB;EAAkB;EAAoB;EAAmB;EAAqB;EACpH;CACF;AAyBD,SAAS,gBAAgB,UAA+B,QAAiC;AACvF,KAAI,OAAO,WAAW,UAAW,QAAO;AACxC,QAAO,OAAO,aAAa;;AAG7B,SAAS,mBAAmB,QAAmE;AAC7F,KAAI,CAAC,OAAQ,QAAO;CACpB,MAAM,UAAU,MAAM,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO;CACzD,MAAM,wBAAQ,IAAI,KAAa;AAC/B,MAAK,MAAM,KAAK,QACd,MAAK,MAAM,KAAK,aAAa,GAAI,OAAM,IAAI,EAAE;AAE/C,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCT,SAAgB,kBAAkB,EAAE,OAAO,kBAAkB,MAAM,WAA+B,EAAE,EAAE;CACpG,MAAM,gBAAgB,SAAS,QAAQ,IAAI;AAC3C,KAAI,CAAC,cACH,OAAM,IAAI,MAAM,6FAA6F;CAE/G,MAAM,YAAY,UAA+B,EAAE,eAAe,gBAAgB,MAAM,gBAAgB,EAAE;CAC1G,MAAM,UAAU,SAAS,mBAAmB,OAAO,GAAG;CAEtD,MAAM,WAAW;EACf,eAAe,cAAc,cAAc;EAC3C,cAAc,aAAa,cAAc;EACzC,gBAAgB,eAAe,cAAc;EAC7C,kBAAkB,iBAAiB,cAAc;EACjD,gBAAgB,eAAe,cAAc;EAC7C,YAAY,WAAW,cAAc;EACrC,UAAU,SAAS,cAAc;EACjC,YAAY,WAAW,cAAc;EACrC,oBAAoB,mBAAmB,cAAc;EACrD,aAAa,YAAY,cAAc;EACvC,WAAW,UAAU,cAAc;EACnC,UAAU,SAAS,cAAc;EACjC,cAAc,aAAa,eAAe,SAAS,eAAe,CAAC;EACnE,gBAAgB,eAAe,eAAe,SAAS,iBAAiB,CAAC;EACzE,kBAAkB,iBAAiB,eAAe,SAAS,mBAAmB,CAAC;EAC/E,oBAAoB,mBAAmB,eAAe,SAAS,qBAAqB,CAAC;EACrF,mBAAmB,kBAAkB,eAAe,SAAS,oBAAoB,CAAC;EAClF,kBAAkB,iBAAiB,eAAe,SAAS,mBAAmB,CAAC;EAC/E,uBAAuB,sBAAsB,eAAe,SAAS,wBAAwB,CAAC;EAC9F,aAAa,YAAY,eAAe,SAAS,cAAc,CAAC;EAChE,iBAAiB,gBAAgB,eAAe,SAAS,kBAAkB,CAAC;EAC5E,YAAY,WAAW,eAAe,SAAS,aAAa,CAAC;EAC7D,WAAW,UAAU,cAAc;EACnC,SAAS,QAAQ,cAAc;EAC/B,kBAAkB,iBAAiB,cAAc;EACjD,YAAY,WAAW,eAAe,SAAS,aAAa,CAAC;EAC7D,YAAY,WAAW,eAAe,SAAS,aAAa,CAAC;EAC7D,YAAY,WAAW,eAAe,SAAS,aAAa,CAAC;EAC7D,mBAAmB,kBAAkB,eAAe,SAAS,oBAAoB,CAAC;EAClF,eAAe,cAAc,cAAc;EAC3C,kBAAkB,iBAAiB,cAAc;EACjD,gBAAgB,eAAe,cAAc;EAC7C,kBAAkB,iBAAiB,cAAc;EACjD,iBAAiB,gBAAgB,eAAe,SAAS,kBAAkB,CAAC;EAC5E,mBAAmB,kBAAkB,eAAe,SAAS,oBAAoB,CAAC;EAClF,kBAAkB,iBAAiB,eAAe,SAAS,mBAAmB,CAAC;EAChF;AAED,KAAI,CAAC,QAAS,QAAO;AAErB,QAAO,OAAO,YACZ,OAAO,QAAQ,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAQ,IAAI,KAAK,CAAC,CAC/D"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { getRepository, listBranches, getFileContent, createBranch, forkRepository, createRepository, createOrUpdateFile } from './tools/repository'\nimport { listPullRequests, getPullRequest, createPullRequest, mergePullRequest, addPullRequestComment, listPullRequestFiles, listPullRequestReviews, createPullRequestReview } from './tools/pull-requests'\nimport { listIssues, getIssue, createIssue, addIssueComment, closeIssue, listLabels, addLabels, removeLabel } from './tools/issues'\nimport { searchCode, searchRepositories } from './tools/search'\nimport { listCommits, getCommit, getBlame } from './tools/commits'\nimport { listGists, getGist, listGistComments, createGist, updateGist, deleteGist, createGistComment } from './tools/gists'\nimport { listWorkflows, listWorkflowRuns, getWorkflowRun, listWorkflowJobs, triggerWorkflow, cancelWorkflowRun, rerunWorkflowRun } from './tools/workflows'\nimport type { ToolOverrides } from './types'\n\nexport type GithubWriteToolName =\n | 'createBranch'\n | 'forkRepository'\n | 'createRepository'\n | 'createOrUpdateFile'\n | 'createPullRequest'\n | 'mergePullRequest'\n | 'addPullRequestComment'\n | 'createPullRequestReview'\n | 'createIssue'\n | 'addIssueComment'\n | 'closeIssue'\n | 'addLabels'\n | 'removeLabel'\n | 'createGist'\n | 'updateGist'\n | 'deleteGist'\n | 'createGistComment'\n | 'triggerWorkflow'\n | 'cancelWorkflowRun'\n | 'rerunWorkflowRun'\n\n/**\n * Whether write operations require user approval.\n * - `true` — all write tools need approval (default)\n * - `false` — no approval needed for any write tool\n * - object — per-tool override; unspecified write tools default to `true`\n *\n * @example\n * ```ts\n * requireApproval: {\n * mergePullRequest: true,\n * createOrUpdateFile: true,\n * addPullRequestComment: false,\n * addIssueComment: false,\n * }\n * ```\n */\nexport type ApprovalConfig = boolean | Partial<Record<GithubWriteToolName, boolean>>\n\n/**\n * Predefined tool presets for common use cases.\n *\n * - `'code-review'` — Review PRs: read PRs, file content, commits, and post comments\n * - `'issue-triage'` — Triage issues: read/create/close issues, search, and comment\n * - `'repo-explorer'` — Explore repos: read-only access to repos, branches, code, and search\n * - `'ci-ops'` — CI operations: monitor and manage GitHub Actions workflows\n * - `'maintainer'` — Full maintenance: all read + create PRs, merge, manage issues\n */\nexport type GithubToolPreset = 'code-review' | 'issue-triage' | 'repo-explorer' | 'ci-ops' | 'maintainer'\n\nconst PRESET_TOOLS: Record<GithubToolPreset, string[]> = {\n 'code-review': [\n 'getPullRequest', 'listPullRequests', 'listPullRequestFiles', 'listPullRequestReviews', 'getFileContent', 'listCommits', 'getCommit', 'getBlame',\n 'getRepository', 'listBranches', 'searchCode',\n 'addPullRequestComment', 'createPullRequestReview'\n ],\n 'issue-triage': [\n 'listIssues', 'getIssue', 'createIssue', 'addIssueComment', 'closeIssue',\n 'listLabels', 'addLabels', 'removeLabel',\n 'getRepository', 'searchRepositories', 'searchCode'\n ],\n 'ci-ops': [\n 'getRepository', 'listBranches',\n 'listCommits', 'getCommit',\n 'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs',\n 'triggerWorkflow', 'cancelWorkflowRun', 'rerunWorkflowRun'\n ],\n 'repo-explorer': [\n 'getRepository', 'listBranches', 'getFileContent',\n 'listPullRequests', 'getPullRequest', 'listPullRequestFiles', 'listPullRequestReviews',\n 'listIssues', 'getIssue',\n 'listLabels',\n 'listCommits', 'getCommit', 'getBlame',\n 'searchCode', 'searchRepositories',\n 'listGists', 'getGist', 'listGistComments',\n 'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs'\n ],\n 'maintainer': [\n 'getRepository', 'listBranches', 'getFileContent', 'createBranch', 'forkRepository', 'createRepository', 'createOrUpdateFile',\n 'listPullRequests', 'getPullRequest', 'listPullRequestFiles', 'listPullRequestReviews', 'createPullRequest', 'mergePullRequest', 'addPullRequestComment', 'createPullRequestReview',\n 'listIssues', 'getIssue', 'createIssue', 'addIssueComment', 'closeIssue',\n 'listLabels', 'addLabels', 'removeLabel',\n 'listCommits', 'getCommit', 'getBlame',\n 'searchCode', 'searchRepositories',\n 'listGists', 'getGist', 'listGistComments', 'createGist', 'updateGist', 'deleteGist', 'createGistComment',\n 'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs', 'triggerWorkflow', 'cancelWorkflowRun', 'rerunWorkflowRun'\n ]\n}\n\nexport type GithubToolsOptions = {\n /**\n * GitHub personal access token.\n * Falls back to `process.env.GITHUB_TOKEN` when omitted.\n */\n token?: string\n requireApproval?: ApprovalConfig\n /**\n * Per-tool overrides for customizing tool behavior (description, title, needsApproval, etc.)\n * without changing the underlying implementation. `execute`, `inputSchema`, and `outputSchema`\n * cannot be overridden.\n *\n * @example\n * ```ts\n * createGithubTools({\n * overrides: {\n * deleteGist: { needsApproval: false },\n * listIssues: { description: 'List bugs for the current sprint' },\n * }\n * })\n * ```\n */\n overrides?: Partial<Record<string, ToolOverrides>>\n /**\n * Restrict the returned tools to a predefined preset.\n * Omit to get all tools.\n *\n * @example\n * ```ts\n * // Only code-review tools\n * createGithubTools({ token, preset: 'code-review' })\n *\n * // Combine presets\n * createGithubTools({ token, preset: ['code-review', 'issue-triage'] })\n * ```\n */\n preset?: GithubToolPreset | GithubToolPreset[]\n}\n\nfunction resolveApproval(toolName: GithubWriteToolName, config: ApprovalConfig): boolean {\n if (typeof config === 'boolean') return config\n return config[toolName] ?? true\n}\n\nfunction resolvePresetTools(preset: GithubToolPreset | GithubToolPreset[]): Set<string> | null {\n if (!preset) return null\n const presets = Array.isArray(preset) ? preset : [preset]\n const tools = new Set<string>()\n for (const p of presets) {\n for (const t of PRESET_TOOLS[p]) tools.add(t)\n }\n return tools\n}\n\n/**\n * Create a set of GitHub tools for the Vercel AI SDK.\n *\n * Write operations require user approval by default.\n * Control this globally or per-tool via `requireApproval`.\n * Use `preset` to get only the tools you need.\n *\n * @example\n * ```ts\n * // All tools (default)\n * createGithubTools({ token })\n *\n * // Code-review agent — only PR & commit tools\n * createGithubTools({ token, preset: 'code-review' })\n *\n * // Combine presets\n * createGithubTools({ token, preset: ['code-review', 'issue-triage'] })\n *\n * // Granular approval\n * createGithubTools({\n * token,\n * preset: 'maintainer',\n * requireApproval: {\n * mergePullRequest: true,\n * createOrUpdateFile: true,\n * addPullRequestComment: false,\n * }\n * })\n * ```\n */\nexport function createGithubTools({ token, requireApproval = true, preset, overrides }: GithubToolsOptions = {}) {\n const resolvedToken = token || process.env.GITHUB_TOKEN\n if (!resolvedToken) {\n throw new Error('GitHub token is required. Pass it as `token` or set the GITHUB_TOKEN environment variable.')\n }\n const approval = (name: GithubWriteToolName) => ({ needsApproval: resolveApproval(name, requireApproval) })\n const allowed = preset ? resolvePresetTools(preset) : null\n\n const allTools = {\n getRepository: getRepository(resolvedToken),\n listBranches: listBranches(resolvedToken),\n getFileContent: getFileContent(resolvedToken),\n listPullRequests: listPullRequests(resolvedToken),\n getPullRequest: getPullRequest(resolvedToken),\n listIssues: listIssues(resolvedToken),\n getIssue: getIssue(resolvedToken),\n searchCode: searchCode(resolvedToken),\n searchRepositories: searchRepositories(resolvedToken),\n listCommits: listCommits(resolvedToken),\n getCommit: getCommit(resolvedToken),\n getBlame: getBlame(resolvedToken),\n createBranch: createBranch(resolvedToken, approval('createBranch')),\n forkRepository: forkRepository(resolvedToken, approval('forkRepository')),\n createRepository: createRepository(resolvedToken, approval('createRepository')),\n createOrUpdateFile: createOrUpdateFile(resolvedToken, approval('createOrUpdateFile')),\n createPullRequest: createPullRequest(resolvedToken, approval('createPullRequest')),\n mergePullRequest: mergePullRequest(resolvedToken, approval('mergePullRequest')),\n addPullRequestComment: addPullRequestComment(resolvedToken, approval('addPullRequestComment')),\n listPullRequestFiles: listPullRequestFiles(resolvedToken),\n listPullRequestReviews: listPullRequestReviews(resolvedToken),\n createPullRequestReview: createPullRequestReview(resolvedToken, approval('createPullRequestReview')),\n createIssue: createIssue(resolvedToken, approval('createIssue')),\n addIssueComment: addIssueComment(resolvedToken, approval('addIssueComment')),\n closeIssue: closeIssue(resolvedToken, approval('closeIssue')),\n listLabels: listLabels(resolvedToken),\n addLabels: addLabels(resolvedToken, approval('addLabels')),\n removeLabel: removeLabel(resolvedToken, approval('removeLabel')),\n listGists: listGists(resolvedToken),\n getGist: getGist(resolvedToken),\n listGistComments: listGistComments(resolvedToken),\n createGist: createGist(resolvedToken, approval('createGist')),\n updateGist: updateGist(resolvedToken, approval('updateGist')),\n deleteGist: deleteGist(resolvedToken, approval('deleteGist')),\n createGistComment: createGistComment(resolvedToken, approval('createGistComment')),\n listWorkflows: listWorkflows(resolvedToken),\n listWorkflowRuns: listWorkflowRuns(resolvedToken),\n getWorkflowRun: getWorkflowRun(resolvedToken),\n listWorkflowJobs: listWorkflowJobs(resolvedToken),\n triggerWorkflow: triggerWorkflow(resolvedToken, approval('triggerWorkflow')),\n cancelWorkflowRun: cancelWorkflowRun(resolvedToken, approval('cancelWorkflowRun')),\n rerunWorkflowRun: rerunWorkflowRun(resolvedToken, approval('rerunWorkflowRun')),\n }\n\n if (overrides) {\n for (const [name, toolOverrides] of Object.entries(overrides)) {\n if (name in allTools && toolOverrides) {\n const key = name as keyof typeof allTools\n Object.assign(allTools, { [key]: { ...allTools[key], ...toolOverrides } })\n }\n }\n }\n\n if (!allowed) return allTools\n\n return Object.fromEntries(\n Object.entries(allTools).filter(([name]) => allowed.has(name))\n ) as Partial<typeof allTools>\n}\n\nexport type GithubTools = ReturnType<typeof createGithubTools>\n\n// Re-export individual tool factories for cherry-picking\nexport { createOctokit } from './client'\nexport { getRepository, listBranches, getFileContent, createBranch, forkRepository, createRepository, createOrUpdateFile } from './tools/repository'\nexport { listPullRequests, getPullRequest, createPullRequest, mergePullRequest, addPullRequestComment, listPullRequestFiles, listPullRequestReviews, createPullRequestReview } from './tools/pull-requests'\nexport { listIssues, getIssue, createIssue, addIssueComment, closeIssue, listLabels, addLabels, removeLabel } from './tools/issues'\nexport { searchCode, searchRepositories } from './tools/search'\nexport { listCommits, getCommit, getBlame } from './tools/commits'\nexport { listGists, getGist, listGistComments, createGist, updateGist, deleteGist, createGistComment } from './tools/gists'\nexport { listWorkflows, listWorkflowRuns, getWorkflowRun, listWorkflowJobs, triggerWorkflow, cancelWorkflowRun, rerunWorkflowRun } from './tools/workflows'\nexport type { Octokit, ToolOptions, ToolOverrides } from './types'\nexport { createGithubAgent } from './agents'\nexport type { CreateGithubAgentOptions } from './agents'\n"],"mappings":"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"}