{"version":3,"file":"write-tools-BvuWAzwo.mjs","names":["repository.getRepositoryDescription","repository.getRepositoryInputSchema","repository.getRepositoryCore","repository.listBranchesDescription","repository.listBranchesInputSchema","repository.listBranchesCore","repository.getFileContentDescription","repository.getFileContentInputSchema","repository.getFileContentCore","repository.getRepositoryTreeDescription","repository.getRepositoryTreeInputSchema","repository.getRepositoryTreeCore","repository.createBranchDescription","repository.createBranchInputSchema","repository.createBranchCore","repository.deleteBranchDescription","repository.deleteBranchInputSchema","repository.deleteBranchCore","repository.forkRepositoryDescription","repository.forkRepositoryInputSchema","repository.forkRepositoryCore","repository.createRepositoryDescription","repository.createRepositoryInputSchema","repository.createRepositoryCore","repository.createOrUpdateFileDescription","repository.createOrUpdateFileInputSchema","repository.createOrUpdateFileCore","pullRequests.listPullRequestsDescription","pullRequests.listPullRequestsInputSchema","pullRequests.listPullRequestsCore","pullRequests.getPullRequestDescription","pullRequests.getPullRequestInputSchema","pullRequests.getPullRequestCore","pullRequests.createPullRequestDescription","pullRequests.createPullRequestInputSchema","pullRequests.createPullRequestCore","pullRequests.mergePullRequestDescription","pullRequests.mergePullRequestInputSchema","pullRequests.mergePullRequestCore","pullRequests.updatePullRequestDescription","pullRequests.updatePullRequestInputSchema","pullRequests.updatePullRequestCore","pullRequests.addPullRequestCommentDescription","pullRequests.addPullRequestCommentInputSchema","pullRequests.addPullRequestCommentCore","pullRequests.updatePullRequestCommentDescription","pullRequests.updatePullRequestCommentInputSchema","pullRequests.updatePullRequestCommentCore","pullRequests.deletePullRequestCommentDescription","pullRequests.deletePullRequestCommentInputSchema","pullRequests.deletePullRequestCommentCore","pullRequests.listPullRequestFilesDescription","pullRequests.listPullRequestFilesInputSchema","pullRequests.listPullRequestFilesCore","pullRequests.listPullRequestReviewsDescription","pullRequests.listPullRequestReviewsInputSchema","pullRequests.listPullRequestReviewsCore","pullRequests.createPullRequestReviewDescription","pullRequests.createPullRequestReviewInputSchema","pullRequests.createPullRequestReviewCore","pullRequests.listPullRequestReviewThreadsDescription","pullRequests.listPullRequestReviewThreadsInputSchema","pullRequests.listPullRequestReviewThreadsCore","pullRequests.replyToReviewCommentDescription","pullRequests.replyToReviewCommentInputSchema","pullRequests.replyToReviewCommentCore","pullRequests.resolveReviewThreadDescription","pullRequests.resolveReviewThreadInputSchema","pullRequests.resolveReviewThreadCore","pullRequests.requestReviewersDescription","pullRequests.requestReviewersInputSchema","pullRequests.requestReviewersCore","bundles.getPullRequestContextDescription","bundles.getPullRequestContextInputSchema","bundles.getPullRequestContextCore","bundles.getIssueContextDescription","bundles.getIssueContextInputSchema","bundles.getIssueContextCore","issues.listIssuesDescription","issues.listIssuesInputSchema","issues.listIssuesCore","issues.getIssueDescription","issues.getIssueInputSchema","issues.getIssueCore","issues.listIssueCommentsDescription","issues.listIssueCommentsInputSchema","issues.listIssueCommentsCore","issues.createIssueDescription","issues.createIssueInputSchema","issues.createIssueCore","issues.addIssueCommentDescription","issues.addIssueCommentInputSchema","issues.addIssueCommentCore","issues.updateIssueCommentDescription","issues.updateIssueCommentInputSchema","issues.updateIssueCommentCore","issues.deleteIssueCommentDescription","issues.deleteIssueCommentInputSchema","issues.deleteIssueCommentCore","issues.closeIssueDescription","issues.closeIssueInputSchema","issues.closeIssueCore","issues.updateIssueDescription","issues.updateIssueInputSchema","issues.updateIssueCore","issues.listLabelsDescription","issues.listLabelsInputSchema","issues.listLabelsCore","issues.addLabelsDescription","issues.addLabelsInputSchema","issues.addLabelsCore","issues.removeLabelDescription","issues.removeLabelInputSchema","issues.removeLabelCore","issues.createLabelDescription","issues.createLabelInputSchema","issues.createLabelCore","issues.updateLabelDescription","issues.updateLabelInputSchema","issues.updateLabelCore","issues.deleteLabelDescription","issues.deleteLabelInputSchema","issues.deleteLabelCore","issues.addAssigneesDescription","issues.addAssigneesInputSchema","issues.addAssigneesCore","issues.removeAssigneesDescription","issues.removeAssigneesInputSchema","issues.removeAssigneesCore","reactions.listIssueReactionsDescription","reactions.listIssueReactionsInputSchema","reactions.listIssueReactionsCore","reactions.addIssueReactionDescription","reactions.addIssueReactionInputSchema","reactions.addIssueReactionCore","reactions.listCommentReactionsDescription","reactions.listCommentReactionsInputSchema","reactions.listCommentReactionsCore","reactions.addCommentReactionDescription","reactions.addCommentReactionInputSchema","reactions.addCommentReactionCore","discussions.listDiscussionsDescription","discussions.listDiscussionsInputSchema","discussions.listDiscussionsCore","discussions.getDiscussionDescription","discussions.getDiscussionInputSchema","discussions.getDiscussionCore","discussions.addDiscussionCommentDescription","discussions.addDiscussionCommentInputSchema","discussions.addDiscussionCommentCore","notifications.listNotificationsDescription","notifications.listNotificationsInputSchema","notifications.listNotificationsCore","notifications.markNotificationReadDescription","notifications.markNotificationReadInputSchema","notifications.markNotificationReadCore","search.searchCodeDescription","search.searchCodeInputSchema","search.searchCodeCore","search.searchRepositoriesDescription","search.searchRepositoriesInputSchema","search.searchRepositoriesCore","search.searchIssuesDescription","search.searchIssuesInputSchema","search.searchIssuesCore","commits.listCommitsDescription","commits.listCommitsInputSchema","commits.listCommitsCore","commits.getCommitDescription","commits.getCommitInputSchema","commits.getCommitCore","commits.getBlameDescription","commits.getBlameInputSchema","commits.getBlameCore","commits.compareCommitsDescription","commits.compareCommitsInputSchema","commits.compareCommitsCore","gists.listGistsDescription","gists.listGistsInputSchema","gists.listGistsCore","gists.getGistDescription","gists.getGistInputSchema","gists.getGistCore","gists.listGistCommentsDescription","gists.listGistCommentsInputSchema","gists.listGistCommentsCore","gists.createGistDescription","gists.createGistInputSchema","gists.createGistCore","gists.updateGistDescription","gists.updateGistInputSchema","gists.updateGistCore","gists.deleteGistDescription","gists.deleteGistInputSchema","gists.deleteGistCore","gists.createGistCommentDescription","gists.createGistCommentInputSchema","gists.createGistCommentCore","workflows.listWorkflowsDescription","workflows.listWorkflowsInputSchema","workflows.listWorkflowsCore","workflows.listWorkflowRunsDescription","workflows.listWorkflowRunsInputSchema","workflows.listWorkflowRunsCore","workflows.getWorkflowRunDescription","workflows.getWorkflowRunInputSchema","workflows.getWorkflowRunCore","workflows.listWorkflowJobsDescription","workflows.listWorkflowJobsInputSchema","workflows.listWorkflowJobsCore","workflows.getWorkflowJobLogsDescription","workflows.getWorkflowJobLogsInputSchema","workflows.getWorkflowJobLogsCore","workflows.triggerWorkflowDescription","workflows.triggerWorkflowInputSchema","workflows.triggerWorkflowCore","workflows.cancelWorkflowRunDescription","workflows.cancelWorkflowRunInputSchema","workflows.cancelWorkflowRunCore","workflows.rerunWorkflowRunDescription","workflows.rerunWorkflowRunInputSchema","workflows.rerunWorkflowRunCore","checks.listCheckRunsDescription","checks.listCheckRunsInputSchema","checks.listCheckRunsCore","checks.getCombinedStatusDescription","checks.getCombinedStatusInputSchema","checks.getCombinedStatusCore","bundles.getCiFailureContextDescription","bundles.getCiFailureContextInputSchema","bundles.getCiFailureContextCore","releases.listReleasesDescription","releases.listReleasesInputSchema","releases.listReleasesCore","releases.getLatestReleaseDescription","releases.getLatestReleaseInputSchema","releases.getLatestReleaseCore","releases.getReleaseDescription","releases.getReleaseInputSchema","releases.getReleaseCore","bundles.getReleaseContextDescription","bundles.getReleaseContextInputSchema","bundles.getReleaseContextCore","releases.createReleaseDescription","releases.createReleaseInputSchema","releases.createReleaseCore","releases.updateReleaseDescription","releases.updateReleaseInputSchema","releases.updateReleaseCore","releases.deleteReleaseDescription","releases.deleteReleaseInputSchema","releases.deleteReleaseCore"],"sources":["../src/core/rate-limit.ts","../src/core/errors.ts","../src/client.ts","../src/core/sha1.ts","../src/core/git-blob-sha.ts","../src/core/pagination.ts","../src/core/repository.ts","../src/core/model-output.ts","../src/core/token.ts","../src/core/detail.ts","../src/core/pull-requests.ts","../src/core/issues.ts","../src/core/reactions.ts","../src/core/discussions.ts","../src/core/notifications.ts","../src/core/search.ts","../src/core/commits.ts","../src/core/gists.ts","../src/core/workflows.ts","../src/core/checks.ts","../src/core/releases.ts","../src/core/bundles.ts","../src/core/context.ts","../src/core/presets.ts","../src/core/catalog.ts","../src/core/tool-names.ts","../src/core/write-tools.ts"],"sourcesContent":["/**\n * GitHub REST/GraphQL rate-limit snapshot from the last request in a tool call.\n * Present on object-shaped execute results; stripped before the model sees the output.\n */\nexport type GithubRateLimit = {\n  remaining: number\n  limit: number\n  reset: number\n  resource?: string\n  retryAfter?: number\n}\n\nconst snapshots = new WeakMap<object, GithubRateLimit>()\n\nfunction headerValue(headers: Record<string, unknown> | undefined, name: string): string | undefined {\n  if (!headers) return undefined\n  const value = headers[name] ?? headers[name.toLowerCase()]\n  if (value == null) return undefined\n  return String(value)\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === 'object' && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype\n}\n\nfunction isRateLimit(value: unknown): value is GithubRateLimit {\n  return isPlainObject(value) && typeof value.remaining === 'number' && typeof value.limit === 'number' && typeof value.reset === 'number'\n}\n\n/** Parse GitHub `x-ratelimit-*` / `retry-after` headers. Returns undefined when the trio is missing. */\nexport function parseGithubRateLimit(headers: Record<string, unknown> | undefined): GithubRateLimit | undefined {\n  const remaining = Number(headerValue(headers, 'x-ratelimit-remaining'))\n  const limit = Number(headerValue(headers, 'x-ratelimit-limit'))\n  const reset = Number(headerValue(headers, 'x-ratelimit-reset'))\n  if (!Number.isFinite(remaining) || !Number.isFinite(limit) || !Number.isFinite(reset)) {\n    return undefined\n  }\n\n  const resource = headerValue(headers, 'x-ratelimit-resource')\n  const retryAfter = Number(headerValue(headers, 'retry-after'))\n\n  return {\n    remaining,\n    limit,\n    reset,\n    ...resource ? { resource } : {},\n    ...Number.isFinite(retryAfter) ? { retryAfter } : {},\n  }\n}\n\nexport function recordGithubRateLimit(owner: object, headers: Record<string, unknown> | undefined): void {\n  const rateLimit = parseGithubRateLimit(headers)\n  if (rateLimit) snapshots.set(owner, rateLimit)\n}\n\nexport function peekGithubRateLimit(owner: object): GithubRateLimit | undefined {\n  return snapshots.get(owner)\n}\n\nexport function stripRateLimit<T>(output: T): T {\n  if (!isPlainObject(output) || !('rateLimit' in output)) {\n    return output\n  }\n  const rest = { ...output }\n  delete rest.rateLimit\n  return rest as T\n}\n\nfunction attachRateLimit<T>(result: T, rateLimit: GithubRateLimit | undefined): T {\n  if (!rateLimit || !isPlainObject(result)) return result\n  return { ...result, rateLimit } as T\n}\n\nexport function finishGithubResult<T>(owner: object, result: T): T {\n  return attachRateLimit(result, snapshots.get(owner))\n}\n\nfunction pickRateLimitDeep(value: unknown): GithubRateLimit | undefined {\n  let found: GithubRateLimit | undefined\n  if (isPlainObject(value)) {\n    if (isRateLimit(value.rateLimit)) found = value.rateLimit\n    for (const child of Object.values(value)) {\n      const nested = pickRateLimitDeep(child)\n      if (nested) found = nested\n    }\n  }\n  return found\n}\n\nfunction stripRateLimitDeep<T>(value: T): T {\n  if (Array.isArray(value)) return value\n  if (!isPlainObject(value)) return value\n  const next = stripRateLimit({ ...value })\n  return Object.fromEntries(\n    Object.entries(next).map(([key, child]) => [key, stripRateLimitDeep(child)]),\n  ) as T\n}\n\n/** Lift a nested child's `rateLimit` onto a composed object and strip it from children. */\nexport function withComposedRateLimit<T extends Record<string, unknown>>(result: T): T {\n  return attachRateLimit(stripRateLimitDeep(result), pickRateLimitDeep(result))\n}\n\nexport function formatRateLimitSuffix(rateLimit: GithubRateLimit): string {\n  const resource = rateLimit.resource ? ` ${rateLimit.resource}` : ''\n  const retry = rateLimit.retryAfter != null ? `, retry after ${rateLimit.retryAfter}s` : ''\n  return `GitHub rate limit${resource}: ${rateLimit.remaining}/${rateLimit.limit} remaining, resets at ${rateLimit.reset}${retry}`\n}\n","import { defineErrorCatalog, EvlogError } from 'evlog'\nimport { formatRateLimitSuffix, type GithubRateLimit } from './rate-limit'\n\n/**\n * Structured error catalog for every failure the SDK can surface to a model\n * or a consumer. Each entry carries `why` (technical cause) and `fix`\n * (actionable remedy) so agents can recover instead of guessing — a bare\n * \"Not authorized\" reads as \"the repo is private\" to a model; the catalog\n * version names the real cause.\n */\nexport const githubToolsErrors = defineErrorCatalog('github_tools', {\n  TOKEN_REQUIRED: {\n    status: 401,\n    message: 'GitHub token is required. Pass it as `token` or set the GITHUB_TOKEN environment variable.',\n    why: 'No token string, async token provider, or GITHUB_TOKEN environment variable was available when the tool resolved its GitHub credentials.',\n    fix: 'Pass `token` (a PAT string or async provider) when creating the tools, set GITHUB_TOKEN, or configure a Vercel Connect `connector`.',\n    link: 'https://github-tools.com/guide/tokens-and-auth',\n  },\n  OIDC_TOKEN_EXPIRED: {\n    status: 401,\n    message: ({ expiredAt }: { expiredAt: string }) =>\n      `VERCEL_OIDC_TOKEN expired at ${expiredAt}; Vercel Connect would reject it, so no GitHub request was made.`,\n    why: 'The SDK pins the VERCEL_OIDC_TOKEN environment token when it is set (skipping @vercel/oidc\\'s project-root walk, which fails inside eve/workflow snapshots), so an expired env token is never refreshed automatically.',\n    fix: 'Locally: run `vercel env pull` to refresh .env.local. On Vercel: deployments inject a fresh token — check nothing overrides VERCEL_OIDC_TOKEN with a stale value.',\n    link: 'https://github-tools.com/guide/vercel-connect#eve-agent',\n  },\n  CONNECT_NOT_AUTHORIZED: {\n    status: 403,\n    message: ({ detail }: { detail: string }) =>\n      `Vercel Connect refused to mint a GitHub token: ${detail}`,\n    why: 'Connect rejected the identity of the calling process (the Vercel OIDC token), not the GitHub permissions — the request never reached GitHub.',\n    fix: 'Refresh the OIDC token (`vercel env pull` locally) and check the connector is linked to the Vercel project this code runs in.',\n    link: 'https://github-tools.com/guide/vercel-connect#setup-checklist',\n  },\n  CONNECT_USER_NOT_CONNECTED: {\n    status: 401,\n    message: ({ subjectId }: { subjectId: string }) =>\n      `No active GitHub connection for user \"${subjectId}\".`,\n    why: 'The Connect token was requested with a user subject, but that user has not connected their GitHub account to this connector (or revoked the authorization).',\n    fix: 'Have the user connect their GitHub account (e.g. from the integrations panel), then retry.',\n    link: 'https://github-tools.com/guide/vercel-connect#per-user-tokens',\n  },\n  CONNECT_INSTALLATION_REQUIRED: {\n    status: 401,\n    message: ({ detail }: { detail: string }) =>\n      `The Connect connector has no usable GitHub App installation: ${detail}`,\n    why: 'The connector exists but its GitHub App is not installed on the target org or user account.',\n    fix: 'Install the connector\\'s GitHub App on the org or account the agent needs, from the Vercel Connect dashboard.',\n    link: 'https://github-tools.com/guide/vercel-connect#create-a-github-connector',\n  },\n  SUBJECT_CONTEXT_REQUIRED: {\n    status: 500,\n    message: 'connect.subject resolver needs the tool execution context — it is only available while a tool call executes.',\n    why: 'The per-caller subject resolver was invoked without an eve ToolContext, which only exists during tool execution.',\n    fix: 'Keep `connect.subject` resolution on the tool execute path; use a static subject when no execution context is available.',\n    link: 'https://github-tools.com/frameworks/eve-extension#per-user-tokens',\n  },\n  UNAUTHORIZED: {\n    status: 401,\n    message: ({ detail }: { detail: string }) => `GitHub rejected the credentials (401): ${detail}`,\n    why: 'The GitHub token is invalid, expired, or revoked.',\n    fix: 'Rotate the credential: regenerate the PAT or re-mint the installation token, then update the token source.',\n    link: 'https://docs.github.com/en/rest/using-the-rest-api/troubleshooting-the-rest-api',\n  },\n  FORBIDDEN: {\n    status: 403,\n    message: ({ detail }: { detail: string }) => `GitHub refused the request (403): ${detail}`,\n    why: 'The token authenticated but lacks permission: a missing scope on this resource, SAML SSO enforcement, or an API that only accepts user access tokens (gists, notifications) called with an installation token.',\n    fix: 'Grant the missing permission on the PAT or GitHub App installation; authorize the token for SAML if the org enforces it; use a user access token for gist and notification tools.',\n    link: 'https://github-tools.com/guide/tokens-and-auth#map-permissions-to-presets',\n  },\n  RATE_LIMITED: {\n    status: 429,\n    message: ({ detail }: { detail: string }) => `GitHub rate limit exhausted: ${detail}`,\n    why: 'The token used up its GitHub API rate limit for this resource.',\n    fix: 'Stop calling this tool and retry after the reset timestamp in the message; batch reads or narrow the query to spend fewer requests.',\n    link: 'https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api',\n  },\n  NOT_FOUND: {\n    status: 404,\n    message: ({ detail }: { detail: string }) => `GitHub resource not found (404): ${detail}`,\n    why: 'Either the resource does not exist, or the token cannot see it — GitHub deliberately returns 404 instead of 403 for private resources the token has no access to.',\n    fix: 'Check the owner/repo/number input first. If it is correct, the token lacks access: grant the repository to the PAT or App installation, or use a Connect subject that has access.',\n    link: 'https://docs.github.com/en/rest/using-the-rest-api/troubleshooting-the-rest-api#404-not-found-for-an-existing-resource',\n  },\n  VALIDATION_FAILED: {\n    status: 422,\n    message: ({ detail }: { detail: string }) => `GitHub rejected the request as invalid (422): ${detail}`,\n    why: 'The input was well-formed but GitHub refused it — a duplicate resource, an immutable state transition, or an unresolvable ref.',\n    fix: 'The embedded GitHub message names the offending field or state; adjust the input and retry.',\n    link: 'https://docs.github.com/en/rest/using-the-rest-api/troubleshooting-the-rest-api#validation-failed',\n  },\n})\n\ndeclare module 'evlog' {\n  interface RegisteredErrorCatalogs {\n    github_tools: typeof githubToolsErrors\n  }\n}\n\nfunction errorStatus(error: unknown): number | undefined {\n  if (error == null || typeof error !== 'object' || !('status' in error)) return undefined\n  const status = (error as { status?: unknown }).status\n  return typeof status === 'number' ? status : undefined\n}\n\nfunction requestTarget(error: Error): Record<string, unknown> {\n  const request = (error as { request?: { method?: string, url?: string } }).request\n  return request?.url ? { method: request.method, url: request.url } : {}\n}\n\n/**\n * Map an Octokit request error to a catalog error by HTTP status. Statuses\n * without a dedicated entry (5xx, 301, …) pass through unchanged. The original\n * error stays reachable as `cause`; request coordinates land in `internal`\n * (never serialized toward the model).\n */\nexport function toGithubToolsError(error: unknown, rateLimit: GithubRateLimit | undefined): unknown {\n  const status = errorStatus(error)\n  if (status === undefined || !(error instanceof Error)) return error\n\n  const detail = error.message\n  const overrides = { cause: error, internal: { status, ...requestTarget(error) } }\n\n  if (status === 401) return githubToolsErrors.UNAUTHORIZED({ detail, ...overrides })\n  if (status === 404) return githubToolsErrors.NOT_FOUND({ detail, ...overrides })\n  if (status === 422) return githubToolsErrors.VALIDATION_FAILED({ detail, ...overrides })\n  if (status === 429 || (status === 403 && rateLimit?.remaining === 0)) {\n    const suffix = rateLimit ? ` (${formatRateLimitSuffix(rateLimit)})` : ''\n    return githubToolsErrors.RATE_LIMITED({ detail: `${detail}${suffix}`, ...overrides })\n  }\n  if (status === 403) return githubToolsErrors.FORBIDDEN({ detail, ...overrides })\n  return error\n}\n\n/** `{ code, message, why, fix, link }` projection of an EvlogError for model-facing payloads. `internal` stays off the wire. */\nexport function toModelErrorPayload(error: EvlogError): Record<string, string> {\n  return {\n    ...(error.code ? { code: error.code } : {}),\n    message: error.message,\n    ...(error.why ? { why: error.why } : {}),\n    ...(error.fix ? { fix: error.fix } : {}),\n    ...(error.link ? { link: error.link } : {}),\n  }\n}\n\nexport { EvlogError }\n","import { Octokit } from 'octokit'\nimport { toGithubToolsError } from './core/errors'\nimport {\n  finishGithubResult,\n  parseGithubRateLimit,\n  recordGithubRateLimit,\n} from './core/rate-limit'\n\n/** @see https://docs.github.com/en/rest/about-the-rest-api/api-versions */\nexport const GITHUB_API_VERSION = '2026-03-10'\n\nfunction errorResponseHeaders(error: unknown): Record<string, unknown> | undefined {\n  if (error == null || typeof error !== 'object' || !('response' in error)) return undefined\n  const response = (error as { response?: { headers?: Record<string, unknown> } }).response\n  return response?.headers\n}\n\nexport function createOctokit(token: string): Octokit {\n  const octokit = new Octokit({ auth: token })\n\n  octokit.hook.before('request', (options) => {\n    options.headers = {\n      ...options.headers,\n      'X-GitHub-Api-Version': GITHUB_API_VERSION,\n    }\n  })\n\n  octokit.hook.after('request', (response) => {\n    recordGithubRateLimit(octokit, response.headers)\n  })\n\n  octokit.hook.error('request', (error) => {\n    const rateLimit = parseGithubRateLimit(errorResponseHeaders(error))\n    if (rateLimit) recordGithubRateLimit(octokit, errorResponseHeaders(error))\n    throw toGithubToolsError(error, rateLimit)\n  })\n\n  return octokit\n}\n\n/** Run a GitHub `*Core` body and attach `rateLimit` from this Octokit instance. */\nexport async function withOctokit<T>(token: string, fn: (octokit: Octokit) => Promise<T>): Promise<T> {\n  const octokit = createOctokit(token)\n  const result = await fn(octokit)\n  return finishGithubResult(octokit, result)\n}\n","/** SHA-1 hex digest without Node.js `crypto` (safe in workflow bundles). */\nexport function sha1Hex(data: Uint8Array): string {\n  const words = new Uint32Array(80)\n  const bitLength = data.length * 8\n\n  const padded = new Uint8Array(((data.length + 9 + 63) >> 6) << 6)\n  padded.set(data)\n  padded[data.length] = 0x80\n\n  const view = new DataView(padded.buffer)\n  view.setUint32(padded.length - 4, bitLength >>> 0, false)\n  view.setUint32(padded.length - 8, Math.floor(bitLength / 0x1_0000_0000), false)\n\n  let h0 = 0x67452301\n  let h1 = 0xEFCDAB89\n  let h2 = 0x98BADCFE\n  let h3 = 0x10325476\n  let h4 = 0xC3D2E1F0\n\n  for (let offset = 0; offset < padded.length; offset += 64) {\n    for (let j = 0; j < 16; j++) {\n      words[j] = view.getUint32(offset + j * 4, false)\n    }\n    for (let j = 16; j < 80; j++) {\n      words[j] = rotl(words[j - 3]! ^ words[j - 8]! ^ words[j - 14]! ^ words[j - 16]!, 1)\n    }\n\n    let a = h0\n    let b = h1\n    let c = h2\n    let d = h3\n    let e = h4\n\n    for (let j = 0; j < 80; j++) {\n      let f: number\n      let k: number\n      if (j < 20) {\n        f = (b & c) | (~b & d)\n        k = 0x5A827999\n      } else if (j < 40) {\n        f = b ^ c ^ d\n        k = 0x6ED9EBA1\n      } else if (j < 60) {\n        f = (b & c) | (b & d) | (c & d)\n        k = 0x8F1BBCDC\n      } else {\n        f = b ^ c ^ d\n        k = 0xCA62C1D6\n      }\n\n      const temp = (rotl(a, 5) + f + e + k + words[j]!) >>> 0\n      e = d\n      d = c\n      c = rotl(b, 30)\n      b = a\n      a = temp\n    }\n\n    h0 = (h0 + a) >>> 0\n    h1 = (h1 + b) >>> 0\n    h2 = (h2 + c) >>> 0\n    h3 = (h3 + d) >>> 0\n    h4 = (h4 + e) >>> 0\n  }\n\n  return [h0, h1, h2, h3, h4].map(word => word.toString(16).padStart(8, '0')).join('')\n}\n\nfunction rotl(value: number, bits: number): number {\n  return ((value << bits) | (value >>> (32 - bits))) >>> 0\n}\n","import { sha1Hex } from './sha1'\n\n/** Compute the git blob SHA (SHA-1 of \"blob {size}\\\\0{content}\") for a given string. */\nexport function gitBlobSha(content: string): string {\n  const contentBytes = new TextEncoder().encode(content)\n  const header = new TextEncoder().encode(`blob ${contentBytes.length}\\0`)\n  const payload = new Uint8Array(header.length + contentBytes.length)\n  payload.set(header)\n  payload.set(contentBytes, header.length)\n  return sha1Hex(payload)\n}\n","import { z } from 'zod'\n\nexport const pageSchema = z.number().int().positive().optional().default(1)\n  .describe('1-based page. When hasMore is true, call again with nextPage (or page + 1). Do not repeat the same page.')\n\nexport const maxPagesSchema = z.number().int().positive().max(20).optional()\n  .describe('Fetch and combine up to this many pages in one call (max 20). Prefer this over many page=N calls. Omit to fetch a single page. If hasMore, the next start page is nextPage, not page + 1.')\n\nexport type PagingFields = {\n  hasMore: boolean\n  page: number\n  perPage: number\n  nextPage?: number\n}\n\nexport type PagedList<T> = { items: T[] } & PagingFields\n\nexport function pagingFields(page: number, perPage: number, itemCount: number, hasMore: boolean): PagingFields {\n  return {\n    hasMore,\n    page,\n    perPage,\n    ...hasMore ? { nextPage: page + Math.max(1, Math.ceil(itemCount / perPage)) } : {},\n  }\n}\n\n/** True when the returned window does not yet cover `totalCount`. */\nexport function hasMoreByTotal(page: number, perPage: number, itemCount: number, totalCount: number): boolean {\n  return (page - 1) * perPage + itemCount < totalCount\n}\n\nexport function pagedList<T>(items: T[], perPage: number, page: number, hasMore: boolean): PagedList<T> {\n  return { items, ...pagingFields(page, perPage, items.length, hasMore) }\n}\n\n/**\n * Fetches a single page (`startPage`, default 1) by default. When `maxPages`\n * is set, fetches pages sequentially starting at `startPage` and stops early\n * once a page returns fewer than `perPage` items (the last page).\n * `hasMore` is true when the last fetched page was full.\n */\nexport async function fetchAllPages<T>(\n  fetchPage: (page: number) => Promise<T[]>,\n  perPage: number,\n  maxPages?: number,\n  startPage = 1,\n): Promise<{ items: T[], hasMore: boolean }> {\n  if (!maxPages || maxPages <= 1) {\n    const items = await fetchPage(startPage)\n    return { items, hasMore: items.length >= perPage }\n  }\n\n  const items: T[] = []\n  let hasMore = false\n  for (let i = 0; i < maxPages; i++) {\n    const pageItems = await fetchPage(startPage + i)\n    items.push(...pageItems)\n    if (pageItems.length < perPage) {\n      hasMore = false\n      break\n    }\n    hasMore = true\n  }\n  return { items, hasMore }\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport type { CommitIdentity, Octokit } from '../types'\nimport { gitBlobSha } from './git-blob-sha'\nimport { pageSchema, pagedList } from './pagination'\n\nconst CREATE_COMMIT_ON_BRANCH_MUTATION = `\n  mutation CreateCommitOnBranch($input: CreateCommitOnBranchInput!) {\n    createCommitOnBranch(input: $input) { commit { oid url } }\n  }\n`\n\ntype CreateCommitOnBranchErrorReason = 'stale_data' | 'forbidden' | 'unknown'\nclass CreateCommitOnBranchError extends Error {\n  constructor(message: string, public reason: CreateCommitOnBranchErrorReason) {\n    super(message)\n    this.name = 'CreateCommitOnBranchError'\n  }\n}\n\nexport async function createCommitOnBranch(octokit: Octokit, input: {\n  owner: string\n  repo: string\n  branch: string\n  expectedHeadOid: string\n  headline: string\n  body?: string\n  additions?: Array<{ path: string, contents: string }>\n  deletions?: Array<{ path: string }>\n}): Promise<{ commitSha: string, commitUrl: string }> {\n  try {\n    const result = await octokit.graphql<{ createCommitOnBranch: { commit: { oid: string, url: string } } }>(CREATE_COMMIT_ON_BRANCH_MUTATION, {\n      input: {\n        branch: { repositoryNameWithOwner: `${input.owner}/${input.repo}`, branchName: input.branch },\n        expectedHeadOid: input.expectedHeadOid,\n        message: input.body ? { headline: input.headline, body: input.body } : { headline: input.headline },\n        fileChanges: { additions: input.additions, deletions: input.deletions },\n      },\n    })\n    return { commitSha: result.createCommitOnBranch.commit.oid, commitUrl: result.createCommitOnBranch.commit.url }\n  } catch (error: unknown) {\n    const err = error as { errors?: Array<{ type?: string }>, status?: number, message?: string }\n    const types = new Set((err.errors ?? []).map((e) => e.type))\n    if (types.has('STALE_DATA')) throw new CreateCommitOnBranchError(err.message ?? 'Stale data', 'stale_data')\n    if (types.has('FORBIDDEN') || types.has('INSUFFICIENT_SCOPES') || err.status === 401 || err.status === 403) {\n      throw new CreateCommitOnBranchError(err.message ?? 'Forbidden', 'forbidden')\n    }\n    throw error\n  }\n}\n\nexport function composeCommitMessage(\n  message: string,\n  coAuthors?: CommitIdentity[]\n): string {\n  if (!coAuthors?.length) return message\n  const trailers = coAuthors\n    .map(({ name, email }) => `Co-authored-by: ${name} <${email}>`)\n    .join('\\n')\n  return message ? `${message}\\n\\n${trailers}` : trailers\n}\n\nexport const getRepositoryInputSchema = z.object({\n  owner: z.string().describe('Repository owner (user or organization)'),\n  repo: z.string().describe('Repository name'),\n})\n\nexport const getRepositoryDescription = 'Get information about a GitHub repository including description, stars, forks, language, and default branch'\n\nexport async function getRepositoryCore({ token, owner, repo }: { token: string, owner: string, repo: string }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const listBranchesInputSchema = 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  page: pageSchema,\n})\n\nexport const listBranchesDescription = 'List branches in a GitHub repository. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listBranchesCore({ token, owner, repo, perPage, page = 1 }: { token: string, owner: string, repo: string, perPage: number, page?: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.repos.listBranches({ owner, repo, per_page: perPage, page })\n  return pagedList(data.map(branch => ({\n    name: branch.name,\n    sha: branch.commit.sha,\n    protected: branch.protected,\n  })), perPage, page, data.length >= perPage)\n  })\n}\n\nexport const getFileContentInputSchema = 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  startLine: z.number().int().positive().optional().describe('1-based start line to return (inclusive). Use with endLine or maxLines to avoid loading large files'),\n  endLine: z.number().int().positive().optional().describe('1-based end line to return (inclusive). Defaults to startLine + maxLines - 1 when maxLines is set'),\n  maxLines: z.number().int().positive().optional().describe('Max number of lines to return from startLine (or from line 1). Prefer this over reading an entire large file'),\n})\n\nexport const getFileContentDescription = 'Get the content of a file from a GitHub repository. Prefer startLine/endLine or maxLines to read only the lines you need'\n\nexport async function getFileContentCore({\n  token,\n  owner,\n  repo,\n  path,\n  ref,\n  startLine,\n  endLine,\n  maxLines,\n}: {\n  token: string\n  owner: string\n  repo: string\n  path: string\n  ref?: string\n  startLine?: number\n  endLine?: number\n  maxLines?: number\n}) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.repos.getContent({ owner, repo, path, ref })\n  if (Array.isArray(data)) {\n    return { type: 'directory' as const, 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 fullContent = Buffer.from(data.content, 'base64').toString('utf-8')\n  const lines = fullContent.split('\\n')\n  const totalLines = lines.length\n\n  const wantsRange = startLine != null || endLine != null || maxLines != null\n  if (!wantsRange) {\n    return {\n      type: 'file' as const,\n      path: data.path,\n      sha: data.sha,\n      size: data.size,\n      totalLines,\n      content: fullContent,\n    }\n  }\n\n  const from = startLine ?? 1\n  const to = endLine ?? (maxLines != null ? from + maxLines - 1 : totalLines)\n  const clampedFrom = Math.min(Math.max(from, 1), totalLines)\n  const clampedTo = Math.min(Math.max(to, clampedFrom), totalLines)\n  const slice = lines.slice(clampedFrom - 1, clampedTo)\n\n  return {\n    type: 'file' as const,\n    path: data.path,\n    sha: data.sha,\n    size: data.size,\n    totalLines,\n    startLine: clampedFrom,\n    endLine: clampedTo,\n    truncated: clampedFrom > 1 || clampedTo < totalLines,\n    content: slice.join('\\n'),\n  }\n  })\n}\n\nexport const getRepositoryTreeInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  ref: z.string().optional().describe('Branch, tag, or commit SHA (defaults to the default branch)'),\n  path: z.string().optional().describe('Only entries at or under this directory prefix. Prefer this over recursive true on large repos'),\n  recursive: z.boolean().optional().default(false).describe('Recursively list the entire tree instead of just the top level. Prefer path + recursive false when exploring'),\n})\n\nexport const getRepositoryTreeDescription = 'List the file and directory structure of a repository at a given ref. Prefer a path prefix over recursive true. If truncated, narrow path instead of recalling the full tree.'\n\nexport async function getRepositoryTreeCore({ token, owner, repo, ref, path, recursive }: { token: string, owner: string, repo: string, ref?: string, path?: string, recursive: boolean }) {\n  return withOctokit(token, async (octokit) => {\n  const treeSha = ref || (await octokit.rest.repos.get({ owner, repo })).data.default_branch\n  const { data } = await octokit.rest.git.getTree({ owner, repo, tree_sha: treeSha, recursive: recursive ? 'true' : undefined })\n  const prefix = path?.replace(/\\/+$/, '')\n  const entries = data.tree\n    .filter(entry => {\n      if (!prefix || !entry.path) return !prefix\n      return entry.path === prefix || entry.path.startsWith(`${prefix}/`)\n    })\n    .map(entry => ({\n      path: entry.path,\n      type: entry.type,\n      size: entry.size,\n      sha: entry.sha,\n    }))\n  return {\n    sha: data.sha,\n    truncated: data.truncated,\n    path: prefix,\n    entries,\n  }\n  })\n}\n\nexport const createBranchInputSchema = 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\nexport const createBranchDescription = 'Create a new branch in a GitHub repository from an existing branch or commit SHA'\n\n/** Idempotent when the branch already exists at the target SHA. Not idempotent otherwise. */\nexport async function createBranchCore({ token, owner, repo, branch, from }: { token: string, owner: string, repo: string, branch: string, from?: string }) {\n  return withOctokit(token, async (octokit) => {\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\n  try {\n    const { data: existingRef } = await octokit.rest.git.getRef({ owner, repo, ref: `heads/${branch}` })\n    if (existingRef.object.sha === sha) {\n      return {\n        ref: existingRef.ref,\n        sha: existingRef.object.sha,\n        url: existingRef.url,\n      }\n    }\n  } catch {\n    // Branch does not exist yet — create below.\n  }\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}\n\nexport const deleteBranchInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  branch: z.string().describe('Branch name to delete (without the refs/heads/ prefix)'),\n})\n\nexport const deleteBranchDescription = 'Delete a branch from a GitHub repository permanently'\n\n/** Not idempotent — deleting a branch that no longer exists fails with a 422. */\nexport async function deleteBranchCore({ token, owner, repo, branch }: { token: string, owner: string, repo: string, branch: string }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.git.deleteRef({ owner, repo, ref: `heads/${branch}` })\n  return { deleted: true, branch }\n  })\n}\n\nexport const forkRepositoryInputSchema = 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\nexport const forkRepositoryDescription = 'Fork a GitHub repository to the authenticated user account or a specified organization'\n\n/** Not idempotent — each call may create another fork attempt. */\nexport async function forkRepositoryCore({ token, owner, repo, organization, name }: { token: string, owner: string, repo: string, organization?: string, name?: string }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const createRepositoryInputSchema = 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\nexport const createRepositoryDescription = 'Create a new GitHub repository for the authenticated user or a specified organization'\n\n/** Not idempotent — each call creates a new repository. */\nexport async function createRepositoryCore({ 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  return withOctokit(token, async (octokit) => {\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}\n\nexport const createOrUpdateFileInputSchema = 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\nexport const createOrUpdateFileDescription = 'Create or update a file in a GitHub repository. Provide the SHA when updating an existing file.'\n\n/** Idempotent when updating with sha and content is unchanged. Not idempotent for new commits. */\nexport async function createOrUpdateFileCore({\n  token,\n  owner,\n  repo,\n  path,\n  message,\n  content,\n  branch,\n  sha,\n  author,\n  committer,\n  coAuthors,\n}: {\n  token: string\n  owner: string\n  repo: string\n  path: string\n  message: string\n  content: string\n  branch?: string\n  sha?: string\n  author?: CommitIdentity\n  committer?: CommitIdentity\n  coAuthors?: CommitIdentity[]\n}) {\n  return withOctokit(token, async (octokit) => {\n\n  if (sha) {\n    const branchName = branch || (await octokit.rest.repos.get({ owner, repo })).data.default_branch\n    try {\n      const { data: fileData } = await octokit.rest.repos.getContent({ owner, repo, path, ref: branchName })\n      if (!Array.isArray(fileData) && fileData.type === 'file') {\n        const currentContent = Buffer.from(fileData.content, 'base64').toString('utf-8')\n        if (currentContent === content) {\n          return {\n            path: fileData.path,\n            sha: fileData.sha,\n            skipped: true as const,\n            message: 'Content unchanged; no commit created',\n          }\n        }\n      }\n    } catch {\n      // File may not exist yet or ref unavailable — proceed with write.\n    }\n  }\n\n  // optimistically try to create a signed commit via GraphQL API\n  if (!author && !committer) {\n    try {\n      const branchName = branch || (await octokit.rest.repos.get({ owner, repo })).data.default_branch\n      const { data: ref } = await octokit.rest.git.getRef({ owner, repo, ref: `heads/${branchName}` })\n\n      const fullMessage = composeCommitMessage(message, coAuthors)\n      const [headline, ...rest] = fullMessage.split('\\n')\n      const body = rest.join('\\n').replace(/^\\n+/, '') || undefined\n\n      const result = await createCommitOnBranch(octokit, {\n        owner, repo, branch: branchName,\n        expectedHeadOid: ref.object.sha,\n        headline, body,\n        additions: [{ path, contents: Buffer.from(content).toString('base64') }],\n      })\n      return { path, sha: gitBlobSha(content), commitSha: result.commitSha, commitUrl: result.commitUrl }\n    } catch (error) {\n      if (error instanceof CreateCommitOnBranchError && error.reason === 'stale_data') {\n        throw error\n      }\n      const msg = error instanceof Error ? error.message : String(error)\n      console.warn(`[github-tools] Signed commit failed, using REST API: ${msg}`)\n    }\n  }\n\n  // fallback to REST API\n  const encoded = Buffer.from(content).toString('base64')\n  const finalMessage = composeCommitMessage(message, coAuthors)\n  const { data } = await octokit.rest.repos.createOrUpdateFileContents({\n    owner,\n    repo,\n    path,\n    message: finalMessage,\n    content: encoded,\n    branch,\n    sha,\n    author,\n    committer,\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}\n","const MAX_PATCH_LENGTH = 4000\nconst MAX_CONTENT_LENGTH = 20000\nconst MAX_MODEL_TREE_ENTRIES = 200\nconst MAX_MODEL_DIFF_FILES = 80\n\nfunction truncateText(text: string, maxLength: number): string {\n  if (text.length <= maxLength) return text\n  return `${text.slice(0, maxLength)}\\n\\n[truncated: ${text.length - maxLength} more characters]`\n}\n\nfunction truncatePatchFields<T extends { patch?: string }>(files: T[]): T[] {\n  return files.map(file => ({\n    ...file,\n    patch: file.patch ? truncateText(file.patch, MAX_PATCH_LENGTH) : file.patch,\n  }))\n}\n\nfunction capDiffFiles<T extends { patch?: string }>(files: T[] | undefined) {\n  if (!files) return { files, filesOmitted: 0 }\n  const truncated = truncatePatchFields(files)\n  if (truncated.length <= MAX_MODEL_DIFF_FILES) return { files: truncated, filesOmitted: 0 }\n  return {\n    files: truncated.slice(0, MAX_MODEL_DIFF_FILES),\n    filesOmitted: truncated.length - MAX_MODEL_DIFF_FILES,\n  }\n}\n\ntype ToModelOutputOptions = {\n  toolCallId: string\n  input: unknown\n  output: unknown\n}\n\ntype ListPullRequestFile = {\n  filename: string\n  status: string\n  additions: number\n  deletions: number\n  changes: number\n  patch?: string\n}\n\ntype ListPullRequestFilesOutput = {\n  items: ListPullRequestFile[]\n  hasMore: boolean\n  page: number\n  perPage: number\n  nextPage?: number\n}\n\ntype GetCommitOutput = {\n  sha: string\n  message: string\n  author?: string\n  authorLogin?: string\n  date?: string\n  url: string\n  stats: { additions: number, deletions: number, total: number } | null\n  files?: Array<{\n    filename: string\n    status: string\n    additions: number\n    deletions: number\n    patch?: string\n  }>\n}\n\ntype GetFileContentOutput =\n  | { type: 'directory', entries: Array<{ name: string, type: string, path: string }> }\n  | { type: string, path: string }\n  | {\n      type: 'file'\n      path: string\n      sha: string\n      size: number\n      content: string\n      totalLines?: number\n      startLine?: number\n      endLine?: number\n      truncated?: boolean\n    }\n\nexport function listPullRequestFilesToModelOutput({ output }: ToModelOutputOptions) {\n  const result = output as ListPullRequestFilesOutput\n  return {\n    type: 'json' as const,\n    value: {\n      ...result,\n      items: truncatePatchFields(result.items),\n    },\n  }\n}\n\nexport function getCommitToModelOutput({ output }: ToModelOutputOptions) {\n  const commit = output as GetCommitOutput\n  const { files, filesOmitted } = capDiffFiles(commit.files)\n  return {\n    type: 'json' as const,\n    value: {\n      ...commit,\n      files,\n      ...filesOmitted > 0 ? { filesOmitted } : {},\n    },\n  }\n}\n\ntype CompareCommitsOutput = {\n  status: string\n  aheadBy: number\n  behindBy: number\n  totalCommits: number\n  url: string\n  commits: Array<{ sha: string, message: string, author?: string, authorLogin?: string }>\n  files?: Array<{\n    filename: string\n    status: string\n    additions: number\n    deletions: number\n    patch?: string\n  }>\n}\n\nexport function compareCommitsToModelOutput({ output }: ToModelOutputOptions) {\n  const comparison = output as CompareCommitsOutput\n  const { files, filesOmitted } = capDiffFiles(comparison.files)\n  return {\n    type: 'json' as const,\n    value: {\n      ...comparison,\n      files,\n      ...filesOmitted > 0 ? { filesOmitted } : {},\n    },\n  }\n}\n\nexport function getFileContentToModelOutput({ output }: ToModelOutputOptions) {\n  const result = output as GetFileContentOutput\n  if (result.type === 'directory' && 'entries' in result && result.entries.length > MAX_MODEL_TREE_ENTRIES) {\n    return {\n      type: 'json' as const,\n      value: {\n        ...result,\n        truncated: true,\n        entries: result.entries.slice(0, MAX_MODEL_TREE_ENTRIES),\n        entriesOmitted: result.entries.length - MAX_MODEL_TREE_ENTRIES,\n      },\n    }\n  }\n  if ('content' in result && result.content.length > MAX_CONTENT_LENGTH) {\n    return {\n      type: 'json' as const,\n      value: {\n        ...result,\n        content: truncateText(result.content, MAX_CONTENT_LENGTH),\n      },\n    }\n  }\n  return { type: 'json' as const, value: result }\n}\n\ntype GetRepositoryTreeOutput = {\n  sha: string\n  truncated: boolean\n  path?: string\n  entries: Array<{ path?: string, type?: string, size?: number, sha?: string }>\n}\n\nexport function getRepositoryTreeToModelOutput({ output }: ToModelOutputOptions) {\n  const result = output as GetRepositoryTreeOutput\n  if (result.entries.length <= MAX_MODEL_TREE_ENTRIES) {\n    return { type: 'json' as const, value: result }\n  }\n  return {\n    type: 'json' as const,\n    value: {\n      ...result,\n      truncated: true,\n      entries: result.entries.slice(0, MAX_MODEL_TREE_ENTRIES),\n      entriesOmitted: result.entries.length - MAX_MODEL_TREE_ENTRIES,\n    },\n  }\n}\n\ntype GetPullRequestContextOutput = {\n  pullRequest: {\n    number: number\n    title: string\n    body: string | null\n    state: string\n    url: string\n    author?: string\n    branch: string\n    headSha: string\n    base: string\n    draft?: boolean\n    merged: boolean\n    mergeable: boolean | null\n    additions: number\n    deletions: number\n    changedFiles: number\n    createdAt: string\n    updatedAt: string\n    mergedAt: string | null\n  }\n  files?: ListPullRequestFile[]\n  filesHasMore?: boolean\n  reviews?: Array<{\n    id: number\n    state: string\n    body: string\n    author?: string\n    url: string\n    submittedAt?: string | null\n  }>\n  checks?: {\n    checkRuns: {\n      totalCount: number\n      checkRuns: Array<{\n        id: number\n        name: string\n        status: string\n        conclusion: string | null\n        url: string | null\n        startedAt: string | null\n        completedAt: string | null\n      }>\n    }\n    combinedStatus: {\n      state: string\n      totalCount: number\n      statuses: Array<{\n        context: string\n        state: string\n        description: string | null\n        url: string | null\n      }>\n    }\n  }\n}\n\nexport function getPullRequestContextToModelOutput({ output }: ToModelOutputOptions) {\n  const result = output as GetPullRequestContextOutput\n  const { files, filesOmitted } = capDiffFiles(result.files)\n  return {\n    type: 'json' as const,\n    value: {\n      ...result,\n      files,\n      ...filesOmitted > 0 ? { filesOmitted } : {},\n    },\n  }\n}\n","import { githubToolsErrors } from './errors'\n\nexport type GithubTokenInput = string | (() => Promise<string>)\nexport type GithubTokenResolver = () => Promise<string>\n\n/**\n * Normalizes a token string, async token provider, or `process.env.GITHUB_TOKEN`\n * into a `() => Promise<string>` resolver.\n *\n * Throws immediately for static inputs when no token is available. Provider\n * functions are validated lazily, each time the resolver is invoked.\n */\nexport function createGithubTokenResolver(token?: GithubTokenInput): GithubTokenResolver {\n  if (typeof token === 'function') {\n    return async () => {\n      const resolvedToken = await token()\n      if (!resolvedToken) {\n        throw githubToolsErrors.TOKEN_REQUIRED()\n      }\n      return resolvedToken\n    }\n  }\n\n  const resolvedToken = token || process.env.GITHUB_TOKEN\n  if (!resolvedToken) {\n    throw githubToolsErrors.TOKEN_REQUIRED()\n  }\n  return async () => resolvedToken\n}\n\n/** Resolves a {@link GithubTokenInput} to a token string. */\nexport function resolveGithubToken(token?: GithubTokenInput): Promise<string> {\n  return createGithubTokenResolver(token)()\n}\n","import { z } from 'zod'\n\nexport const SUMMARY_BODY_LENGTH = 500\n\n/**\n * Controls how much text is returned for bodies/notes.\n * - `summary` — truncate long bodies (~500 chars) to save tokens (default)\n * - `full` — return the complete body\n */\nexport const detailSchema = z\n  .enum(['summary', 'full'])\n  .optional()\n  .default('summary')\n  .describe('summary truncates long bodies (~500 chars) to save tokens; full returns the complete body')\n\nexport type DetailLevel = 'summary' | 'full'\n\n/**\n * Truncate a body/notes string when `detail` is `summary`.\n * Returns the original value when `full`, null/undefined, or already short.\n */\nexport function applyDetailBody(\n  body: string | null | undefined,\n  detail: DetailLevel,\n  maxLength = SUMMARY_BODY_LENGTH,\n): string | null | undefined {\n  if (detail === 'full' || body == null || body.length <= maxLength) return body\n  return `${body.slice(0, maxLength)}\\n\\n[truncated: ${body.length - maxLength} more characters]`\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport type { CommitIdentity } from '../types'\nimport { applyDetailBody, detailSchema, type DetailLevel } from './detail'\nimport { fetchAllPages, maxPagesSchema, pageSchema, pagedList } from './pagination'\nimport { composeCommitMessage } from './repository'\n\nexport const listPullRequestsInputSchema = 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 per page (max 100)'),\n  page: pageSchema,\n  maxPages: maxPagesSchema,\n})\n\nexport const listPullRequestsDescription = 'List pull requests for a GitHub repository. When hasMore, pass nextPage or raise maxPages — do not repeat the same call.'\n\nexport async function listPullRequestsCore({ token, owner, repo, state, perPage, page = 1, maxPages }: { token: string, owner: string, repo: string, state: 'open' | 'closed' | 'all', perPage: number, page?: number, maxPages?: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { items, hasMore } = await fetchAllPages(async currentPage => {\n    const { data } = await octokit.rest.pulls.list({ owner, repo, state, per_page: perPage, page: currentPage })\n    return data\n  }, perPage, maxPages, page)\n  return pagedList(items.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  })), perPage, page, hasMore)\n  })\n}\n\nexport const getPullRequestInputSchema = 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  detail: detailSchema,\n})\n\nexport const getPullRequestDescription = 'Get detailed information about a specific pull request. Body is truncated by default (detail: summary) — set detail full for the complete description'\n\nexport async function getPullRequestCore({ token, owner, repo, pullNumber, detail = 'summary' }: { token: string, owner: string, repo: string, pullNumber: number, detail?: DetailLevel }) {\n  return withOctokit(token, async (octokit) => {\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: applyDetailBody(data.body, detail),\n    state: data.state,\n    url: data.html_url,\n    author: data.user?.login,\n    branch: data.head.ref,\n    headSha: data.head.sha,\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}\n\nexport const createPullRequestInputSchema = 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\nexport const createPullRequestDescription = 'Create a new pull request in a GitHub repository'\n\n/** Not idempotent — each call creates a new pull request. */\nexport async function createPullRequestCore({ 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  return withOctokit(token, async (octokit) => {\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}\n\nconst MARK_READY_FOR_REVIEW_MUTATION = `\n  mutation($pullRequestId: ID!) {\n    markPullRequestReadyForReview(input: { pullRequestId: $pullRequestId }) {\n      pullRequest { id }\n    }\n  }\n`\n\nconst CONVERT_TO_DRAFT_MUTATION = `\n  mutation($pullRequestId: ID!) {\n    convertPullRequestToDraft(input: { pullRequestId: $pullRequestId }) {\n      pullRequest { id }\n    }\n  }\n`\n\nexport const updatePullRequestInputSchema = 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  title: z.string().optional().describe('New pull request title'),\n  body: z.string().optional().describe('New pull request description (supports Markdown)'),\n  state: z.enum(['open', 'closed']).optional().describe('Open or close the pull request'),\n  base: z.string().optional().describe('Change the base branch to merge into'),\n  draft: z.boolean().optional().describe('Convert to draft (true) or mark as ready for review (false)'),\n})\n\nexport const updatePullRequestDescription = 'Update a pull request — title, body, state, base branch, or draft status. Draft toggling uses the GitHub GraphQL API since the REST update endpoint does not support it'\n\n/** Not idempotent — each call applies a new revision. */\nexport async function updatePullRequestCore({ token, owner, repo, pullNumber, title, body, state, base, draft }: { token: string, owner: string, repo: string, pullNumber: number, title?: string, body?: string, state?: 'open' | 'closed', base?: string, draft?: boolean }) {\n  return withOctokit(token, async (octokit) => {\n  const hasRestUpdate = title !== undefined || body !== undefined || state !== undefined || base !== undefined\n  const { data } = hasRestUpdate\n    ? await octokit.rest.pulls.update({ owner, repo, pull_number: pullNumber, title, body, state, base })\n    : await octokit.rest.pulls.get({ owner, repo, pull_number: pullNumber })\n\n  if (draft !== undefined && draft !== data.draft) {\n    await octokit.graphql(draft ? CONVERT_TO_DRAFT_MUTATION : MARK_READY_FOR_REVIEW_MUTATION, { pullRequestId: data.node_id })\n  }\n\n  return {\n    number: data.number,\n    title: data.title,\n    state: data.state,\n    draft: draft ?? data.draft,\n    url: data.html_url,\n    base: data.base.ref,\n    updatedAt: data.updated_at,\n  }\n  })\n}\n\nexport const mergePullRequestInputSchema = 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\nexport const mergePullRequestDescription = 'Merge a pull request'\n\n/** Not idempotent — merging an already-merged PR returns an error from GitHub. */\nexport async function mergePullRequestCore({\n  token,\n  owner,\n  repo,\n  pullNumber,\n  commitTitle,\n  commitMessage,\n  mergeMethod,\n  coAuthors,\n}: {\n  token: string\n  owner: string\n  repo: string\n  pullNumber: number\n  commitTitle?: string\n  commitMessage?: string\n  mergeMethod: 'merge' | 'squash' | 'rebase'\n  coAuthors?: CommitIdentity[]\n}) {\n  return withOctokit(token, async (octokit) => {\n  const finalMessage = composeCommitMessage(commitMessage ?? '', coAuthors) || undefined\n  const { data } = await octokit.rest.pulls.merge({\n    owner,\n    repo,\n    pull_number: pullNumber,\n    commit_title: commitTitle,\n    commit_message: finalMessage,\n    merge_method: mergeMethod,\n  })\n  return {\n    merged: data.merged,\n    message: data.message,\n    sha: data.sha,\n  }\n  })\n}\n\nexport const addPullRequestCommentInputSchema = 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\nexport const addPullRequestCommentDescription = 'Add a comment to a pull request'\n\n/** Not idempotent — each call adds another comment. */\nexport async function addPullRequestCommentCore({ token, owner, repo, pullNumber, body }: { token: string, owner: string, repo: string, pullNumber: number, body: string }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const updatePullRequestCommentInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  commentId: z.number().describe('Comment ID (from the comment returned by addPullRequestComment)'),\n  body: z.string().describe('New comment text (supports Markdown)'),\n})\n\nexport const updatePullRequestCommentDescription = 'Update the body of a comment on a pull request'\n\n/** Not idempotent — each call applies a new revision. */\nexport async function updatePullRequestCommentCore({ token, owner, repo, commentId, body }: { token: string, owner: string, repo: string, commentId: number, body: string }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.updateComment({ owner, repo, comment_id: commentId, body })\n  return {\n    id: data.id,\n    url: data.html_url,\n    body: data.body,\n    updatedAt: data.updated_at,\n  }\n  })\n}\n\nexport const deletePullRequestCommentInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  commentId: z.number().describe('Comment ID to delete'),\n})\n\nexport const deletePullRequestCommentDescription = 'Delete a comment from a pull request permanently'\n\n/** Not idempotent — deleting an already-deleted comment returns 404 from GitHub. */\nexport async function deletePullRequestCommentCore({ token, owner, repo, commentId }: { token: string, owner: string, repo: string, commentId: number }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.issues.deleteComment({ owner, repo, comment_id: commentId })\n  return { deleted: true, commentId }\n  })\n}\n\nexport const listPullRequestFilesInputSchema = 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  includePatch: z.boolean().optional().default(false).describe('Include diff patches (token-heavy). Prefer false for an overview, then set true with filenames to fetch specific diffs'),\n  filenames: z.array(z.string()).optional().describe('If set, only return these file paths (useful with includePatch: true for targeted diffs)'),\n  perPage: z.number().optional().default(30).describe('Number of results to return (max 100)'),\n  page: pageSchema,\n})\n\nexport const listPullRequestFilesDescription = 'List files changed in a pull request with status and stats. Patches are omitted by default — set includePatch true (optionally with filenames) to fetch diffs. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listPullRequestFilesCore({ token, owner, repo, pullNumber, includePatch, filenames, perPage, page }: { token: string, owner: string, repo: string, pullNumber: number, includePatch: boolean, filenames?: string[], perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.pulls.listFiles({ owner, repo, pull_number: pullNumber, per_page: perPage, page })\n  const filenameSet = filenames?.length ? new Set(filenames) : null\n  return pagedList(data\n    .filter(file => !filenameSet || filenameSet.has(file.filename))\n    .map(file => ({\n      filename: file.filename,\n      status: file.status,\n      additions: file.additions,\n      deletions: file.deletions,\n      changes: file.changes,\n      ...includePatch && file.patch != null ? { patch: file.patch } : {},\n    })), perPage, page, data.length >= perPage)\n  })\n}\n\nexport const listPullRequestReviewsInputSchema = 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: pageSchema,\n})\n\nexport const listPullRequestReviewsDescription = 'List reviews on a pull request (approvals, change requests, and comments). When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listPullRequestReviewsCore({ token, owner, repo, pullNumber, perPage, page }: { token: string, owner: string, repo: string, pullNumber: number, perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.pulls.listReviews({ owner, repo, pull_number: pullNumber, per_page: perPage, page })\n  return pagedList(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  })), perPage, page, data.length >= perPage)\n  })\n}\n\nexport const createPullRequestReviewInputSchema = 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\nexport const createPullRequestReviewDescription = 'Submit a pull request review — approve, request changes, or comment with optional inline comments on specific lines'\n\n/** Not idempotent — each call submits a new review. */\nexport async function createPullRequestReviewCore({ 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  return withOctokit(token, async (octokit) => {\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}\n\nexport const listPullRequestReviewThreadsInputSchema = 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  status: z.enum(['unresolved', 'all']).optional().default('unresolved').describe('unresolved returns only threads awaiting action (default, saves tokens); all includes resolved threads'),\n  detail: detailSchema,\n  perPage: z.number().int().positive().max(50).optional().default(30).describe('Number of threads to fetch per call (max 50)'),\n  after: z.string().optional().describe('Cursor from a previous call (endCursor) to fetch the next page of threads'),\n})\n\nexport const listPullRequestReviewThreadsDescription = 'List review threads on a pull request with their comments, resolution state, and the IDs needed to reply (commentId) or resolve (threadId). Unresolved threads only by default (GitHub GraphQL API)'\n\nconst REVIEW_THREADS_QUERY = /* GraphQL */ `\n  query ReviewThreads($owner: String!, $name: String!, $number: Int!, $first: Int!, $after: String) {\n    repository(owner: $owner, name: $name) {\n      pullRequest(number: $number) {\n        reviewThreads(first: $first, after: $after) {\n          totalCount\n          pageInfo {\n            hasNextPage\n            endCursor\n          }\n          nodes {\n            id\n            isResolved\n            isOutdated\n            path\n            line\n            startLine\n            resolvedBy {\n              login\n            }\n            comments(first: 30) {\n              totalCount\n              nodes {\n                databaseId\n                body\n                createdAt\n                author {\n                  login\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n`\n\ntype ReviewThreadsQueryData = {\n  repository: {\n    pullRequest: {\n      reviewThreads: {\n        totalCount: number\n        pageInfo: { hasNextPage: boolean, endCursor: string | null }\n        nodes: Array<{\n          id: string\n          isResolved: boolean\n          isOutdated: boolean\n          path: string | null\n          line: number | null\n          startLine: number | null\n          resolvedBy: { login: string } | null\n          comments: {\n            totalCount: number\n            nodes: Array<{\n              databaseId: number | null\n              body: string\n              createdAt: string\n              author: { login: string } | null\n            }>\n          }\n        }>\n      } | null\n    } | null\n  } | null\n}\n\nexport async function listPullRequestReviewThreadsCore({ token, owner, repo, pullNumber, status, detail, perPage, after }: { token: string, owner: string, repo: string, pullNumber: number, status: 'unresolved' | 'all', detail: DetailLevel, perPage: number, after?: string }) {\n  return withOctokit(token, async (octokit) => {\n  const data = (await octokit.graphql(REVIEW_THREADS_QUERY, {\n    owner,\n    name: repo,\n    number: pullNumber,\n    first: perPage,\n    after,\n  })) as ReviewThreadsQueryData\n\n  if (!data.repository) {\n    return { error: `Repository not found: ${owner}/${repo}` }\n  }\n  const reviewThreads = data.repository.pullRequest?.reviewThreads\n  if (!reviewThreads) {\n    return { error: `Pull request not found: ${owner}/${repo}#${pullNumber}` }\n  }\n\n  const threads = reviewThreads.nodes\n    .filter(thread => status === 'all' || !thread.isResolved)\n    .map(thread => ({\n      threadId: thread.id,\n      isResolved: thread.isResolved,\n      isOutdated: thread.isOutdated,\n      path: thread.path,\n      line: thread.line,\n      startLine: thread.startLine,\n      resolvedBy: thread.resolvedBy?.login ?? null,\n      commentCount: thread.comments.totalCount,\n      comments: thread.comments.nodes.map(comment => ({\n        commentId: comment.databaseId,\n        author: comment.author?.login ?? null,\n        body: applyDetailBody(comment.body, detail),\n        createdAt: comment.createdAt,\n      })),\n    }))\n\n  return {\n    // Total across all threads on the PR, before the `status` filter.\n    totalCount: reviewThreads.totalCount,\n    returnedCount: threads.length,\n    hasNextPage: reviewThreads.pageInfo.hasNextPage,\n    endCursor: reviewThreads.pageInfo.endCursor,\n    threads,\n  }\n  })\n}\n\nexport const replyToReviewCommentInputSchema = 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  commentId: z.number().describe('commentId of the thread\\'s first comment, from listPullRequestReviewThreads'),\n  body: z.string().describe('Reply text (supports Markdown)'),\n})\n\nexport const replyToReviewCommentDescription = 'Reply to a pull request review comment, adding a message to its review thread'\n\n/** Not idempotent — each call posts a new reply. */\nexport async function replyToReviewCommentCore({ token, owner, repo, pullNumber, commentId, body }: { token: string, owner: string, repo: string, pullNumber: number, commentId: number, body: string }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.pulls.createReplyForReviewComment({\n    owner,\n    repo,\n    pull_number: pullNumber,\n    comment_id: commentId,\n    body,\n  })\n  return {\n    id: data.id,\n    url: data.html_url,\n    author: data.user?.login,\n    createdAt: data.created_at,\n  }\n  })\n}\n\nexport const resolveReviewThreadInputSchema = z.object({\n  threadId: z.string().describe('Review thread ID (threadId from listPullRequestReviewThreads)'),\n})\n\nexport const resolveReviewThreadDescription = 'Mark a pull request review thread as resolved'\n\nconst RESOLVE_THREAD_MUTATION = /* GraphQL */ `\n  mutation ResolveReviewThread($threadId: ID!) {\n    resolveReviewThread(input: { threadId: $threadId }) {\n      thread {\n        id\n        isResolved\n      }\n    }\n  }\n`\n\n/** Idempotent — resolving an already-resolved thread is a no-op on GitHub. */\nexport async function resolveReviewThreadCore({ token, threadId }: { token: string, threadId: string }) {\n  return withOctokit(token, async (octokit) => {\n  const data = (await octokit.graphql(RESOLVE_THREAD_MUTATION, { threadId })) as {\n    resolveReviewThread: { thread: { id: string, isResolved: boolean } | null } | null\n  }\n\n  const thread = data.resolveReviewThread?.thread\n  if (!thread) {\n    return { error: `Review thread not found: ${threadId}` }\n  }\n  return { threadId: thread.id, isResolved: thread.isResolved }\n  })\n}\n\nexport const requestReviewersInputSchema = 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  reviewers: z.array(z.string()).optional().describe('GitHub usernames to request a review from'),\n  teamReviewers: z.array(z.string()).optional().describe('Team slugs to request a review from'),\n})\n\nexport const requestReviewersDescription = 'Request reviews from users or teams on a pull request'\n\n/** Not idempotent — re-requesting an existing reviewer is a no-op on GitHub but still mutates. */\nexport async function requestReviewersCore({ token, owner, repo, pullNumber, reviewers, teamReviewers }: { token: string, owner: string, repo: string, pullNumber: number, reviewers?: string[], teamReviewers?: string[] }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.pulls.requestReviewers({\n    owner,\n    repo,\n    pull_number: pullNumber,\n    reviewers,\n    team_reviewers: teamReviewers,\n  })\n  return {\n    number: data.number,\n    url: data.html_url,\n    requestedReviewers: data.requested_reviewers?.map(r => r.login),\n    requestedTeams: data.requested_teams?.map(t => t.slug),\n  }\n  })\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { applyDetailBody, detailSchema, type DetailLevel } from './detail'\nimport { fetchAllPages, maxPagesSchema, pageSchema, pagedList } from './pagination'\n\nexport const listIssuesInputSchema = 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 per page (max 100)'),\n  page: pageSchema,\n  maxPages: maxPagesSchema,\n})\n\nexport const listIssuesDescription = 'List issues for a GitHub repository (excludes pull requests). When hasMore, pass nextPage or raise maxPages — do not repeat the same call.'\n\nexport async function listIssuesCore({ token, owner, repo, state, labels, perPage, page = 1, maxPages }: { token: string, owner: string, repo: string, state: 'open' | 'closed' | 'all', labels?: string, perPage: number, page?: number, maxPages?: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { items, hasMore } = await fetchAllPages(async currentPage => {\n    const { data } = await octokit.rest.issues.listForRepo({\n      owner,\n      repo,\n      state,\n      labels,\n      per_page: perPage,\n      page: currentPage,\n    })\n    return data\n  }, perPage, maxPages, page)\n  return pagedList(items\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    })), perPage, page, hasMore)\n  })\n}\n\nexport const getIssueInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  issueNumber: z.number().describe('Issue number'),\n  detail: detailSchema,\n})\n\nexport const getIssueDescription = 'Get detailed information about a specific issue. Body is truncated by default (detail: summary) — set detail full for the complete description'\n\nexport async function getIssueCore({ token, owner, repo, issueNumber, detail = 'summary' }: { token: string, owner: string, repo: string, issueNumber: number, detail?: DetailLevel }) {\n  return withOctokit(token, async (octokit) => {\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: applyDetailBody(data.body, detail),\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}\n\nexport const listIssueCommentsInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  issueNumber: z.number().describe('Issue number'),\n  perPage: z.number().optional().default(30).describe('Number of comments to return (max 100)'),\n  page: pageSchema,\n  detail: detailSchema,\n})\n\nexport const listIssueCommentsDescription = 'List comments on a GitHub issue. Bodies are truncated by default (detail: summary). When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listIssueCommentsCore({ token, owner, repo, issueNumber, perPage, page, detail = 'summary' }: { token: string, owner: string, repo: string, issueNumber: number, perPage: number, page: number, detail?: DetailLevel }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.listComments({ owner, repo, issue_number: issueNumber, per_page: perPage, page })\n  return pagedList(data.map(comment => ({\n    id: comment.id,\n    url: comment.html_url,\n    body: applyDetailBody(comment.body, detail),\n    author: comment.user?.login,\n    createdAt: comment.created_at,\n    updatedAt: comment.updated_at,\n  })), perPage, page, data.length >= perPage)\n  })\n}\n\nexport const createIssueInputSchema = 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\nexport const createIssueDescription = 'Create a new issue in a GitHub repository'\n\n/** Not idempotent — each call creates a new issue. */\nexport async function createIssueCore({ token, owner, repo, title, body, labels, assignees }: { token: string, owner: string, repo: string, title: string, body?: string, labels?: string[], assignees?: string[] }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const addIssueCommentInputSchema = 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\nexport const addIssueCommentDescription = 'Add a comment to a GitHub issue'\n\n/** Not idempotent — each call adds another comment. */\nexport async function addIssueCommentCore({ token, owner, repo, issueNumber, body }: { token: string, owner: string, repo: string, issueNumber: number, body: string }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const closeIssueInputSchema = 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\nexport const closeIssueDescription = 'Close an open GitHub issue'\n\n/** Idempotent when the issue is already closed. */\nexport async function closeIssueCore({ token, owner, repo, issueNumber, stateReason }: { token: string, owner: string, repo: string, issueNumber: number, stateReason: 'completed' | 'not_planned' }) {\n  return withOctokit(token, async (octokit) => {\n  const { data: existing } = await octokit.rest.issues.get({ owner, repo, issue_number: issueNumber })\n  if (existing.state === 'closed') {\n    return {\n      number: existing.number,\n      title: existing.title,\n      state: existing.state,\n      url: existing.html_url,\n      closedAt: existing.closed_at,\n    }\n  }\n\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}\n\nexport const updateIssueInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  issueNumber: z.number().describe('Issue number'),\n  title: z.string().optional().describe('New issue title'),\n  body: z.string().optional().describe('New issue description (supports Markdown)'),\n  state: z.enum(['open', 'closed']).optional().describe('Open or close the issue — set open to reopen a closed issue, closed to close it'),\n  stateReason: z.enum(['completed', 'not_planned', 'reopened']).optional().describe('Reason for the state change (ignored unless state changes)'),\n  labels: z.array(z.string()).optional().describe('Labels to set on the issue — replaces the existing set'),\n  milestone: z.number().nullable().optional().describe('Milestone number to associate, or null to remove the milestone'),\n  assignees: z.array(z.string()).optional().describe('GitHub usernames to set as assignees — replaces the existing set'),\n})\n\nexport const updateIssueDescription = 'Update a GitHub issue — title, body, labels, milestone, or assignees. Set state open to reopen a closed issue, or closed to close it'\n\n/** Not idempotent — each call applies a new revision. */\nexport async function updateIssueCore({ token, owner, repo, issueNumber, title, body, state, stateReason, labels, milestone, assignees }: { token: string, owner: string, repo: string, issueNumber: number, title?: string, body?: string, state?: 'open' | 'closed', stateReason?: 'completed' | 'not_planned' | 'reopened', labels?: string[], milestone?: number | null, assignees?: string[] }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.update({\n    owner,\n    repo,\n    issue_number: issueNumber,\n    title,\n    body,\n    state,\n    state_reason: stateReason,\n    labels,\n    milestone,\n    assignees,\n  })\n  return {\n    number: data.number,\n    title: data.title,\n    state: data.state,\n    url: data.html_url,\n    labels: data.labels.map(l => (typeof l === 'string' ? l : l.name)),\n    assignees: data.assignees?.map(a => a.login),\n    milestone: data.milestone?.number ?? null,\n    closedAt: data.closed_at,\n    updatedAt: data.updated_at,\n  }\n  })\n}\n\nexport const updateIssueCommentInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  commentId: z.number().describe('Comment ID (from listIssueComments)'),\n  body: z.string().describe('New comment text (supports Markdown)'),\n})\n\nexport const updateIssueCommentDescription = 'Update the body of a comment on a GitHub issue'\n\n/** Not idempotent — each call applies a new revision. */\nexport async function updateIssueCommentCore({ token, owner, repo, commentId, body }: { token: string, owner: string, repo: string, commentId: number, body: string }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.updateComment({ owner, repo, comment_id: commentId, body })\n  return {\n    id: data.id,\n    url: data.html_url,\n    body: data.body,\n    updatedAt: data.updated_at,\n  }\n  })\n}\n\nexport const deleteIssueCommentInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  commentId: z.number().describe('Comment ID to delete'),\n})\n\nexport const deleteIssueCommentDescription = 'Delete a comment from a GitHub issue permanently'\n\n/** Not idempotent — deleting an already-deleted comment returns 404 from GitHub. */\nexport async function deleteIssueCommentCore({ token, owner, repo, commentId }: { token: string, owner: string, repo: string, commentId: number }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.issues.deleteComment({ owner, repo, comment_id: commentId })\n  return { deleted: true, commentId }\n  })\n}\n\nexport const listLabelsInputSchema = 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: pageSchema,\n})\n\nexport const listLabelsDescription = 'List labels available in a GitHub repository. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listLabelsCore({ token, owner, repo, perPage, page }: { token: string, owner: string, repo: string, perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.listLabelsForRepo({ owner, repo, per_page: perPage, page })\n  return pagedList(data.map(label => ({\n    name: label.name,\n    color: label.color,\n    description: label.description,\n  })), perPage, page, data.length >= perPage)\n  })\n}\n\nexport const addLabelsInputSchema = 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\nexport const addLabelsDescription = 'Add labels to an issue or pull request'\n\n/** Not idempotent — re-adding labels is a no-op on GitHub but still mutates. */\nexport async function addLabelsCore({ token, owner, repo, issueNumber, labels }: { token: string, owner: string, repo: string, issueNumber: number, labels: string[] }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const removeLabelInputSchema = 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\nexport const removeLabelDescription = 'Remove a label from an issue or pull request'\n\n/** Not idempotent — removing a missing label returns 404 from GitHub. */\nexport async function removeLabelCore({ token, owner, repo, issueNumber, label }: { token: string, owner: string, repo: string, issueNumber: number, label: string }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.issues.removeLabel({ owner, repo, issue_number: issueNumber, name: label })\n  return { removed: true, label, issueNumber }\n  })\n}\n\nexport const createLabelInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  name: z.string().describe('Label name'),\n  color: z.string().describe('Label color as 6 hex digits without a leading # (e.g. \"d73a4a\")'),\n  description: z.string().optional().describe('Short label description'),\n})\n\nexport const createLabelDescription = 'Create a label in a GitHub repository'\n\n/** Not idempotent — creating a label that already exists returns 422 from GitHub. */\nexport async function createLabelCore({ token, owner, repo, name, color, description }: { token: string, owner: string, repo: string, name: string, color: string, description?: string }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.createLabel({ owner, repo, name, color, description })\n  return {\n    name: data.name,\n    color: data.color,\n    description: data.description,\n  }\n  })\n}\n\nexport const updateLabelInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  name: z.string().describe('Current label name'),\n  newName: z.string().optional().describe('New label name (rename)'),\n  color: z.string().optional().describe('New color as 6 hex digits without a leading #'),\n  description: z.string().nullable().optional().describe('New description, or null to clear it'),\n})\n\nexport const updateLabelDescription = 'Update a label in a GitHub repository — name, color, or description'\n\n/** Not idempotent — each call applies a new revision. */\nexport async function updateLabelCore({ token, owner, repo, name, newName, color, description }: { token: string, owner: string, repo: string, name: string, newName?: string, color?: string, description?: string | null }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.updateLabel({\n    owner,\n    repo,\n    name,\n    new_name: newName,\n    color,\n    description: description === null ? '' : description,\n  })\n  return {\n    name: data.name,\n    color: data.color,\n    description: data.description,\n  }\n  })\n}\n\nexport const deleteLabelInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  name: z.string().describe('Label name to delete'),\n})\n\nexport const deleteLabelDescription = 'Delete a label from a GitHub repository permanently'\n\n/** Not idempotent — deleting a missing label returns 404 from GitHub. */\nexport async function deleteLabelCore({ token, owner, repo, name }: { token: string, owner: string, repo: string, name: string }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.issues.deleteLabel({ owner, repo, name })\n  return { deleted: true, name }\n  })\n}\n\nexport const addAssigneesInputSchema = 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  assignees: z.array(z.string()).describe('GitHub usernames to assign'),\n})\n\nexport const addAssigneesDescription = 'Assign users to an issue or pull request'\n\n/** Not idempotent — re-adding an existing assignee is a no-op on GitHub but still mutates. */\nexport async function addAssigneesCore({ token, owner, repo, issueNumber, assignees }: { token: string, owner: string, repo: string, issueNumber: number, assignees: string[] }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.addAssignees({ owner, repo, issue_number: issueNumber, assignees })\n  return {\n    number: data.number,\n    assignees: data.assignees?.map(a => a.login),\n  }\n  })\n}\n\nexport const removeAssigneesInputSchema = 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  assignees: z.array(z.string()).describe('GitHub usernames to unassign'),\n})\n\nexport const removeAssigneesDescription = 'Remove assignees from an issue or pull request'\n\n/** Idempotent — removing an assignee that is not assigned is a no-op on GitHub. */\nexport async function removeAssigneesCore({ token, owner, repo, issueNumber, assignees }: { token: string, owner: string, repo: string, issueNumber: number, assignees: string[] }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.issues.removeAssignees({ owner, repo, issue_number: issueNumber, assignees })\n  return {\n    number: data.number,\n    assignees: data.assignees?.map(a => a.login),\n  }\n  })\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { pageSchema, pagingFields } from './pagination'\n\nconst REACTION_CONTENTS = ['+1', '-1', 'laugh', 'confused', 'heart', 'hooray', 'rocket', 'eyes'] as const\n\nexport type ReactionContent = typeof REACTION_CONTENTS[number]\n\nconst reactionContentSchema = z.enum(REACTION_CONTENTS)\n\ntype ReactionListItem = { content: string, user?: { login: string } | null }\n\nfunction shapeReactions(reactions: ReactionListItem[], perPage: number, page: number) {\n  const counts: Record<string, number> = {}\n  for (const reaction of reactions) counts[reaction.content] = (counts[reaction.content] ?? 0) + 1\n  return {\n    total: reactions.length,\n    counts,\n    reactions: reactions.map(reaction => ({ content: reaction.content, user: reaction.user?.login })),\n    ...pagingFields(page, perPage, reactions.length, reactions.length >= perPage),\n  }\n}\n\nexport const listIssueReactionsInputSchema = 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 — pull request conversations share the issue numbering'),\n  content: reactionContentSchema.optional().describe('Only return reactions of this type'),\n  perPage: z.number().optional().default(30).describe('Number of reactions to return (max 100)'),\n  page: pageSchema,\n})\n\nexport const listIssueReactionsDescription = 'List reactions on an issue or pull request conversation, with per-emoji counts for the returned page. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listIssueReactionsCore({ token, owner, repo, issueNumber, content, perPage, page }: { token: string, owner: string, repo: string, issueNumber: number, content?: ReactionContent, perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.reactions.listForIssue({\n    owner,\n    repo,\n    issue_number: issueNumber,\n    content,\n    per_page: perPage,\n    page,\n  })\n  return shapeReactions(data, perPage, page)\n  })\n}\n\nexport const addIssueReactionInputSchema = 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 — pull request conversations share the issue numbering'),\n  content: reactionContentSchema.describe('Reaction to add'),\n})\n\nexport const addIssueReactionDescription = 'React to an issue or pull request with an emoji. Prefer this over posting a comment to acknowledge a report without adding noise to the thread'\n\n/** Idempotent — GitHub returns the existing reaction when the user already reacted with the same content. */\nexport async function addIssueReactionCore({ token, owner, repo, issueNumber, content }: { token: string, owner: string, repo: string, issueNumber: number, content: ReactionContent }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.reactions.createForIssue({\n    owner,\n    repo,\n    issue_number: issueNumber,\n    content,\n  })\n  return {\n    id: data.id,\n    content: data.content,\n    user: data.user?.login,\n    issueNumber,\n  }\n  })\n}\n\nexport const listCommentReactionsInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  commentId: z.number().describe('Issue or pull request comment ID (from getIssueContext or addIssueComment)'),\n  content: reactionContentSchema.optional().describe('Only return reactions of this type'),\n  perPage: z.number().optional().default(30).describe('Number of reactions to return (max 100)'),\n  page: pageSchema,\n})\n\nexport const listCommentReactionsDescription = 'List reactions on an issue or pull request comment, with per-emoji counts for the returned page. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listCommentReactionsCore({ token, owner, repo, commentId, content, perPage, page }: { token: string, owner: string, repo: string, commentId: number, content?: ReactionContent, perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.reactions.listForIssueComment({\n    owner,\n    repo,\n    comment_id: commentId,\n    content,\n    per_page: perPage,\n    page,\n  })\n  return shapeReactions(data, perPage, page)\n  })\n}\n\nexport const addCommentReactionInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  commentId: z.number().describe('Issue or pull request comment ID to react to'),\n  content: reactionContentSchema.describe('Reaction to add'),\n})\n\nexport const addCommentReactionDescription = 'React to an issue or pull request comment with an emoji. Prefer this over a reply when acknowledging a comment'\n\n/** Idempotent — GitHub returns the existing reaction when the user already reacted with the same content. */\nexport async function addCommentReactionCore({ token, owner, repo, commentId, content }: { token: string, owner: string, repo: string, commentId: number, content: ReactionContent }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.reactions.createForIssueComment({\n    owner,\n    repo,\n    comment_id: commentId,\n    content,\n  })\n  return {\n    id: data.id,\n    content: data.content,\n    user: data.user?.login,\n    commentId,\n  }\n  })\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { applyDetailBody, detailSchema, type DetailLevel } from './detail'\nimport type { Octokit } from '../types'\n\nexport const DISCUSSION_CATEGORIES_QUERY = `\n  query ($owner: String!, $name: String!) {\n    repository(owner: $owner, name: $name) {\n      discussionCategories(first: 100) {\n        nodes {\n          id\n          name\n        }\n      }\n    }\n  }\n`\n\nexport const LIST_DISCUSSIONS_QUERY = `\n  query ($owner: String!, $name: String!, $first: Int!, $after: String, $categoryId: ID) {\n    repository(owner: $owner, name: $name) {\n      discussions(first: $first, after: $after, categoryId: $categoryId, orderBy: { field: UPDATED_AT, direction: DESC }) {\n        pageInfo {\n          hasNextPage\n          endCursor\n        }\n        nodes {\n          id\n          number\n          title\n          url\n          createdAt\n          updatedAt\n          isAnswered\n          author {\n            login\n          }\n          category {\n            name\n          }\n        }\n      }\n    }\n  }\n`\n\nexport const GET_DISCUSSION_QUERY = `\n  query ($owner: String!, $name: String!, $number: Int!) {\n    repository(owner: $owner, name: $name) {\n      discussion(number: $number) {\n        id\n        number\n        title\n        body\n        url\n        createdAt\n        updatedAt\n        isAnswered\n        author {\n          login\n        }\n        category {\n          name\n        }\n        comments {\n          totalCount\n        }\n      }\n    }\n  }\n`\n\nexport const DISCUSSION_ID_QUERY = `\n  query ($owner: String!, $name: String!, $number: Int!) {\n    repository(owner: $owner, name: $name) {\n      discussion(number: $number) {\n        id\n      }\n    }\n  }\n`\n\nexport const ADD_DISCUSSION_COMMENT_MUTATION = `\n  mutation ($discussionId: ID!, $body: String!) {\n    addDiscussionComment(input: { discussionId: $discussionId, body: $body }) {\n      comment {\n        id\n        url\n        body\n        createdAt\n        author {\n          login\n        }\n      }\n    }\n  }\n`\n\ntype DiscussionNode = {\n  id: string\n  number: number\n  title: string\n  url: string\n  createdAt: string\n  updatedAt: string\n  isAnswered: boolean | null\n  author: null | { login: string }\n  category: null | { name: string }\n}\n\ntype CategoriesQueryData = {\n  repository: null | {\n    discussionCategories: { nodes: Array<{ id: string, name: string }> }\n  }\n}\n\ntype ListDiscussionsQueryData = {\n  repository: null | {\n    discussions: {\n      pageInfo: { hasNextPage: boolean, endCursor: string | null }\n      nodes: DiscussionNode[]\n    }\n  }\n}\n\ntype GetDiscussionQueryData = {\n  repository: null | {\n    discussion: null | (DiscussionNode & { body: string, comments: { totalCount: number } })\n  }\n}\n\ntype DiscussionIdQueryData = {\n  repository: null | { discussion: null | { id: string } }\n}\n\ntype AddDiscussionCommentMutationData = {\n  addDiscussionComment: {\n    comment: {\n      id: string\n      url: string\n      body: string\n      createdAt: string\n      author: null | { login: string }\n    }\n  }\n}\n\nasync function resolveCategoryId(octokit: Octokit, owner: string, repo: string, category: string) {\n  const data = (await octokit.graphql(DISCUSSION_CATEGORIES_QUERY, { owner, name: repo })) as CategoriesQueryData\n  const nodes = data.repository?.discussionCategories.nodes ?? []\n  const match = nodes.find(node => node.name.toLowerCase() === category.toLowerCase())\n  return { id: match?.id, available: nodes.map(node => node.name) }\n}\n\nexport const listDiscussionsInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  category: z.string().optional().describe('Discussion category name (for example \"Q&A\" or \"Ideas\") — omit for all categories'),\n  perPage: z.number().optional().default(20).describe('Number of discussions to return (max 100)'),\n  after: z.string().optional().describe('Cursor from a previous call (endCursor) to fetch the next page'),\n})\n\nexport const listDiscussionsDescription = 'List discussions in a GitHub repository, most recently updated first, optionally filtered by category (GitHub GraphQL API)'\n\nexport async function listDiscussionsCore({ token, owner, repo, category, perPage, after }: { token: string, owner: string, repo: string, category?: string, perPage: number, after?: string }) {\n  return withOctokit(token, async (octokit) => {\n\n  let categoryId: string | undefined\n  if (category) {\n    const { id, available } = await resolveCategoryId(octokit, owner, repo, category)\n    if (!id) return { error: `Unknown discussion category \"${category}\". Available categories: ${available.join(', ')}` }\n    categoryId = id\n  }\n\n  const data = (await octokit.graphql(LIST_DISCUSSIONS_QUERY, {\n    owner,\n    name: repo,\n    first: perPage,\n    after,\n    categoryId,\n  })) as ListDiscussionsQueryData\n\n  if (!data.repository) return { error: `Repository not found, or discussions are disabled on ${owner}/${repo}` }\n\n  const { pageInfo, nodes } = data.repository.discussions\n  return {\n    hasNextPage: pageInfo.hasNextPage,\n    endCursor: pageInfo.endCursor,\n    discussions: nodes.map(node => ({\n      id: node.id,\n      number: node.number,\n      title: node.title,\n      url: node.url,\n      author: node.author?.login ?? null,\n      category: node.category?.name ?? null,\n      answerChosen: node.isAnswered,\n      createdAt: node.createdAt,\n      updatedAt: node.updatedAt,\n    })),\n  }\n  })\n}\n\nexport const getDiscussionInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  discussionNumber: z.number().describe('Discussion number'),\n  detail: detailSchema,\n})\n\nexport const getDiscussionDescription = 'Get a GitHub discussion by number. Body is truncated by default (detail: summary) — set detail full for the complete text (GitHub GraphQL API)'\n\nexport async function getDiscussionCore({ token, owner, repo, discussionNumber, detail = 'summary' }: { token: string, owner: string, repo: string, discussionNumber: number, detail?: DetailLevel }) {\n  return withOctokit(token, async (octokit) => {\n  const data = (await octokit.graphql(GET_DISCUSSION_QUERY, {\n    owner,\n    name: repo,\n    number: discussionNumber,\n  })) as GetDiscussionQueryData\n\n  const discussion = data.repository?.discussion\n  if (!discussion) return { error: `Discussion #${discussionNumber} not found on ${owner}/${repo}` }\n\n  return {\n    id: discussion.id,\n    number: discussion.number,\n    title: discussion.title,\n    body: applyDetailBody(discussion.body, detail),\n    url: discussion.url,\n    author: discussion.author?.login ?? null,\n    category: discussion.category?.name ?? null,\n    answerChosen: discussion.isAnswered,\n    commentsCount: discussion.comments.totalCount,\n    createdAt: discussion.createdAt,\n    updatedAt: discussion.updatedAt,\n  }\n  })\n}\n\nexport const addDiscussionCommentInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  discussionNumber: z.number().describe('Discussion number'),\n  body: z.string().describe('Comment text (supports Markdown)'),\n})\n\nexport const addDiscussionCommentDescription = 'Add a comment to a GitHub discussion (GitHub GraphQL API)'\n\n/** Not idempotent — each call adds another comment. */\nexport async function addDiscussionCommentCore({ token, owner, repo, discussionNumber, body }: { token: string, owner: string, repo: string, discussionNumber: number, body: string }) {\n  return withOctokit(token, async (octokit) => {\n  const lookup = (await octokit.graphql(DISCUSSION_ID_QUERY, {\n    owner,\n    name: repo,\n    number: discussionNumber,\n  })) as DiscussionIdQueryData\n\n  const discussionId = lookup.repository?.discussion?.id\n  if (!discussionId) return { error: `Discussion #${discussionNumber} not found on ${owner}/${repo}` }\n\n  const data = (await octokit.graphql(ADD_DISCUSSION_COMMENT_MUTATION, {\n    discussionId,\n    body,\n  })) as AddDiscussionCommentMutationData\n\n  const comment = data.addDiscussionComment.comment\n  return {\n    id: comment.id,\n    url: comment.url,\n    body: comment.body,\n    author: comment.author?.login ?? null,\n    createdAt: comment.createdAt,\n  }\n  })\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { pageSchema, pagedList } from './pagination'\n\nexport const listNotificationsInputSchema = z.object({\n  all: z.boolean().optional().default(false).describe('Include notifications already marked as read'),\n  participating: z.boolean().optional().default(false).describe('Only notifications where the authenticated user is directly participating or mentioned'),\n  perPage: z.number().optional().default(20).describe('Number of notifications to return (max 50)'),\n  page: pageSchema,\n})\n\nexport const listNotificationsDescription = 'List notification threads for the authenticated user. Unread only by default — set all true to include read threads. Requires a token with notifications access. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listNotificationsCore({ token, all, participating, perPage, page }: { token: string, all: boolean, participating: boolean, perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.activity.listNotificationsForAuthenticatedUser({\n    all,\n    participating,\n    per_page: perPage,\n    page,\n  })\n  return pagedList(data.map(thread => ({\n    threadId: thread.id,\n    repository: thread.repository.full_name,\n    subject: {\n      title: thread.subject.title,\n      type: thread.subject.type,\n      url: thread.subject.url,\n    },\n    reason: thread.reason,\n    unread: thread.unread,\n    updatedAt: thread.updated_at,\n  })), perPage, page, data.length >= perPage)\n  })\n}\n\nexport const markNotificationReadInputSchema = z.object({\n  threadId: z.string().describe('Notification thread ID (from listNotifications)'),\n})\n\nexport const markNotificationReadDescription = 'Mark a single notification thread as read'\n\n/** Idempotent — marking an already-read thread is a no-op on GitHub. */\nexport async function markNotificationReadCore({ token, threadId }: { token: string, threadId: string }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.activity.markThreadAsRead({ thread_id: Number(threadId) })\n  return { marked: true, threadId }\n  })\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\n\nconst MAX_FRAGMENT_LENGTH = 300\n\nfunction truncateFragment(fragment: string): string {\n  if (fragment.length <= MAX_FRAGMENT_LENGTH) return fragment\n  return `${fragment.slice(0, MAX_FRAGMENT_LENGTH)}…`\n}\n\nexport const searchCodeInputSchema = 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\nexport const searchCodeDescription = 'Search for code in GitHub repositories. Use qualifiers like \"repo:owner/name\" to scope the search. Results include matching text snippets when GitHub returns them.'\n\nexport async function searchCodeCore({ token, query, perPage }: { token: string, query: string, perPage: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.search.code({\n    q: query,\n    per_page: perPage,\n    mediaType: { format: 'text-match' },\n  })\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      textMatches: item.text_matches?.map(match => ({\n        fragment: truncateFragment(match.fragment ?? ''),\n      })),\n    })),\n  }\n  })\n}\n\nexport const searchRepositoriesInputSchema = 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\nexport const searchRepositoriesDescription = 'Search for GitHub repositories by keyword, topic, language, or other qualifiers'\n\nexport async function searchRepositoriesCore({ token, query, perPage, sort, order }: { token: string, query: string, perPage: number, sort?: 'stars' | 'forks' | 'help-wanted-issues' | 'updated', order: 'asc' | 'desc' }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const searchIssuesInputSchema = z.object({\n  query: z.string().describe('Search query. Supports GitHub search qualifiers, e.g. \"repo:owner/name is:open label:bug\". Returns both issues and pull requests by default — use type:pr or is:pr to scope to pull requests, or type:issue / is:issue to exclude them'),\n  perPage: z.number().optional().default(10).describe('Number of results to return (max 30)'),\n  sort: z.enum(['comments', 'reactions', 'created', 'updated', 'interactions']).optional().describe('Sort field'),\n  order: z.enum(['asc', 'desc']).optional().default('desc').describe('Sort order'),\n})\n\nexport const searchIssuesDescription = 'Search for issues and pull requests across GitHub using search qualifiers like \"repo:owner/name is:open\"'\n\nexport async function searchIssuesCore({ token, query, perPage, sort, order }: { token: string, query: string, perPage: number, sort?: 'comments' | 'reactions' | 'created' | 'updated' | 'interactions', order: 'asc' | 'desc' }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.search.issuesAndPullRequests({ q: query, per_page: perPage, sort, order })\n  return {\n    totalCount: data.total_count,\n    items: data.items.map(item => ({\n      number: item.number,\n      title: item.title,\n      state: item.state,\n      url: item.html_url,\n      repository: item.repository_url.split('/repos/').at(-1),\n      author: item.user?.login,\n      labels: item.labels.map(l => (typeof l === 'string' ? l : l.name)),\n      comments: item.comments,\n      createdAt: item.created_at,\n      updatedAt: item.updated_at,\n      isPullRequest: Boolean(item.pull_request),\n    })),\n  }\n  })\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { fetchAllPages, maxPagesSchema, pageSchema, pagedList } from './pagination'\n\nexport const 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\nexport const listCommitsInputSchema = 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 per page (max 100)'),\n  page: pageSchema,\n  maxPages: maxPagesSchema,\n})\n\nexport const listCommitsDescription =\n  'List commits for a GitHub repository. Filter with path, author, since, or until instead of paging the full history. When hasMore, pass nextPage or raise maxPages — do not repeat the same call. For line-by-line attribution, use getBlame.'\n\nexport async function listCommitsCore({ token, owner, repo, path, sha, author, since, until, perPage, page = 1, maxPages }: { token: string, owner: string, repo: string, path?: string, sha?: string, author?: string, since?: string, until?: string, perPage: number, page?: number, maxPages?: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { items, hasMore } = await fetchAllPages(async currentPage => {\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      page: currentPage,\n    })\n    return data\n  }, perPage, maxPages, page)\n  return pagedList(items.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  })), perPage, page, hasMore)\n  })\n}\n\nexport const getCommitInputSchema = 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  includePatch: z.boolean().optional().default(false).describe('Include diff patches for changed files (token-heavy). Prefer false unless you need the diffs'),\n})\n\nexport const getCommitDescription = 'Get detailed information about a specific commit, including the list of files changed with additions and deletions. Patches are omitted by default — set includePatch true to include diffs'\n\nexport async function getCommitCore({ token, owner, repo, ref, includePatch }: { token: string, owner: string, repo: string, ref: string, includePatch: boolean }) {\n  return withOctokit(token, async (octokit) => {\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      ...includePatch && file.patch != null ? { patch: file.patch } : {},\n    })),\n  }\n  })\n}\n\nexport const getBlameInputSchema = 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\nexport const getBlameDescription =\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\nexport async function getBlameCore({ 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  return withOctokit(token, async (octokit) => {\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}\n\nexport const compareCommitsInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  base: z.string().describe('Base branch, tag, or commit SHA'),\n  head: z.string().describe('Head branch, tag, or commit SHA to compare against base'),\n  includePatch: z.boolean().optional().default(false).describe('Include diff patches for changed files (token-heavy). Prefer false unless you need the diffs'),\n})\n\nexport const compareCommitsDescription = 'Compare two branches, tags, or commits — shows ahead/behind counts, the commits in between, and the files that differ. Patches are omitted by default — set includePatch true to include diffs'\n\nexport async function compareCommitsCore({ token, owner, repo, base, head, includePatch }: { token: string, owner: string, repo: string, base: string, head: string, includePatch: boolean }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.repos.compareCommitsWithBasehead({ owner, repo, basehead: `${base}...${head}` })\n  return {\n    status: data.status,\n    aheadBy: data.ahead_by,\n    behindBy: data.behind_by,\n    totalCommits: data.total_commits,\n    url: data.html_url,\n    commits: data.commits.map(commit => ({\n      sha: commit.sha,\n      message: commit.commit.message,\n      author: commit.commit.author?.name,\n      authorLogin: commit.author?.login,\n    })),\n    files: data.files?.map(file => ({\n      filename: file.filename,\n      status: file.status,\n      additions: file.additions,\n      deletions: file.deletions,\n      ...includePatch && file.patch != null ? { patch: file.patch } : {},\n    })),\n  }\n  })\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { pageSchema, pagedList } from './pagination'\n\nexport const listGistsInputSchema = 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: pageSchema,\n})\n\nexport const listGistsDescription = 'List gists for the authenticated user or a specific user. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listGistsCore({ token, username, perPage, page }: { token: string, username?: string, perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\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 pagedList(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  })), perPage, page, data.length >= perPage)\n  })\n}\n\nexport const getGistInputSchema = z.object({\n  gistId: z.string().describe('Gist ID'),\n})\n\nexport const getGistDescription = 'Get a gist by ID, including file contents'\n\nexport async function getGistCore({ token, gistId }: { token: string, gistId: string }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const listGistCommentsInputSchema = 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: pageSchema,\n})\n\nexport const listGistCommentsDescription = 'List comments on a gist. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listGistCommentsCore({ token, gistId, perPage, page }: { token: string, gistId: string, perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.gists.listComments({ gist_id: gistId, per_page: perPage, page })\n  return pagedList(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  })), perPage, page, data.length >= perPage)\n  })\n}\n\nexport const createGistInputSchema = 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\nexport const createGistDescription = 'Create a new gist with one or more files'\n\n/** Not idempotent — each call creates a new gist. */\nexport async function createGistCore({ token, description, files, isPublic }: { token: string, description?: string, files: Record<string, { content: string }>, isPublic: boolean }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const updateGistInputSchema = 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\nexport const updateGistDescription = 'Update an existing gist — edit description, update files, or remove files'\n\n/** Not idempotent — each call applies a new revision. */\nexport async function updateGistCore({ token, gistId, description, files, filesToDelete }: { token: string, gistId: string, description?: string, files?: Record<string, { content: string }>, filesToDelete?: string[] }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const deleteGistInputSchema = z.object({\n  gistId: z.string().describe('Gist ID to delete'),\n})\n\nexport const deleteGistDescription = 'Delete a gist permanently'\n\n/** Not idempotent — deleting an already-deleted gist returns 404 from GitHub. */\nexport async function deleteGistCore({ token, gistId }: { token: string, gistId: string }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.gists.delete({ gist_id: gistId })\n  return { deleted: true, gistId }\n  })\n}\n\nexport const createGistCommentInputSchema = z.object({\n  gistId: z.string().describe('Gist ID'),\n  body: z.string().describe('Comment text (supports Markdown)'),\n})\n\nexport const createGistCommentDescription = 'Add a comment to a gist'\n\n/** Not idempotent — each call adds another comment. */\nexport async function createGistCommentCore({ token, gistId, body }: { token: string, gistId: string, body: string }) {\n  return withOctokit(token, async (octokit) => {\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}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { fetchAllPages, hasMoreByTotal, maxPagesSchema, pageSchema, pagingFields } from './pagination'\n\nexport const listWorkflowsInputSchema = 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: pageSchema,\n})\n\nexport const listWorkflowsDescription = 'List GitHub Actions workflows in a repository. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listWorkflowsCore({ token, owner, repo, perPage, page }: { token: string, owner: string, repo: string, perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\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    ...pagingFields(page, perPage, data.workflows.length, hasMoreByTotal(page, perPage, data.workflows.length, data.total_count)),\n  }\n  })\n}\n\ntype WorkflowRunStatus = 'completed' | 'action_required' | 'cancelled' | 'failure' | 'neutral' | 'skipped' | 'stale' | 'success' | 'timed_out' | 'in_progress' | 'queued' | 'requested' | 'waiting' | 'pending'\n\nexport const listWorkflowRunsInputSchema = 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 per page (max 100)'),\n  page: pageSchema,\n  maxPages: maxPagesSchema,\n})\n\nexport const listWorkflowRunsDescription = 'List workflow runs for a repository, optionally filtered by workflow, branch, status, or event. When hasMore, pass nextPage or raise maxPages — do not repeat the same call.'\n\nexport async function listWorkflowRunsCore({ token, owner, repo, workflowId, branch, event, status, perPage, page, maxPages }: { token: string, owner: string, repo: string, workflowId?: string | number, branch?: string, event?: string, status?: WorkflowRunStatus, perPage: number, page: number, maxPages?: number }) {\n  return withOctokit(token, async (octokit) => {\n  let totalCount = 0\n  const { items } = await fetchAllPages(async currentPage => {\n    const { data } = workflowId\n      ? await octokit.rest.actions.listWorkflowRuns({ owner, repo, workflow_id: workflowId, per_page: perPage, page: currentPage, ...branch && { branch }, ...event && { event }, ...status && { status } })\n      : await octokit.rest.actions.listWorkflowRunsForRepo({ owner, repo, per_page: perPage, page: currentPage, ...branch && { branch }, ...event && { event }, ...status && { status } })\n    totalCount = data.total_count\n    return data.workflow_runs\n  }, perPage, maxPages, page)\n\n  return {\n    totalCount,\n    runs: items.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    ...pagingFields(page, perPage, items.length, hasMoreByTotal(page, perPage, items.length, totalCount)),\n  }\n  })\n}\n\nexport const getWorkflowRunInputSchema = 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\nexport const getWorkflowRunDescription = 'Get details of a specific workflow run including status, timing, and trigger info'\n\nexport async function getWorkflowRunCore({ token, owner, repo, runId }: { token: string, owner: string, repo: string, runId: number }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const listWorkflowJobsInputSchema = 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: pageSchema,\n})\n\nexport const listWorkflowJobsDescription = 'List jobs for a workflow run, including step-level status and timing. When hasMore, pass nextPage — do not repeat the same call.'\n\nexport async function listWorkflowJobsCore({ token, owner, repo, runId, filter, perPage, page }: { token: string, owner: string, repo: string, runId: number, filter: 'latest' | 'all', perPage: number, page: number }) {\n  return withOctokit(token, async (octokit) => {\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    ...pagingFields(page, perPage, data.jobs.length, hasMoreByTotal(page, perPage, data.jobs.length, data.total_count)),\n  }\n  })\n}\n\nexport const getWorkflowJobLogsInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  jobId: z.number().describe('Workflow job ID (from listWorkflowJobs or getCiFailureContext)'),\n  maxLines: z.number().int().positive().max(2000).optional().default(200).describe('Return only the last N log lines (default 200, max 2000). Failures surface at the end of a log, so the tail is usually enough'),\n})\n\nexport const getWorkflowJobLogsDescription = 'Get the log output of a workflow job to diagnose failures. Returns the last maxLines lines (default 200) with per-line timestamps stripped to save tokens'\n\nconst LOG_TIMESTAMP_PREFIX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d+Z /\n\n/**\n * Tail-truncate a raw job log and strip the ISO timestamp GitHub prefixes on\n * every line (~29 tokens-worth of noise per line the model never needs).\n */\nexport function shapeJobLog(raw: string, maxLines: number) {\n  const lines = raw.replace(/\\r\\n/g, '\\n').replace(/\\n+$/, '').split('\\n')\n  const tail = lines.slice(-maxLines).map(line => line.replace(LOG_TIMESTAMP_PREFIX, ''))\n  return {\n    totalLines: lines.length,\n    returnedLines: tail.length,\n    omittedLines: lines.length - tail.length,\n    log: tail.join('\\n'),\n  }\n}\n\nexport async function getWorkflowJobLogsCore({ token, owner, repo, jobId, maxLines }: { token: string, owner: string, repo: string, jobId: number, maxLines: number }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.actions.downloadJobLogsForWorkflowRun({ owner, repo, job_id: jobId })\n  return { jobId, ...shapeJobLog(String(data), maxLines) }\n  })\n}\n\nexport const triggerWorkflowInputSchema = 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\nexport const triggerWorkflowDescription = 'Trigger a workflow via workflow_dispatch event'\n\n/** Not idempotent — each call starts a new workflow run. */\nexport async function triggerWorkflowCore({ token, owner, repo, workflowId, ref, inputs }: { token: string, owner: string, repo: string, workflowId: string | number, ref: string, inputs?: Record<string, string> }) {\n  return withOctokit(token, async (octokit) => {\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}\n\nexport const cancelWorkflowRunInputSchema = 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\nexport const cancelWorkflowRunDescription = 'Cancel an in-progress workflow run'\n\n/** Not idempotent — cancelling an already-finished run is a no-op on GitHub but still mutates. */\nexport async function cancelWorkflowRunCore({ token, owner, repo, runId }: { token: string, owner: string, repo: string, runId: number }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.actions.cancelWorkflowRun({ owner, repo, run_id: runId })\n  return { cancelled: true, runId }\n  })\n}\n\nexport const rerunWorkflowRunInputSchema = 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\nexport const rerunWorkflowRunDescription = 'Re-run a workflow run, optionally only the failed jobs'\n\n/** Not idempotent — each call starts another run attempt. */\nexport async function rerunWorkflowRunCore({ token, owner, repo, runId, onlyFailedJobs }: { token: string, owner: string, repo: string, runId: number, onlyFailedJobs: boolean }) {\n  return withOctokit(token, async (octokit) => {\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}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { fetchAllPages, hasMoreByTotal, maxPagesSchema, pageSchema, pagingFields } from './pagination'\n\nexport const listCheckRunsInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  ref: z.string().describe('Git ref: branch, tag, or commit SHA'),\n  perPage: z.number().optional().default(30).describe('Number of results to return per page (max 100)'),\n  page: pageSchema,\n  maxPages: maxPagesSchema,\n})\n\nexport const listCheckRunsDescription = 'List check runs (Checks API — GitHub Actions and other CI providers) for a commit, branch, or tag. When hasMore, pass nextPage or raise maxPages — do not repeat the same call.'\n\nexport async function listCheckRunsCore({ token, owner, repo, ref, perPage, page = 1, maxPages }: { token: string, owner: string, repo: string, ref: string, perPage: number, page?: number, maxPages?: number }) {\n  return withOctokit(token, async (octokit) => {\n  let totalCount = 0\n  const { items } = await fetchAllPages(async currentPage => {\n    const { data } = await octokit.rest.checks.listForRef({ owner, repo, ref, per_page: perPage, page: currentPage })\n    totalCount = data.total_count\n    return data.check_runs\n  }, perPage, maxPages, page)\n  return {\n    totalCount,\n    checkRuns: items.map(run => ({\n      id: run.id,\n      name: run.name,\n      status: run.status,\n      conclusion: run.conclusion,\n      url: run.html_url,\n      startedAt: run.started_at,\n      completedAt: run.completed_at,\n    })),\n    ...pagingFields(page, perPage, items.length, hasMoreByTotal(page, perPage, items.length, totalCount)),\n  }\n  })\n}\n\nexport const getCombinedStatusInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  ref: z.string().describe('Git ref: branch, tag, or commit SHA'),\n})\n\nexport const getCombinedStatusDescription = 'Get the combined commit status (Statuses API — legacy CI integrations) for a commit, branch, or tag'\n\nexport async function getCombinedStatusCore({ token, owner, repo, ref }: { token: string, owner: string, repo: string, ref: string }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.repos.getCombinedStatusForRef({ owner, repo, ref })\n  return {\n    state: data.state,\n    totalCount: data.total_count,\n    statuses: data.statuses.map(status => ({\n      context: status.context,\n      state: status.state,\n      description: status.description,\n      url: status.target_url,\n    })),\n  }\n  })\n}\n","import { z } from 'zod'\nimport { withOctokit } from '../client'\nimport { applyDetailBody, detailSchema, type DetailLevel } from './detail'\nimport { fetchAllPages, maxPagesSchema, pageSchema, pagedList } from './pagination'\n\nexport const listReleasesInputSchema = 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 per page (max 100)'),\n  page: pageSchema,\n  maxPages: maxPagesSchema,\n  detail: detailSchema,\n})\n\nexport const listReleasesDescription = 'List releases for a GitHub repository, newest first (includes drafts and prereleases). Bodies truncated by default (detail: summary). When hasMore, pass nextPage or raise maxPages — do not repeat the same call.'\n\nexport async function listReleasesCore({ token, owner, repo, perPage, page = 1, maxPages, detail = 'summary' }: { token: string, owner: string, repo: string, perPage: number, page?: number, maxPages?: number, detail?: DetailLevel }) {\n  return withOctokit(token, async (octokit) => {\n  const { items, hasMore } = await fetchAllPages(async currentPage => {\n    const { data } = await octokit.rest.repos.listReleases({ owner, repo, per_page: perPage, page: currentPage })\n    return data\n  }, perPage, maxPages, page)\n  return pagedList(items.map(release => ({\n    id: release.id,\n    tagName: release.tag_name,\n    name: release.name,\n    body: applyDetailBody(release.body, detail),\n    draft: release.draft,\n    prerelease: release.prerelease,\n    url: release.html_url,\n    author: release.author?.login,\n    createdAt: release.created_at,\n    publishedAt: release.published_at,\n  })), perPage, page, hasMore)\n  })\n}\n\nexport const getLatestReleaseInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  detail: detailSchema,\n})\n\nexport const getLatestReleaseDescription = 'Get the latest published release for a GitHub repository (excludes drafts and prereleases). Body truncated by default (detail: summary)'\n\nexport async function getLatestReleaseCore({ token, owner, repo, detail = 'summary' }: { token: string, owner: string, repo: string, detail?: DetailLevel }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.repos.getLatestRelease({ owner, repo })\n  return {\n    id: data.id,\n    tagName: data.tag_name,\n    name: data.name,\n    body: applyDetailBody(data.body, detail),\n    url: data.html_url,\n    author: data.author?.login,\n    createdAt: data.created_at,\n    publishedAt: data.published_at,\n    assets: data.assets.map(asset => ({\n      name: asset.name,\n      downloadUrl: asset.browser_download_url,\n      size: asset.size,\n      downloadCount: asset.download_count,\n    })),\n  }\n  })\n}\n\nexport const getReleaseInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  releaseId: z.number().describe('Release ID (from listReleases or getLatestRelease)'),\n  detail: detailSchema,\n})\n\nexport const getReleaseDescription = 'Get a specific release by ID, including its assets. Body truncated by default (detail: summary)'\n\nexport async function getReleaseCore({ token, owner, repo, releaseId, detail = 'summary' }: { token: string, owner: string, repo: string, releaseId: number, detail?: DetailLevel }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.repos.getRelease({ owner, repo, release_id: releaseId })\n  return {\n    id: data.id,\n    tagName: data.tag_name,\n    name: data.name,\n    body: applyDetailBody(data.body, detail),\n    draft: data.draft,\n    prerelease: data.prerelease,\n    url: data.html_url,\n    author: data.author?.login,\n    createdAt: data.created_at,\n    publishedAt: data.published_at,\n    assets: data.assets.map(asset => ({\n      name: asset.name,\n      downloadUrl: asset.browser_download_url,\n      size: asset.size,\n      downloadCount: asset.download_count,\n    })),\n  }\n  })\n}\n\nexport const createReleaseInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  tagName: z.string().describe('Tag name for the release (created from target if it does not exist)'),\n  target: z.string().optional().describe('Branch name or commit SHA to tag (defaults to the default branch)'),\n  name: z.string().optional().describe('Release title (defaults to the tag name)'),\n  body: z.string().optional().describe('Release notes (supports Markdown)'),\n  draft: z.boolean().optional().default(false).describe('Create as a draft release'),\n  prerelease: z.boolean().optional().default(false).describe('Mark as a prerelease'),\n  generateReleaseNotes: z.boolean().optional().default(false).describe('Auto-generate release notes from merged pull requests since the last release'),\n})\n\nexport const createReleaseDescription = 'Create a new release (and its tag if needed) in a GitHub repository'\n\n/** Not idempotent — creating a release with an existing tag name returns an error from GitHub. */\nexport async function createReleaseCore({ token, owner, repo, tagName, target, name, body, draft, prerelease, generateReleaseNotes }: { token: string, owner: string, repo: string, tagName: string, target?: string, name?: string, body?: string, draft: boolean, prerelease: boolean, generateReleaseNotes: boolean }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.repos.createRelease({\n    owner,\n    repo,\n    tag_name: tagName,\n    target_commitish: target,\n    name,\n    body,\n    draft,\n    prerelease,\n    generate_release_notes: generateReleaseNotes,\n  })\n  return {\n    id: data.id,\n    tagName: data.tag_name,\n    name: data.name,\n    body: data.body,\n    url: data.html_url,\n    draft: data.draft,\n    prerelease: data.prerelease,\n    createdAt: data.created_at,\n  }\n  })\n}\n\nexport const updateReleaseInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  releaseId: z.number().describe('Release ID (from listReleases or getLatestRelease)'),\n  tagName: z.string().optional().describe('New tag name for the release'),\n  target: z.string().optional().describe('Branch name or commit SHA to tag'),\n  name: z.string().optional().describe('New release title'),\n  body: z.string().optional().describe('New release notes (supports Markdown)'),\n  draft: z.boolean().optional().describe('Mark as a draft release'),\n  prerelease: z.boolean().optional().describe('Mark as a prerelease'),\n})\n\nexport const updateReleaseDescription = 'Update an existing release — tag, target, title, notes, draft, or prerelease status'\n\n/** Not idempotent — each call applies a new revision. */\nexport async function updateReleaseCore({ token, owner, repo, releaseId, tagName, target, name, body, draft, prerelease }: { token: string, owner: string, repo: string, releaseId: number, tagName?: string, target?: string, name?: string, body?: string, draft?: boolean, prerelease?: boolean }) {\n  return withOctokit(token, async (octokit) => {\n  const { data } = await octokit.rest.repos.updateRelease({\n    owner,\n    repo,\n    release_id: releaseId,\n    tag_name: tagName,\n    target_commitish: target,\n    name,\n    body,\n    draft,\n    prerelease,\n  })\n  return {\n    id: data.id,\n    tagName: data.tag_name,\n    name: data.name,\n    body: data.body,\n    url: data.html_url,\n    draft: data.draft,\n    prerelease: data.prerelease,\n    publishedAt: data.published_at,\n  }\n  })\n}\n\nexport const deleteReleaseInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  releaseId: z.number().describe('Release ID to delete'),\n})\n\nexport const deleteReleaseDescription = 'Delete a release permanently (does not delete the underlying git tag)'\n\n/** Not idempotent — deleting an already-deleted release returns 404 from GitHub. */\nexport async function deleteReleaseCore({ token, owner, repo, releaseId }: { token: string, owner: string, repo: string, releaseId: number }) {\n  return withOctokit(token, async (octokit) => {\n  await octokit.rest.repos.deleteRelease({ owner, repo, release_id: releaseId })\n  return { deleted: true, releaseId }\n  })\n}\n","import { z } from 'zod'\nimport { withComposedRateLimit } from './rate-limit'\nimport { getCombinedStatusCore, listCheckRunsCore } from './checks'\nimport { compareCommitsCore } from './commits'\nimport { detailSchema, type DetailLevel } from './detail'\nimport {\n  getIssueCore,\n  listIssueCommentsCore,\n  listLabelsCore,\n} from './issues'\nimport {\n  getPullRequestCore,\n  listPullRequestFilesCore,\n  listPullRequestReviewsCore,\n} from './pull-requests'\nimport { getLatestReleaseCore, getReleaseCore, listReleasesCore } from './releases'\nimport { listWorkflowJobsCore, listWorkflowRunsCore } from './workflows'\n\nexport const getPullRequestContextInputSchema = 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  includeFiles: z.boolean().optional().default(true).describe('Include changed files metadata'),\n  includeReviews: z.boolean().optional().default(true).describe('Include existing reviews'),\n  includeChecks: z.boolean().optional().default(false).describe('Include check runs and combined status for the PR head SHA'),\n  includePatch: z.boolean().optional().default(false).describe('Include diff patches in files (token-heavy; prefer false then fetch specific files with listPullRequestFiles)'),\n  filesPerPage: z.number().optional().default(100).describe('Max files to return when includeFiles is true (max 100)'),\n  detail: detailSchema,\n})\n\nexport const getPullRequestContextDescription = 'Fetch pull request details plus files, reviews, and optional CI checks in one call — prefer this over separate getPullRequest / listPullRequestFiles / listPullRequestReviews calls. filesHasMore / reviewsHasMore mean more pages exist on those lists.'\n\nexport async function getPullRequestContextCore({\n  token,\n  owner,\n  repo,\n  pullNumber,\n  includeFiles,\n  includeReviews,\n  includeChecks,\n  includePatch,\n  filesPerPage,\n  detail = 'summary',\n}: {\n  token: string\n  owner: string\n  repo: string\n  pullNumber: number\n  includeFiles: boolean\n  includeReviews: boolean\n  includeChecks: boolean\n  includePatch: boolean\n  filesPerPage: number\n  detail?: DetailLevel\n}) {\n  const pullRequest = await getPullRequestCore({ token, owner, repo, pullNumber, detail })\n\n  const [files, reviews, checks] = await Promise.all([\n    includeFiles\n      ? listPullRequestFilesCore({\n          token,\n          owner,\n          repo,\n          pullNumber,\n          includePatch,\n          perPage: filesPerPage,\n          page: 1,\n        })\n      : Promise.resolve(undefined),\n    includeReviews\n      ? listPullRequestReviewsCore({ token, owner, repo, pullNumber, perPage: 30, page: 1 })\n      : Promise.resolve(undefined),\n    includeChecks\n      ? Promise.all([\n          listCheckRunsCore({ token, owner, repo, ref: pullRequest.headSha, perPage: 100, maxPages: 1 }),\n          getCombinedStatusCore({ token, owner, repo, ref: pullRequest.headSha }),\n        ]).then(([checkRuns, combinedStatus]) => ({ checkRuns, combinedStatus }))\n      : Promise.resolve(undefined),\n  ])\n\n  return withComposedRateLimit({\n    pullRequest,\n    ...files !== undefined ? { files: files.items, filesHasMore: files.hasMore } : {},\n    ...reviews !== undefined ? { reviews: reviews.items, reviewsHasMore: reviews.hasMore } : {},\n    ...checks !== undefined ? { checks } : {},\n  })\n}\n\nexport const getIssueContextInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  issueNumber: z.number().describe('Issue number'),\n  includeLabels: z.boolean().optional().default(true).describe('Include available repository label names for triage (names only — use listLabels for descriptions)'),\n  includeComments: z.boolean().optional().default(true).describe('Include recent issue comments'),\n  maxComments: z.number().optional().default(5).describe('Max recent comments to include (keep small — fetch more only when needed)'),\n  // Context tools are one-shot — default to the full body so the agent does not re-fetch with detail full\n  detail: z\n    .enum(['summary', 'full'])\n    .optional()\n    .default('full')\n    .describe('full returns the complete body (default for this one-shot tool); summary truncates to ~500 chars'),\n})\n\nexport const getIssueContextDescription = 'Fetch an issue plus available label names and recent comments in one call — prefer this over separate getIssue / listLabels / comment calls when triaging. Call once; do not re-fetch the same issue. commentsHasMore means more comments exist — use listIssueComments with nextPage.'\n\nexport async function getIssueContextCore({\n  token,\n  owner,\n  repo,\n  issueNumber,\n  includeLabels,\n  includeComments,\n  maxComments,\n  detail = 'full',\n}: {\n  token: string\n  owner: string\n  repo: string\n  issueNumber: number\n  includeLabels: boolean\n  includeComments: boolean\n  maxComments: number\n  detail?: DetailLevel\n}) {\n  const [issue, labels, comments] = await Promise.all([\n    getIssueCore({ token, owner, repo, issueNumber, detail }),\n    includeLabels\n      ? listLabelsCore({ token, owner, repo, perPage: 100, page: 1 })\n      : Promise.resolve(undefined),\n    includeComments\n      ? listIssueCommentsCore({\n          token,\n          owner,\n          repo,\n          issueNumber,\n          perPage: maxComments,\n          page: 1,\n          detail,\n        })\n      : Promise.resolve(undefined),\n  ])\n\n  return withComposedRateLimit({\n    issue,\n    // Names only — full label objects (color/description) dominate triage payloads on large repos\n    ...labels !== undefined ? { labelNames: labels.items.map(label => label.name) } : {},\n    ...comments !== undefined ? { comments: comments.items, commentsHasMore: comments.hasMore } : {},\n  })\n}\n\nexport const getReleaseContextInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  releaseId: z.number().optional().describe('Release ID — omit to use the latest published release'),\n  includePrevious: z.boolean().optional().default(true).describe('Include the previous release for comparison'),\n  includeCompare: z.boolean().optional().default(true).describe('Include a compare between the previous and current release tags'),\n  detail: detailSchema,\n})\n\nexport const getReleaseContextDescription = 'Fetch a release (latest or by ID) plus the previous release and tag comparison in one call — prefer this when preparing or reviewing a release'\n\nexport async function getReleaseContextCore({\n  token,\n  owner,\n  repo,\n  releaseId,\n  includePrevious,\n  includeCompare,\n  detail = 'summary',\n}: {\n  token: string\n  owner: string\n  repo: string\n  releaseId?: number\n  includePrevious: boolean\n  includeCompare: boolean\n  detail?: DetailLevel\n}) {\n  const release = releaseId != null\n    ? await getReleaseCore({ token, owner, repo, releaseId, detail })\n    : await getLatestReleaseCore({ token, owner, repo, detail })\n\n  let previous: Awaited<ReturnType<typeof listReleasesCore>>['items'][number] | undefined\n  if (includePrevious || includeCompare) {\n    const releases = await listReleasesCore({\n      token,\n      owner,\n      repo,\n      perPage: 10,\n      maxPages: 1,\n      detail,\n    })\n    previous = releases.items.find(r => r.id !== release.id && !r.draft)\n  }\n\n  let comparison: Awaited<ReturnType<typeof compareCommitsCore>> | undefined\n  if (includeCompare && previous) {\n    comparison = await compareCommitsCore({\n      token,\n      owner,\n      repo,\n      base: previous.tagName,\n      head: release.tagName,\n      includePatch: false,\n    })\n  }\n\n  return withComposedRateLimit({\n    release,\n    ...previous !== undefined ? { previousRelease: previous } : {},\n    ...comparison !== undefined ? { comparison } : {},\n  })\n}\n\nexport const getCiFailureContextInputSchema = z.object({\n  owner: z.string().describe('Repository owner'),\n  repo: z.string().describe('Repository name'),\n  ref: z.string().describe('Branch, tag, or commit SHA to inspect'),\n  maxFailedRuns: z.number().optional().default(5).describe('Max recent failed workflow runs to include'),\n  maxFailedJobs: z.number().optional().default(10).describe('Max failed jobs (with failed steps) from the latest failed run'),\n})\n\nexport const getCiFailureContextDescription = 'Diagnose CI failures for a ref in one call — combined status, failing check runs, recent failed workflow runs, and failed jobs/steps from the latest failure'\n\nconst FAILURE_CONCLUSIONS = new Set(['failure', 'timed_out', 'action_required', 'cancelled', 'startup_failure'])\n\nexport async function getCiFailureContextCore({\n  token,\n  owner,\n  repo,\n  ref,\n  maxFailedRuns,\n  maxFailedJobs,\n}: {\n  token: string\n  owner: string\n  repo: string\n  ref: string\n  maxFailedRuns: number\n  maxFailedJobs: number\n}) {\n  const [combinedStatus, checkRunsResult, failedRuns] = await Promise.all([\n    getCombinedStatusCore({ token, owner, repo, ref }),\n    listCheckRunsCore({ token, owner, repo, ref, perPage: 100, maxPages: 1 }),\n    listWorkflowRunsCore({\n      token,\n      owner,\n      repo,\n      branch: ref,\n      status: 'failure',\n      perPage: maxFailedRuns,\n      page: 1,\n      maxPages: 1,\n    }),\n  ])\n\n  const failedCheckRuns = checkRunsResult.checkRuns.filter(\n    run => run.conclusion != null && FAILURE_CONCLUSIONS.has(run.conclusion),\n  )\n\n  const latestFailedRun = failedRuns.runs[0]\n  let latestFailure:\n    | {\n        run: (typeof failedRuns.runs)[number]\n        jobs: Array<{\n          id: number\n          name: string\n          status: string\n          conclusion: string | null\n          url: string | null\n          startedAt: string\n          completedAt: string | null\n          steps?: Array<{\n            name: string\n            status: string\n            conclusion: string | null\n            number: number\n            startedAt?: string | null\n            completedAt?: string | null\n          }>\n        }>\n      }\n    | undefined\n\n  if (latestFailedRun) {\n    const jobsResult = await listWorkflowJobsCore({\n      token,\n      owner,\n      repo,\n      runId: latestFailedRun.id,\n      filter: 'latest',\n      perPage: 100,\n      page: 1,\n    })\n\n    const failedJobs = jobsResult.jobs\n      .filter(job => job.conclusion != null && FAILURE_CONCLUSIONS.has(job.conclusion))\n      .slice(0, maxFailedJobs)\n      .map(job => ({\n        id: job.id,\n        name: job.name,\n        status: job.status,\n        conclusion: job.conclusion,\n        url: job.url,\n        startedAt: job.startedAt,\n        completedAt: job.completedAt,\n        steps: job.steps?.filter(\n          step => step.conclusion != null && FAILURE_CONCLUSIONS.has(step.conclusion),\n        ),\n      }))\n\n    latestFailure = { run: latestFailedRun, jobs: failedJobs }\n  }\n\n  return withComposedRateLimit({\n    ref,\n    combinedStatus,\n    failedCheckRuns,\n    checkRunTotalCount: checkRunsResult.totalCount,\n    recentFailedRuns: failedRuns.runs,\n    ...latestFailure !== undefined ? { latestFailure } : {},\n  })\n}\n","import { z } from 'zod'\nimport type { GithubTool } from '../types'\n\n/**\n * Default repository / issue / PR / ref values applied to tool inputs and\n * injected into agent system prompts.\n *\n * When a field is set here, matching tool schema fields become optional and\n * default to this value if the model omits them.\n */\nexport type GithubToolsContext = {\n  owner?: string\n  repo?: string\n  pullNumber?: number\n  issueNumber?: number\n  ref?: string\n}\n\nconst CONTEXT_KEYS = ['owner', 'repo', 'pullNumber', 'issueNumber', 'ref'] as const\n\nfunction hasContextValues(context: GithubToolsContext): boolean {\n  return CONTEXT_KEYS.some(key => context[key] !== undefined)\n}\n\n/**\n * Format a short system-prompt block describing the working context.\n * Returns an empty string when no context fields are set.\n */\nexport function formatContextInstructions(context: GithubToolsContext): string {\n  if (!hasContextValues(context)) return ''\n\n  const parts: string[] = []\n  if (context.owner && context.repo) parts.push(`repository ${context.owner}/${context.repo}`)\n  else if (context.owner) parts.push(`owner ${context.owner}`)\n  else if (context.repo) parts.push(`repository ${context.repo}`)\n  if (context.pullNumber != null) parts.push(`pull request #${context.pullNumber}`)\n  if (context.issueNumber != null) parts.push(`issue #${context.issueNumber}`)\n  if (context.ref) parts.push(`ref ${context.ref}`)\n\n  return `Working context: ${parts.join(', ')}. Prefer these values when calling tools — omit owner, repo, pullNumber, issueNumber, or ref when they match this context.`\n}\n\n/**\n * Fill missing context fields on tool args from {@link GithubToolsContext}.\n * Explicit args always win over context defaults.\n */\nexport function mergeContextArgs(\n  args: Record<string, unknown>,\n  context: GithubToolsContext,\n): Record<string, unknown> {\n  const merged = { ...args }\n  for (const key of CONTEXT_KEYS) {\n    if (merged[key] === undefined && context[key] !== undefined) {\n      merged[key] = context[key]\n    }\n  }\n  return merged\n}\n\nfunction withContextDefault(field: z.ZodTypeAny, value: string | number): z.ZodTypeAny {\n  if (field instanceof z.ZodDefault) {\n    return withContextDefault(field.def.innerType as z.ZodTypeAny, value)\n  }\n  if (field instanceof z.ZodOptional) {\n    return withContextDefault(field.unwrap() as z.ZodTypeAny, value)\n  }\n  return field.default(value)\n}\n\n/**\n * Soften matching context fields on a Zod object schema so the model may omit them.\n * Fields present in `context` get a Zod `.default(value)`.\n */\nexport function softenContextSchema(schema: z.ZodType, context: GithubToolsContext): z.ZodType {\n  if (!(schema instanceof z.ZodObject)) return schema\n\n  const shape = schema.shape as Record<string, z.ZodTypeAny>\n  let changed = false\n  const nextShape: Record<string, z.ZodTypeAny> = { ...shape }\n\n  for (const key of CONTEXT_KEYS) {\n    const value = context[key]\n    if (value === undefined || !(key in shape)) continue\n    nextShape[key] = withContextDefault(shape[key], value)\n    changed = true\n  }\n\n  return changed ? z.object(nextShape) : schema\n}\n\n/**\n * Bind {@link GithubToolsContext} defaults onto a tool: softens matching input\n * fields and merges context into execute args when the model omits them.\n */\nexport function bindToolContext(tool: GithubTool, context: GithubToolsContext): GithubTool {\n  if (!hasContextValues(context) || !tool.inputSchema) return tool\n\n  const inputSchema = softenContextSchema(tool.inputSchema as z.ZodType, context)\n  const originalExecute = tool.execute\n  if (!originalExecute) {\n    return { ...tool, inputSchema }\n  }\n\n  return {\n    ...tool,\n    inputSchema,\n    execute: async (args, options) =>\n      originalExecute(\n        mergeContextArgs(args as Record<string, unknown>, context),\n        options,\n      ),\n  }\n}\n\n/**\n * Apply {@link GithubToolsContext} to every tool in a set.\n */\nexport function bindToolsContext<T extends Record<string, GithubTool>>(\n  tools: T,\n  context: GithubToolsContext | undefined,\n): T {\n  if (!context || !hasContextValues(context)) return tools\n\n  const bound = {} as T\n  for (const [name, tool] of Object.entries(tools) as Array<[keyof T & string, GithubTool]>) {\n    bound[name as keyof T] = bindToolContext(tool, context) as T[keyof T]\n  }\n  return bound\n}\n","import type { GithubToolName } from './tool-names'\n\n/**\n * Predefined tool presets for common use cases.\n * Pass to {@link createGithubTools}, {@link createGithubAgent}, or {@link createDurableGithubAgent}.\n * Presets can be combined by passing an array.\n */\nexport const PRESET_TOOLS = {\n  /**\n   * **Code review** — review pull requests and submit feedback.\n   *\n   * Tools: `getPullRequest`, `listPullRequests`, `listPullRequestFiles`, `listPullRequestReviews`, `listPullRequestReviewThreads`, `getPullRequestContext`,\n   * `getFileContent`, `listCommits`, `getCommit`, `getBlame`, `compareCommits`, `getRepository`, `listBranches`,\n   * `searchCode`, `listCheckRuns`, `getCombinedStatus`, `updatePullRequest`, `addPullRequestComment`, `updatePullRequestComment`,\n   * `deletePullRequestComment`, `createPullRequestReview`, `replyToReviewComment`, `resolveReviewThread`, `requestReviewers`.\n   *\n   * Agent prompt: optimized for thorough PR review with inline feedback.\n   */\n  'code-review': [\n    'getPullRequest', 'listPullRequests', 'listPullRequestFiles', 'listPullRequestReviews', 'listPullRequestReviewThreads', 'getPullRequestContext', 'getFileContent', 'listCommits', 'getCommit', 'getBlame', 'compareCommits',\n    'getRepository', 'listBranches', 'searchCode', 'listCheckRuns', 'getCombinedStatus',\n    'updatePullRequest', 'addPullRequestComment', 'updatePullRequestComment', 'deletePullRequestComment', 'createPullRequestReview', 'replyToReviewComment', 'resolveReviewThread', 'requestReviewers',\n  ],\n  /**\n   * **Issue triage** — manage and organize GitHub issues.\n   *\n   * Tools: `listIssues`, `getIssueContext`, `listIssueComments`, `createIssue`, `addIssueComment`, `updateIssueComment`, `deleteIssueComment`,\n   * `closeIssue`, `updateIssue`, `addLabels`, `removeLabel`, `createLabel`, `updateLabel`, `deleteLabel`,\n   * `addAssignees`, `removeAssignees`,\n   * `listIssueReactions`, `addIssueReaction`, `listCommentReactions`, `addCommentReaction`, `getRepository`,\n   * `searchRepositories`, `searchCode`, `searchIssues`.\n   *\n   * Prefer `getIssueContext` (issue + `labelNames` + recent comments) over separate get/list calls.\n   * Use `listIssueComments` to paginate beyond the comments returned by `getIssueContext`.\n   * Reopen a closed issue with `updateIssue` (`state: 'open'`) — there is no separate reopen tool.\n   * Acknowledge a report with `addIssueReaction` / `addCommentReaction` instead of a comment when no reply is needed.\n   * Agent prompt: optimized for categorizing, labeling, and responding to issues.\n   */\n  'issue-triage': [\n    'listIssues', 'getIssueContext', 'listIssueComments', 'createIssue', 'addIssueComment', 'updateIssueComment', 'deleteIssueComment', 'closeIssue', 'updateIssue',\n    'addLabels', 'removeLabel', 'createLabel', 'updateLabel', 'deleteLabel', 'addAssignees', 'removeAssignees',\n    'listIssueReactions', 'addIssueReaction', 'listCommentReactions', 'addCommentReaction',\n    'getRepository', 'searchRepositories', 'searchCode', 'searchIssues',\n  ],\n  /**\n   * **CI operations** — monitor and manage GitHub Actions workflows.\n   *\n   * Tools: `getRepository`, `listBranches`, `listCommits`, `getCommit`,\n   * `listWorkflows`, `listWorkflowRuns`, `getWorkflowRun`, `listWorkflowJobs`, `getWorkflowJobLogs`, `listCheckRuns`, `getCombinedStatus`, `getCiFailureContext`,\n   * `triggerWorkflow`, `cancelWorkflowRun`, `rerunWorkflowRun`.\n   *\n   * Diagnose a failure with `getCiFailureContext` first, then read the failing job's output with `getWorkflowJobLogs`.\n   * Agent prompt: optimized for diagnosing CI failures and managing workflow runs.\n   */\n  'ci-ops': [\n    'getRepository', 'listBranches',\n    'listCommits', 'getCommit',\n    'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs', 'getWorkflowJobLogs', 'listCheckRuns', 'getCombinedStatus', 'getCiFailureContext',\n    'triggerWorkflow', 'cancelWorkflowRun', 'rerunWorkflowRun',\n  ],\n  /**\n   * **Repository explorer** — read-only access to browse codebases.\n   *\n   * Tools: all read-only tools including repos, branches, PRs, issues, discussions, commits, blame, comparisons,\n   * search, gists, workflows, checks, and releases. No write operations.\n   *\n   * Agent prompt: optimized for answering questions about code structure and history.\n   */\n  'repo-explorer': [\n    'getRepository', 'listBranches', 'getFileContent', 'getRepositoryTree',\n    'listPullRequests', 'getPullRequest', 'listPullRequestFiles', 'listPullRequestReviews', 'listPullRequestReviewThreads', 'getPullRequestContext',\n    'listIssues', 'getIssue', 'getIssueContext', 'listIssueComments',\n    'listDiscussions', 'getDiscussion',\n    'listLabels',\n    'listCommits', 'getCommit', 'getBlame', 'compareCommits',\n    'searchCode', 'searchRepositories', 'searchIssues',\n    'listGists', 'getGist', 'listGistComments',\n    'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs', 'getWorkflowJobLogs', 'listCheckRuns', 'getCombinedStatus', 'getCiFailureContext',\n    'listReleases', 'getLatestRelease', 'getRelease', 'getReleaseContext',\n  ],\n  /**\n   * **Security audit** — review repositories for security risks and report findings.\n   *\n   * Tools: read-only exploration (`getFileContent`, `getRepositoryTree`, `searchCode`, `searchIssues`, `listCommits`, `getCommit`,\n   * `getBlame`, `compareCommits`), PR and CI visibility (`listPullRequests`, `getPullRequest`, `listPullRequestFiles`,\n   * `getPullRequestContext`, `listCheckRuns`, `getCombinedStatus`, `getCiFailureContext`, `listWorkflows`, `listWorkflowRuns`,\n   * `getWorkflowRun`, `listWorkflowJobs`, `getWorkflowJobLogs` — logs can leak secrets, so auditing them matters),\n   * plus `createIssue`, `addIssueComment`, and `addLabels` to report findings.\n   * No destructive writes.\n   *\n   * Agent prompt: optimized for finding and reporting security risks without making changes.\n   */\n  'security-audit': [\n    'getRepository', 'listBranches', 'getFileContent', 'getRepositoryTree',\n    'listCommits', 'getCommit', 'getBlame', 'compareCommits',\n    'searchCode', 'searchRepositories', 'searchIssues',\n    'listPullRequests', 'getPullRequest', 'listPullRequestFiles', 'getPullRequestContext',\n    'listCheckRuns', 'getCombinedStatus', 'getCiFailureContext',\n    'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs', 'getWorkflowJobLogs',\n    'listIssues', 'getIssue', 'getIssueContext', 'createIssue', 'addIssueComment', 'addLabels',\n  ],\n  /**\n   * **Release manager** — prepare and publish GitHub releases.\n   *\n   * Tools: `getRepository`, `listBranches`, `listCommits`, `getCommit`, `compareCommits`,\n   * `listReleases`, `getLatestRelease`, `getRelease`, `getReleaseContext`, `createRelease`, `updateRelease`, `deleteRelease`,\n   * `listWorkflows`, `listWorkflowRuns`, `getWorkflowRun`, `listWorkflowJobs`, `triggerWorkflow`,\n   * `listPullRequests`, `getPullRequest`.\n   *\n   * Agent prompt: optimized for summarizing changes and cutting releases safely.\n   */\n  'release-manager': [\n    'getRepository', 'listBranches', 'listCommits', 'getCommit', 'compareCommits',\n    'listReleases', 'getLatestRelease', 'getRelease', 'getReleaseContext', 'createRelease', 'updateRelease', 'deleteRelease',\n    'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs', 'triggerWorkflow',\n    'listPullRequests', 'getPullRequest',\n  ],\n  /**\n   * **Discussion moderator** — answer and moderate repository Discussions.\n   *\n   * Tools: `listDiscussions`, `getDiscussion`, `addDiscussionComment`,\n   * `getRepository`, `searchIssues`, `getIssueContext`, `addIssueComment`.\n   *\n   * Prefer discussions for Q&A; link related issues with `getIssueContext` / `addIssueComment` when needed.\n   * Agent prompt: optimized for clear, on-topic discussion replies.\n   */\n  'discussion-moderator': [\n    'listDiscussions', 'getDiscussion', 'addDiscussionComment',\n    'getRepository', 'searchIssues', 'getIssueContext', 'addIssueComment',\n  ],\n  /**\n   * **Notification inbox** — triage authenticated-user notification threads.\n   *\n   * Tools: `listNotifications`, `markNotificationRead`, `getIssue`, `getPullRequest`, `getRepository`.\n   *\n   * Requires a user PAT with the Notifications account permission — not available on Connect installation tokens.\n   * Agent prompt: optimized for clearing inbox noise and following up on actionable threads.\n   */\n  'notification-inbox': [\n    'listNotifications', 'markNotificationRead',\n    'getIssue', 'getPullRequest', 'getRepository',\n  ],\n  /**\n   * **PR author** — open pull requests without the full write surface.\n   *\n   * Tools: `getRepository`, `listBranches`, `getFileContent`, `createBranch`, `deleteBranch`, `createOrUpdateFile`,\n   * `createPullRequest`, `updatePullRequest`, `getPullRequest`, `listPullRequestFiles`,\n   * `listPullRequestReviewThreads`, `replyToReviewComment`, `resolveReviewThread`,\n   * `compareCommits`, `getCommit`.\n   *\n   * Respond to review feedback with `listPullRequestReviewThreads` → `replyToReviewComment` → `resolveReviewThread`.\n   * Agent prompt: optimized for branching, editing files, and opening focused PRs.\n   */\n  'pr-author': [\n    'getRepository', 'listBranches', 'getFileContent', 'createBranch', 'deleteBranch', 'createOrUpdateFile',\n    'createPullRequest', 'updatePullRequest', 'getPullRequest', 'listPullRequestFiles',\n    'listPullRequestReviewThreads', 'replyToReviewComment', 'resolveReviewThread',\n    'compareCommits', 'getCommit',\n  ],\n  /**\n   * **Maintainer** — full repository maintenance with all read and write tools.\n   *\n   * Tools: all tools (same as omitting `preset`).\n   *\n   * Agent prompt: optimized for day-to-day repo maintenance with careful write operations.\n   */\n  'maintainer': [\n    'getRepository', 'listBranches', 'getFileContent', 'getRepositoryTree', 'createBranch', 'deleteBranch', 'forkRepository', 'createRepository', 'createOrUpdateFile',\n    'listPullRequests', 'getPullRequest', 'listPullRequestFiles', 'listPullRequestReviews', 'listPullRequestReviewThreads', 'getPullRequestContext', 'createPullRequest', 'mergePullRequest', 'updatePullRequest', 'addPullRequestComment', 'updatePullRequestComment', 'deletePullRequestComment', 'createPullRequestReview', 'replyToReviewComment', 'resolveReviewThread', 'requestReviewers',\n    'listIssues', 'getIssue', 'getIssueContext', 'listIssueComments', 'createIssue', 'addIssueComment', 'updateIssueComment', 'deleteIssueComment', 'closeIssue', 'updateIssue',\n    'listLabels', 'addLabels', 'removeLabel', 'createLabel', 'updateLabel', 'deleteLabel', 'addAssignees', 'removeAssignees',\n    'listIssueReactions', 'addIssueReaction', 'listCommentReactions', 'addCommentReaction',\n    'listDiscussions', 'getDiscussion', 'addDiscussionComment',\n    'listNotifications', 'markNotificationRead',\n    'listCommits', 'getCommit', 'getBlame', 'compareCommits',\n    'searchCode', 'searchRepositories', 'searchIssues',\n    'listGists', 'getGist', 'listGistComments', 'createGist', 'updateGist', 'deleteGist', 'createGistComment',\n    'listWorkflows', 'listWorkflowRuns', 'getWorkflowRun', 'listWorkflowJobs', 'getWorkflowJobLogs', 'triggerWorkflow', 'cancelWorkflowRun', 'rerunWorkflowRun',\n    'listCheckRuns', 'getCombinedStatus', 'getCiFailureContext',\n    'listReleases', 'getLatestRelease', 'getRelease', 'getReleaseContext', 'createRelease', 'updateRelease', 'deleteRelease',\n  ],\n} as const\n\nexport type GithubToolPreset = keyof typeof PRESET_TOOLS\n\n/** Tool names included in a single preset. */\nexport type PresetToolName<P extends GithubToolPreset> = Extract<(typeof PRESET_TOOLS)[P][number], GithubToolName>\n\n/** Tool names included when combining multiple presets. */\nexport type CombinedPresetToolNames<P extends readonly GithubToolPreset[]> = PresetToolName<P[number]>\n\n/** Ensures every preset only references valid {@link GithubToolName} values at compile time. */\nexport type AssertValidPresetTools = {\n  [K in GithubToolPreset]: PresetToolName<K> extends GithubToolName ? true : never\n}\n\n/**\n * Resolve a preset (or array of presets) into the set of tool names it includes.\n *\n * @param preset - A single preset or array of presets to combine.\n * @returns A `Set` of tool names, or `null` when `preset` is falsy.\n */\nexport function resolvePresetTools(preset: GithubToolPreset | GithubToolPreset[]): Set<GithubToolName> | null {\n  if (!preset) return null\n  const presets = Array.isArray(preset) ? preset : [preset]\n  const tools = new Set<GithubToolName>()\n  for (const p of presets) {\n    for (const t of PRESET_TOOLS[p]) tools.add(t)\n  }\n  return tools\n}\n","import type { z } from 'zod'\nimport * as bundles from './bundles'\nimport * as checks from './checks'\nimport * as commits from './commits'\nimport * as discussions from './discussions'\nimport * as gists from './gists'\nimport * as issues from './issues'\nimport * as notifications from './notifications'\nimport * as pullRequests from './pull-requests'\nimport * as reactions from './reactions'\nimport * as releases from './releases'\nimport * as repository from './repository'\nimport * as search from './search'\nimport * as workflows from './workflows'\n\n/**\n * Vercel Connect scope sets, mirroring GitHub App permissions.\n * Release tools fall under `contents`, reaction tools under `issues`.\n * Gist and notification tools are intentionally unscoped: those APIs only\n * accept user access tokens, never the installation tokens Connect mints.\n */\nexport const CONTENTS_READ = ['contents:read', 'metadata:read'] as const\nexport const CONTENTS_WRITE = ['contents:read', 'contents:write', 'metadata:read'] as const\nexport const PR_READ = ['contents:read', 'metadata:read', 'pull_requests:read'] as const\nexport const PR_WRITE = ['contents:read', 'metadata:read', 'pull_requests:read', 'pull_requests:write'] as const\n/** Read-only PR context (details, files, reviews) plus optional CI checks. */\nexport const PR_CONTEXT = ['contents:read', 'metadata:read', 'pull_requests:read', 'checks:read', 'statuses:read'] as const\nexport const ISSUES_READ = ['contents:read', 'metadata:read', 'issues:read'] as const\nexport const ISSUES_WRITE = ['contents:read', 'metadata:read', 'issues:read', 'issues:write'] as const\nexport const DISCUSSIONS_READ = ['contents:read', 'metadata:read', 'discussions:read'] as const\nexport const DISCUSSIONS_WRITE = ['contents:read', 'metadata:read', 'discussions:read', 'discussions:write'] as const\nexport const ACTIONS_READ = ['contents:read', 'metadata:read', 'actions:read'] as const\nexport const ACTIONS_WRITE = ['contents:read', 'metadata:read', 'actions:read', 'actions:write'] as const\nexport const CHECKS = ['contents:read', 'metadata:read', 'checks:read', 'statuses:read'] as const\nexport const CI_CONTEXT = ['contents:read', 'metadata:read', 'actions:read', 'checks:read', 'statuses:read'] as const\nexport const ADMIN = ['metadata:read', 'administration:read', 'administration:write'] as const\nexport const SEARCH_REPOS = ['metadata:read'] as const\nexport const SEARCH_ISSUES = ['metadata:read', 'issues:read', 'pull_requests:read'] as const\nexport const UNSCOPED = [] as const\n\n/**\n * One tool in the catalog. `core` argument types vary per tool, so the field\n * is typed contravariantly (`never`) — callers cast at the single dispatch\n * boundary (`withToken` in the eve registry). `core` is a getter so the ESM\n * binding stays live (module spies in tests, hot reload).\n */\ntype GithubToolDescriptor = {\n  description: string\n  inputSchema: z.ZodType\n  core: (args: never) => Promise<unknown>\n  /** Present on write tools — drives `GITHUB_WRITE_TOOLS` and approval defaults. */\n  write?: true\n  connectScopes: readonly string[]\n}\n\n/**\n * Single source of truth for every GitHub tool.\n *\n * `GITHUB_TOOL_NAMES`, `GITHUB_WRITE_TOOLS`, `TOOL_CONNECT_SCOPES`, and the\n * eve tool registry are all derived from this catalog. Adding a tool here (plus\n * its `\"use step\"` factory in `src/tools/` and `allTools` in `src/index.ts`,\n * both enforced at compile time) is the only registration needed.\n */\nexport const GITHUB_TOOL_CATALOG = {\n  /** Get information about a GitHub repository including description, stars, forks, language, and default branch. */\n  getRepository: {\n    description: repository.getRepositoryDescription,\n    inputSchema: repository.getRepositoryInputSchema,\n    get core() { return repository.getRepositoryCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** List branches in a GitHub repository. */\n  listBranches: {\n    description: repository.listBranchesDescription,\n    inputSchema: repository.listBranchesInputSchema,\n    get core() { return repository.listBranchesCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Get the content of a file from a GitHub repository. Prefer startLine/endLine or maxLines for large files. */\n  getFileContent: {\n    description: repository.getFileContentDescription,\n    inputSchema: repository.getFileContentInputSchema,\n    get core() { return repository.getFileContentCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** List the file and directory structure of a repository at a given ref. */\n  getRepositoryTree: {\n    description: repository.getRepositoryTreeDescription,\n    inputSchema: repository.getRepositoryTreeInputSchema,\n    get core() { return repository.getRepositoryTreeCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Create a new branch in a GitHub repository from an existing branch or commit SHA. Requires approval by default. */\n  createBranch: {\n    description: repository.createBranchDescription,\n    inputSchema: repository.createBranchInputSchema,\n    get core() { return repository.createBranchCore },\n    write: true,\n    connectScopes: CONTENTS_WRITE,\n  },\n  /** Delete a branch from a GitHub repository permanently. Requires approval by default. */\n  deleteBranch: {\n    description: repository.deleteBranchDescription,\n    inputSchema: repository.deleteBranchInputSchema,\n    get core() { return repository.deleteBranchCore },\n    write: true,\n    connectScopes: CONTENTS_WRITE,\n  },\n  /** Fork a GitHub repository to the authenticated user account or a specified organization. Requires approval by default. */\n  forkRepository: {\n    description: repository.forkRepositoryDescription,\n    inputSchema: repository.forkRepositoryInputSchema,\n    get core() { return repository.forkRepositoryCore },\n    write: true,\n    connectScopes: CONTENTS_READ,\n  },\n  /** Create a new GitHub repository for the authenticated user or a specified organization. Requires approval by default. */\n  createRepository: {\n    description: repository.createRepositoryDescription,\n    inputSchema: repository.createRepositoryInputSchema,\n    get core() { return repository.createRepositoryCore },\n    write: true,\n    connectScopes: ADMIN,\n  },\n  /** Create or update a file in a GitHub repository. Provide the SHA when updating an existing file. Requires approval by default. */\n  createOrUpdateFile: {\n    description: repository.createOrUpdateFileDescription,\n    inputSchema: repository.createOrUpdateFileInputSchema,\n    get core() { return repository.createOrUpdateFileCore },\n    write: true,\n    connectScopes: CONTENTS_WRITE,\n  },\n  /** List pull requests for a GitHub repository. */\n  listPullRequests: {\n    description: pullRequests.listPullRequestsDescription,\n    inputSchema: pullRequests.listPullRequestsInputSchema,\n    get core() { return pullRequests.listPullRequestsCore },\n    connectScopes: PR_READ,\n  },\n  /** Get detailed information about a specific pull request. Body truncated by default (detail: summary). */\n  getPullRequest: {\n    description: pullRequests.getPullRequestDescription,\n    inputSchema: pullRequests.getPullRequestInputSchema,\n    get core() { return pullRequests.getPullRequestCore },\n    connectScopes: PR_READ,\n  },\n  /** Create a new pull request in a GitHub repository. Requires approval by default. */\n  createPullRequest: {\n    description: pullRequests.createPullRequestDescription,\n    inputSchema: pullRequests.createPullRequestInputSchema,\n    get core() { return pullRequests.createPullRequestCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** Merge a pull request. Requires approval by default. */\n  mergePullRequest: {\n    description: pullRequests.mergePullRequestDescription,\n    inputSchema: pullRequests.mergePullRequestInputSchema,\n    get core() { return pullRequests.mergePullRequestCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** Update a pull request — title, body, state, base branch, or draft status. Requires approval by default. */\n  updatePullRequest: {\n    description: pullRequests.updatePullRequestDescription,\n    inputSchema: pullRequests.updatePullRequestInputSchema,\n    get core() { return pullRequests.updatePullRequestCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** Add a comment to a pull request. Requires approval by default. */\n  addPullRequestComment: {\n    description: pullRequests.addPullRequestCommentDescription,\n    inputSchema: pullRequests.addPullRequestCommentInputSchema,\n    get core() { return pullRequests.addPullRequestCommentCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** Update the body of a comment on a pull request. Requires approval by default. */\n  updatePullRequestComment: {\n    description: pullRequests.updatePullRequestCommentDescription,\n    inputSchema: pullRequests.updatePullRequestCommentInputSchema,\n    get core() { return pullRequests.updatePullRequestCommentCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** Delete a comment from a pull request permanently. Requires approval by default. */\n  deletePullRequestComment: {\n    description: pullRequests.deletePullRequestCommentDescription,\n    inputSchema: pullRequests.deletePullRequestCommentInputSchema,\n    get core() { return pullRequests.deletePullRequestCommentCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** List files changed in a pull request with status and stats. Patches omitted by default — set includePatch true for diffs. */\n  listPullRequestFiles: {\n    description: pullRequests.listPullRequestFilesDescription,\n    inputSchema: pullRequests.listPullRequestFilesInputSchema,\n    get core() { return pullRequests.listPullRequestFilesCore },\n    connectScopes: PR_READ,\n  },\n  /** List reviews on a pull request (approvals, change requests, and comments). */\n  listPullRequestReviews: {\n    description: pullRequests.listPullRequestReviewsDescription,\n    inputSchema: pullRequests.listPullRequestReviewsInputSchema,\n    get core() { return pullRequests.listPullRequestReviewsCore },\n    connectScopes: PR_READ,\n  },\n  /** Submit a pull request review — approve, request changes, or comment with optional inline comments on specific lines. Requires approval by default. */\n  createPullRequestReview: {\n    description: pullRequests.createPullRequestReviewDescription,\n    inputSchema: pullRequests.createPullRequestReviewInputSchema,\n    get core() { return pullRequests.createPullRequestReviewCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** List review threads on a pull request with comments, resolution state, and the IDs needed to reply or resolve. Unresolved only by default. */\n  listPullRequestReviewThreads: {\n    description: pullRequests.listPullRequestReviewThreadsDescription,\n    inputSchema: pullRequests.listPullRequestReviewThreadsInputSchema,\n    get core() { return pullRequests.listPullRequestReviewThreadsCore },\n    connectScopes: PR_READ,\n  },\n  /** Reply to a pull request review comment in its review thread. Requires approval by default. */\n  replyToReviewComment: {\n    description: pullRequests.replyToReviewCommentDescription,\n    inputSchema: pullRequests.replyToReviewCommentInputSchema,\n    get core() { return pullRequests.replyToReviewCommentCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** Mark a pull request review thread as resolved. Requires approval by default. */\n  resolveReviewThread: {\n    description: pullRequests.resolveReviewThreadDescription,\n    inputSchema: pullRequests.resolveReviewThreadInputSchema,\n    get core() { return pullRequests.resolveReviewThreadCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** Request reviews from users or teams on a pull request. Requires approval by default. */\n  requestReviewers: {\n    description: pullRequests.requestReviewersDescription,\n    inputSchema: pullRequests.requestReviewersInputSchema,\n    get core() { return pullRequests.requestReviewersCore },\n    write: true,\n    connectScopes: PR_WRITE,\n  },\n  /** Fetch pull request details plus files, reviews, and optional CI checks in one call. */\n  getPullRequestContext: {\n    description: bundles.getPullRequestContextDescription,\n    inputSchema: bundles.getPullRequestContextInputSchema,\n    get core() { return bundles.getPullRequestContextCore },\n    connectScopes: PR_CONTEXT,\n  },\n  /** Fetch an issue plus available label names and recent comments in one call. */\n  getIssueContext: {\n    description: bundles.getIssueContextDescription,\n    inputSchema: bundles.getIssueContextInputSchema,\n    get core() { return bundles.getIssueContextCore },\n    connectScopes: ISSUES_READ,\n  },\n  /** List issues for a GitHub repository (excludes pull requests). */\n  listIssues: {\n    description: issues.listIssuesDescription,\n    inputSchema: issues.listIssuesInputSchema,\n    get core() { return issues.listIssuesCore },\n    connectScopes: ISSUES_READ,\n  },\n  /** Get detailed information about a specific issue. Body truncated by default (detail: summary). */\n  getIssue: {\n    description: issues.getIssueDescription,\n    inputSchema: issues.getIssueInputSchema,\n    get core() { return issues.getIssueCore },\n    connectScopes: ISSUES_READ,\n  },\n  /** List comments on a GitHub issue. Bodies are truncated by default (detail: summary). Prefer getIssueContext for the first page when triaging. */\n  listIssueComments: {\n    description: issues.listIssueCommentsDescription,\n    inputSchema: issues.listIssueCommentsInputSchema,\n    get core() { return issues.listIssueCommentsCore },\n    connectScopes: ISSUES_READ,\n  },\n  /** Create a new issue in a GitHub repository. Requires approval by default. */\n  createIssue: {\n    description: issues.createIssueDescription,\n    inputSchema: issues.createIssueInputSchema,\n    get core() { return issues.createIssueCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Add a comment to a GitHub issue. Requires approval by default. */\n  addIssueComment: {\n    description: issues.addIssueCommentDescription,\n    inputSchema: issues.addIssueCommentInputSchema,\n    get core() { return issues.addIssueCommentCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Update the body of a comment on a GitHub issue. Requires approval by default. */\n  updateIssueComment: {\n    description: issues.updateIssueCommentDescription,\n    inputSchema: issues.updateIssueCommentInputSchema,\n    get core() { return issues.updateIssueCommentCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Delete a comment from a GitHub issue permanently. Requires approval by default. */\n  deleteIssueComment: {\n    description: issues.deleteIssueCommentDescription,\n    inputSchema: issues.deleteIssueCommentInputSchema,\n    get core() { return issues.deleteIssueCommentCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Close an open GitHub issue. Requires approval by default. */\n  closeIssue: {\n    description: issues.closeIssueDescription,\n    inputSchema: issues.closeIssueInputSchema,\n    get core() { return issues.closeIssueCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Update a GitHub issue — title, body, state, labels, milestone, or assignees. Requires approval by default. */\n  updateIssue: {\n    description: issues.updateIssueDescription,\n    inputSchema: issues.updateIssueInputSchema,\n    get core() { return issues.updateIssueCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** List labels available in a GitHub repository. */\n  listLabels: {\n    description: issues.listLabelsDescription,\n    inputSchema: issues.listLabelsInputSchema,\n    get core() { return issues.listLabelsCore },\n    connectScopes: ISSUES_READ,\n  },\n  /** Add labels to an issue or pull request. Requires approval by default. */\n  addLabels: {\n    description: issues.addLabelsDescription,\n    inputSchema: issues.addLabelsInputSchema,\n    get core() { return issues.addLabelsCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Remove a label from an issue or pull request. Requires approval by default. */\n  removeLabel: {\n    description: issues.removeLabelDescription,\n    inputSchema: issues.removeLabelInputSchema,\n    get core() { return issues.removeLabelCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Create a label in a GitHub repository. Requires approval by default. */\n  createLabel: {\n    description: issues.createLabelDescription,\n    inputSchema: issues.createLabelInputSchema,\n    get core() { return issues.createLabelCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Update a label in a GitHub repository — name, color, or description. Requires approval by default. */\n  updateLabel: {\n    description: issues.updateLabelDescription,\n    inputSchema: issues.updateLabelInputSchema,\n    get core() { return issues.updateLabelCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Delete a label from a GitHub repository permanently. Requires approval by default. */\n  deleteLabel: {\n    description: issues.deleteLabelDescription,\n    inputSchema: issues.deleteLabelInputSchema,\n    get core() { return issues.deleteLabelCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Assign users to an issue or pull request. Requires approval by default. */\n  addAssignees: {\n    description: issues.addAssigneesDescription,\n    inputSchema: issues.addAssigneesInputSchema,\n    get core() { return issues.addAssigneesCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** Remove assignees from an issue or pull request. Requires approval by default. */\n  removeAssignees: {\n    description: issues.removeAssigneesDescription,\n    inputSchema: issues.removeAssigneesInputSchema,\n    get core() { return issues.removeAssigneesCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** List reactions on an issue or pull request conversation, with per-emoji counts. */\n  listIssueReactions: {\n    description: reactions.listIssueReactionsDescription,\n    inputSchema: reactions.listIssueReactionsInputSchema,\n    get core() { return reactions.listIssueReactionsCore },\n    connectScopes: ISSUES_READ,\n  },\n  /** React to an issue or pull request with an emoji. Requires approval by default. */\n  addIssueReaction: {\n    description: reactions.addIssueReactionDescription,\n    inputSchema: reactions.addIssueReactionInputSchema,\n    get core() { return reactions.addIssueReactionCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** List reactions on an issue or pull request comment, with per-emoji counts. */\n  listCommentReactions: {\n    description: reactions.listCommentReactionsDescription,\n    inputSchema: reactions.listCommentReactionsInputSchema,\n    get core() { return reactions.listCommentReactionsCore },\n    connectScopes: ISSUES_READ,\n  },\n  /** React to an issue or pull request comment with an emoji. Requires approval by default. */\n  addCommentReaction: {\n    description: reactions.addCommentReactionDescription,\n    inputSchema: reactions.addCommentReactionInputSchema,\n    get core() { return reactions.addCommentReactionCore },\n    write: true,\n    connectScopes: ISSUES_WRITE,\n  },\n  /** List discussions in a GitHub repository, most recently updated first, optionally filtered by category. */\n  listDiscussions: {\n    description: discussions.listDiscussionsDescription,\n    inputSchema: discussions.listDiscussionsInputSchema,\n    get core() { return discussions.listDiscussionsCore },\n    connectScopes: DISCUSSIONS_READ,\n  },\n  /** Get a GitHub discussion by number. Body truncated by default (detail: summary). */\n  getDiscussion: {\n    description: discussions.getDiscussionDescription,\n    inputSchema: discussions.getDiscussionInputSchema,\n    get core() { return discussions.getDiscussionCore },\n    connectScopes: DISCUSSIONS_READ,\n  },\n  /** Add a comment to a GitHub discussion. Requires approval by default. */\n  addDiscussionComment: {\n    description: discussions.addDiscussionCommentDescription,\n    inputSchema: discussions.addDiscussionCommentInputSchema,\n    get core() { return discussions.addDiscussionCommentCore },\n    write: true,\n    connectScopes: DISCUSSIONS_WRITE,\n  },\n  /** List notification threads for the authenticated user. Requires a token with notifications access. */\n  listNotifications: {\n    description: notifications.listNotificationsDescription,\n    inputSchema: notifications.listNotificationsInputSchema,\n    get core() { return notifications.listNotificationsCore },\n    connectScopes: UNSCOPED,\n  },\n  /** Mark a single notification thread as read. Requires approval by default. */\n  markNotificationRead: {\n    description: notifications.markNotificationReadDescription,\n    inputSchema: notifications.markNotificationReadInputSchema,\n    get core() { return notifications.markNotificationReadCore },\n    write: true,\n    connectScopes: UNSCOPED,\n  },\n  /** Search for code in GitHub repositories. Use qualifiers like \"repo:owner/name\" to scope the search. Results include matching text snippets when GitHub returns them. */\n  searchCode: {\n    description: search.searchCodeDescription,\n    inputSchema: search.searchCodeInputSchema,\n    get core() { return search.searchCodeCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Search for GitHub repositories by keyword, topic, language, or other qualifiers. */\n  searchRepositories: {\n    description: search.searchRepositoriesDescription,\n    inputSchema: search.searchRepositoriesInputSchema,\n    get core() { return search.searchRepositoriesCore },\n    connectScopes: SEARCH_REPOS,\n  },\n  /** Search for issues and pull requests across GitHub using search qualifiers like \"repo:owner/name is:open\". */\n  searchIssues: {\n    description: search.searchIssuesDescription,\n    inputSchema: search.searchIssuesInputSchema,\n    get core() { return search.searchIssuesCore },\n    connectScopes: SEARCH_ISSUES,\n  },\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  listCommits: {\n    description: commits.listCommitsDescription,\n    inputSchema: commits.listCommitsInputSchema,\n    get core() { return commits.listCommitsCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Get detailed information about a specific commit, including the list of files changed. Patches omitted by default. */\n  getCommit: {\n    description: commits.getCommitDescription,\n    inputSchema: commits.getCommitInputSchema,\n    get core() { return commits.getCommitCore },\n    connectScopes: CONTENTS_READ,\n  },\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. */\n  getBlame: {\n    description: commits.getBlameDescription,\n    inputSchema: commits.getBlameInputSchema,\n    get core() { return commits.getBlameCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Compare two branches, tags, or commits — ahead/behind counts, commits in between, and differing files. Patches omitted by default. */\n  compareCommits: {\n    description: commits.compareCommitsDescription,\n    inputSchema: commits.compareCommitsInputSchema,\n    get core() { return commits.compareCommitsCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** List gists for the authenticated user or a specific user. */\n  listGists: {\n    description: gists.listGistsDescription,\n    inputSchema: gists.listGistsInputSchema,\n    get core() { return gists.listGistsCore },\n    connectScopes: UNSCOPED,\n  },\n  /** Get a gist by ID, including file contents. */\n  getGist: {\n    description: gists.getGistDescription,\n    inputSchema: gists.getGistInputSchema,\n    get core() { return gists.getGistCore },\n    connectScopes: UNSCOPED,\n  },\n  /** List comments on a gist. */\n  listGistComments: {\n    description: gists.listGistCommentsDescription,\n    inputSchema: gists.listGistCommentsInputSchema,\n    get core() { return gists.listGistCommentsCore },\n    connectScopes: UNSCOPED,\n  },\n  /** Create a new gist with one or more files. Requires approval by default. */\n  createGist: {\n    description: gists.createGistDescription,\n    inputSchema: gists.createGistInputSchema,\n    get core() { return gists.createGistCore },\n    write: true,\n    connectScopes: UNSCOPED,\n  },\n  /** Update an existing gist — edit description, update files, or remove files. Requires approval by default. */\n  updateGist: {\n    description: gists.updateGistDescription,\n    inputSchema: gists.updateGistInputSchema,\n    get core() { return gists.updateGistCore },\n    write: true,\n    connectScopes: UNSCOPED,\n  },\n  /** Delete a gist permanently. Requires approval by default. */\n  deleteGist: {\n    description: gists.deleteGistDescription,\n    inputSchema: gists.deleteGistInputSchema,\n    get core() { return gists.deleteGistCore },\n    write: true,\n    connectScopes: UNSCOPED,\n  },\n  /** Add a comment to a gist. Requires approval by default. */\n  createGistComment: {\n    description: gists.createGistCommentDescription,\n    inputSchema: gists.createGistCommentInputSchema,\n    get core() { return gists.createGistCommentCore },\n    write: true,\n    connectScopes: UNSCOPED,\n  },\n  /** List GitHub Actions workflows in a repository. */\n  listWorkflows: {\n    description: workflows.listWorkflowsDescription,\n    inputSchema: workflows.listWorkflowsInputSchema,\n    get core() { return workflows.listWorkflowsCore },\n    connectScopes: ACTIONS_READ,\n  },\n  /** List workflow runs for a repository, optionally filtered by workflow, branch, status, or event. */\n  listWorkflowRuns: {\n    description: workflows.listWorkflowRunsDescription,\n    inputSchema: workflows.listWorkflowRunsInputSchema,\n    get core() { return workflows.listWorkflowRunsCore },\n    connectScopes: ACTIONS_READ,\n  },\n  /** Get details of a specific workflow run including status, timing, and trigger info. */\n  getWorkflowRun: {\n    description: workflows.getWorkflowRunDescription,\n    inputSchema: workflows.getWorkflowRunInputSchema,\n    get core() { return workflows.getWorkflowRunCore },\n    connectScopes: ACTIONS_READ,\n  },\n  /** List jobs for a workflow run, including step-level status and timing. */\n  listWorkflowJobs: {\n    description: workflows.listWorkflowJobsDescription,\n    inputSchema: workflows.listWorkflowJobsInputSchema,\n    get core() { return workflows.listWorkflowJobsCore },\n    connectScopes: ACTIONS_READ,\n  },\n  /** Get the log output of a workflow job to diagnose failures. Returns the tail (default 200 lines) with timestamps stripped. */\n  getWorkflowJobLogs: {\n    description: workflows.getWorkflowJobLogsDescription,\n    inputSchema: workflows.getWorkflowJobLogsInputSchema,\n    get core() { return workflows.getWorkflowJobLogsCore },\n    connectScopes: ACTIONS_READ,\n  },\n  /** Trigger a workflow via workflow_dispatch event. Requires approval by default. */\n  triggerWorkflow: {\n    description: workflows.triggerWorkflowDescription,\n    inputSchema: workflows.triggerWorkflowInputSchema,\n    get core() { return workflows.triggerWorkflowCore },\n    write: true,\n    connectScopes: ACTIONS_WRITE,\n  },\n  /** Cancel an in-progress workflow run. Requires approval by default. */\n  cancelWorkflowRun: {\n    description: workflows.cancelWorkflowRunDescription,\n    inputSchema: workflows.cancelWorkflowRunInputSchema,\n    get core() { return workflows.cancelWorkflowRunCore },\n    write: true,\n    connectScopes: ACTIONS_WRITE,\n  },\n  /** Re-run a workflow run, optionally only the failed jobs. Requires approval by default. */\n  rerunWorkflowRun: {\n    description: workflows.rerunWorkflowRunDescription,\n    inputSchema: workflows.rerunWorkflowRunInputSchema,\n    get core() { return workflows.rerunWorkflowRunCore },\n    write: true,\n    connectScopes: ACTIONS_WRITE,\n  },\n  /** List check runs (Checks API — GitHub Actions and other CI providers) for a commit, branch, or tag. */\n  listCheckRuns: {\n    description: checks.listCheckRunsDescription,\n    inputSchema: checks.listCheckRunsInputSchema,\n    get core() { return checks.listCheckRunsCore },\n    connectScopes: CHECKS,\n  },\n  /** Get the combined commit status (Statuses API — legacy CI integrations) for a commit, branch, or tag. */\n  getCombinedStatus: {\n    description: checks.getCombinedStatusDescription,\n    inputSchema: checks.getCombinedStatusInputSchema,\n    get core() { return checks.getCombinedStatusCore },\n    connectScopes: CHECKS,\n  },\n  /** Diagnose CI failures for a ref — combined status, failing checks, and failed workflow jobs in one call. */\n  getCiFailureContext: {\n    description: bundles.getCiFailureContextDescription,\n    inputSchema: bundles.getCiFailureContextInputSchema,\n    get core() { return bundles.getCiFailureContextCore },\n    connectScopes: CI_CONTEXT,\n  },\n  /** List releases for a GitHub repository, newest first (includes drafts and prereleases). */\n  listReleases: {\n    description: releases.listReleasesDescription,\n    inputSchema: releases.listReleasesInputSchema,\n    get core() { return releases.listReleasesCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Get the latest published release for a GitHub repository (excludes drafts and prereleases). Body truncated by default. */\n  getLatestRelease: {\n    description: releases.getLatestReleaseDescription,\n    inputSchema: releases.getLatestReleaseInputSchema,\n    get core() { return releases.getLatestReleaseCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Get a specific release by ID, including its assets. Body truncated by default. */\n  getRelease: {\n    description: releases.getReleaseDescription,\n    inputSchema: releases.getReleaseInputSchema,\n    get core() { return releases.getReleaseCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Fetch a release plus the previous release and tag comparison in one call. */\n  getReleaseContext: {\n    description: bundles.getReleaseContextDescription,\n    inputSchema: bundles.getReleaseContextInputSchema,\n    get core() { return bundles.getReleaseContextCore },\n    connectScopes: CONTENTS_READ,\n  },\n  /** Create a new release (and its tag if needed) in a GitHub repository. Requires approval by default. */\n  createRelease: {\n    description: releases.createReleaseDescription,\n    inputSchema: releases.createReleaseInputSchema,\n    get core() { return releases.createReleaseCore },\n    write: true,\n    connectScopes: CONTENTS_WRITE,\n  },\n  /** Update an existing release — tag, target, title, notes, draft, or prerelease status. Requires approval by default. */\n  updateRelease: {\n    description: releases.updateReleaseDescription,\n    inputSchema: releases.updateReleaseInputSchema,\n    get core() { return releases.updateReleaseCore },\n    write: true,\n    connectScopes: CONTENTS_WRITE,\n  },\n  /** Delete a release permanently. Requires approval by default. */\n  deleteRelease: {\n    description: releases.deleteReleaseDescription,\n    inputSchema: releases.deleteReleaseInputSchema,\n    get core() { return releases.deleteReleaseCore },\n    write: true,\n    connectScopes: CONTENTS_WRITE,\n  },\n} satisfies Record<string, GithubToolDescriptor>\n\nexport type GithubToolName = keyof typeof GITHUB_TOOL_CATALOG\n\n/** Tool names whose catalog entry is marked `write: true`. */\nexport type GithubWriteToolName = {\n  [K in GithubToolName]: (typeof GITHUB_TOOL_CATALOG)[K] extends { write: true } ? K : never\n}[GithubToolName]\n\nexport const ALL_GITHUB_TOOL_NAMES = Object.keys(GITHUB_TOOL_CATALOG) as GithubToolName[]\n\nexport const GITHUB_WRITE_TOOL_NAMES = ALL_GITHUB_TOOL_NAMES.filter(\n  name => 'write' in GITHUB_TOOL_CATALOG[name],\n) as GithubWriteToolName[]\n\nexport function isGithubWriteToolName(name: GithubToolName): name is GithubWriteToolName {\n  return 'write' in GITHUB_TOOL_CATALOG[name]\n}\n","import { ALL_GITHUB_TOOL_NAMES, type GithubToolName } from './catalog'\n\nexport type { GithubToolName } from './catalog'\nexport { ALL_GITHUB_TOOL_NAMES } from './catalog'\n\n/**\n * All GitHub tool names available via {@link createGithubTools}, keyed by name.\n * Derived from `GITHUB_TOOL_CATALOG` — the single source of truth for tools.\n */\nexport const GITHUB_TOOL_NAMES = Object.fromEntries(\n  ALL_GITHUB_TOOL_NAMES.map(name => [name, name]),\n) as { [K in GithubToolName]: K }\n","import { GITHUB_WRITE_TOOL_NAMES, type GithubWriteToolName } from './catalog'\n\nexport type { GithubWriteToolName } from './catalog'\nexport { GITHUB_WRITE_TOOL_NAMES, isGithubWriteToolName } from './catalog'\n\n/**\n * GitHub tools that perform write operations and require approval by default.\n * Derived from the `write: true` entries of `GITHUB_TOOL_CATALOG`.\n */\nexport const GITHUB_WRITE_TOOLS = Object.fromEntries(\n  GITHUB_WRITE_TOOL_NAMES.map(name => [name, name]),\n) as { [K in GithubWriteToolName]: K }\n"],"mappings":"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"}