@circuitwall/github-langchain 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/LICENSE +17 -0
- package/README.md +125 -0
- package/dist/index.cjs +850 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1718 -0
- package/dist/index.d.ts +1718 -0
- package/dist/index.js +819 -0
- package/dist/index.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Native GitHub tools — direct REST API calls, no MCP, no `gh` CLI.\r\n *\r\n * Every call goes through the same `fetch` global that the runtime configures\r\n * with any HTTP_PROXY agent + custom CA bundle, so these tools work on a\r\n * corp laptop where the MCP install path is blocked.\r\n *\r\n * Auth resolution defaults to env vars (GITHUB_TOKEN, then GH_TOKEN — matches\r\n * the gh CLI's fallback chain). Call `setAuthResolver()` to plug in a custom\r\n * credential source (vault, secrets manager, UI form, etc.) — the resolver\r\n * is invoked lazily on every tool call, so it's safe to import the tools\r\n * before configuring auth.\r\n */\r\nimport { tool } from \"@langchain/core/tools\";\r\nimport { z } from \"zod\";\r\n\r\n// JSON.parse with a typed fallback for transient HTML responses from proxies.\r\nfunction parseJsonSafe<T>(text: string, fallback: T): T {\r\n try { return JSON.parse(text) as T; } catch { return fallback; }\r\n}\r\n\r\n// Heuristic binary detection on the leading bytes of a buffer. Same logic as\r\n// Jarela's documents indexer; inlined to avoid pulling that whole subsystem\r\n// into a standalone package.\r\nfunction isLikelyBinary(buf: Buffer): boolean {\r\n const len = Math.min(buf.length, 4096);\r\n if (len === 0) return false;\r\n let suspicious = 0;\r\n for (let i = 0; i < len; i++) {\r\n const b = buf[i] as number;\r\n // NUL byte = almost certainly binary.\r\n if (b === 0) return true;\r\n // Outside printable ASCII + common whitespace and not high-bit UTF-8.\r\n if (b < 0x09 || (b > 0x0d && b < 0x20)) suspicious++;\r\n }\r\n return suspicious / len > 0.05;\r\n}\r\n\r\nexport interface GitHubAuth {\r\n token: string;\r\n}\r\n\r\nexport type AuthResolver = () => GitHubAuth | { error: string };\r\n\r\nlet _resolver: AuthResolver = resolveGithubAuthFromEnv;\r\n\r\nexport function setAuthResolver(fn: AuthResolver): void {\r\n _resolver = fn;\r\n}\r\n\r\nexport function resolveGithubAuthFromEnv(): GitHubAuth | { error: string } {\r\n const env = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;\r\n if (env && env.trim()) return { token: env.trim() };\r\n return {\r\n error:\r\n \"GitHub not configured. Set GITHUB_TOKEN or GH_TOKEN env var, or call \" +\r\n \"setAuthResolver() with your own credential provider.\",\r\n };\r\n}\r\n\r\n// Exposed so external probe / test endpoints can verify the resolver works.\r\nexport function _resolveGithubAuth(): GitHubAuth | { error: string } {\r\n return resolveAuth();\r\n}\r\n\r\nfunction resolveAuth(): GitHubAuth | { error: string } {\r\n return _resolver();\r\n}\r\n\r\nconst API = \"https://api.github.com\";\r\n\r\nasync function ghFetch(\r\n auth: GitHubAuth,\r\n path: string,\r\n init?: RequestInit,\r\n): Promise<unknown> {\r\n const url = path.startsWith(\"http\") ? path : `${API}${path}`;\r\n const res = await fetch(url, {\r\n ...init,\r\n headers: {\r\n Authorization: `Bearer ${auth.token}`,\r\n Accept: \"application/vnd.github+json\",\r\n \"X-GitHub-Api-Version\": \"2022-11-28\",\r\n \"User-Agent\": \"circuitwall-github-langchain\",\r\n ...(init?.headers ?? {}),\r\n },\r\n });\r\n const text = await res.text();\r\n if (!res.ok) {\r\n return { error: `GitHub ${res.status}: ${text.slice(0, 500)}`, url };\r\n }\r\n if (!text) return {};\r\n return parseJsonSafe<unknown>(text, text);\r\n}\r\n\r\n// Low-level escape hatch — callers that need to hit a GitHub endpoint not yet\r\n// wrapped as a tool can call this directly.\r\nexport async function githubFetch(\r\n auth: GitHubAuth,\r\n path: string,\r\n init?: RequestInit,\r\n): Promise<unknown> {\r\n return ghFetch(auth, path, init);\r\n}\r\n\r\n// Back-compat alias for the underscore-prefixed name used by Jarela's\r\n// sibling document-indexer module.\r\nexport async function _ghFetch(\r\n auth: GitHubAuth,\r\n path: string,\r\n init?: RequestInit,\r\n): Promise<unknown> {\r\n return ghFetch(auth, path, init);\r\n}\r\n\r\n// ── Shared helpers ─────────────────────────────────────────────────────────\r\n\r\nconst BODY_CAP = 20_000;\r\nconst COMMENT_CAP = 8_000;\r\nconst PATCH_CAP = 8_000;\r\nconst SNIPPET_CAP = 400;\r\n\r\n// Pure-fn body cap. Returns the same `body` field shape as the existing\r\n// inline ternaries in github_get_issue / github_get_pull (str + truncated\r\n// flag) so the agent doesn't need to handle two shapes.\r\nexport function truncate(text: string, cap: number): { text: string; truncated: boolean } {\r\n if (text.length <= cap) return { text, truncated: false };\r\n return { text: text.slice(0, cap), truncated: true };\r\n}\r\n\r\n// `/repos/.../contents/{path}` returns a base64-encoded blob; the API also\r\n// returns the same response shape for directories (as an array). Decode +\r\n// detect binary so the agent gets useful output for text and a clear\r\n// not-text signal for everything else.\r\nexport interface DecodedBlob {\r\n binary: boolean;\r\n text?: string;\r\n size_bytes: number;\r\n}\r\nexport function decodeContentsBlob(content: string, encoding: string | undefined): DecodedBlob {\r\n if (!content) return { binary: false, text: \"\", size_bytes: 0 };\r\n const b64 = encoding === \"base64\" ? content.replace(/\\s+/g, \"\") : \"\";\r\n const buf = b64 ? Buffer.from(b64, \"base64\") : Buffer.from(content, \"utf8\");\r\n if (isLikelyBinary(buf)) return { binary: true, size_bytes: buf.length };\r\n return { binary: false, text: buf.toString(\"utf8\"), size_bytes: buf.length };\r\n}\r\n\r\n// Trim repo URLs on issue/PR responses to user-facing html_urls (the API\r\n// returns api.github.com/repos/... which is useless for a human).\r\ntype GhUser = { login?: string } | null;\r\ntype GhLabel = { name?: string };\r\n\r\nfunction liteUser(u: unknown): string | null {\r\n return (u as GhUser)?.login ?? null;\r\n}\r\nfunction liteLabels(labels: unknown): string[] {\r\n return (labels as GhLabel[] | undefined ?? []).map((l) => l.name).filter(Boolean) as string[];\r\n}\r\n\r\ntype GhIssueLite = {\r\n number?: number;\r\n title?: string;\r\n state?: string;\r\n html_url?: string;\r\n user?: GhUser;\r\n labels?: GhLabel[];\r\n pull_request?: unknown; // presence means \"this issue is actually a PR\"\r\n updated_at?: string;\r\n comments?: number;\r\n};\r\n\r\n// ── Issue tools ────────────────────────────────────────────────────────────\r\n\r\nexport const githubSearchIssuesTool = tool(\r\n async ({ q, repo, max_results }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const limit = Math.min(max_results ?? 25, 100);\r\n // `repo:owner/name` is the dominant filter — accept it as a separate\r\n // parameter so the agent doesn't have to remember GitHub's search syntax\r\n // for the common case. Anything else goes in `q`.\r\n const query = repo ? `repo:${repo} ${q}` : q;\r\n const data = await ghFetch(\r\n auth,\r\n `/search/issues?q=${encodeURIComponent(query)}&per_page=${limit}`,\r\n ) as { items?: GhIssueLite[]; total_count?: number; error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({\r\n total: data.total_count ?? 0,\r\n items: (data.items ?? []).map((i) => ({\r\n number: i.number,\r\n title: i.title,\r\n state: i.state,\r\n is_pr: !!i.pull_request,\r\n url: i.html_url,\r\n user: liteUser(i.user),\r\n labels: liteLabels(i.labels),\r\n updated_at: i.updated_at,\r\n comments: i.comments ?? 0,\r\n })),\r\n });\r\n },\r\n {\r\n name: \"github_search_issues\",\r\n description:\r\n \"Search GitHub issues AND pull requests with the same query syntax as the github.com search bar. \" +\r\n \"**PREFER THIS over shell-exec'ing the `gh` CLI.** Pass `repo` (\\\"owner/name\\\") to scope the search \" +\r\n \"to a single repo — the tool prepends `repo:owner/name ` automatically. The `q` body accepts the \" +\r\n \"full GitHub search vocabulary: 'is:issue is:open assignee:@me', 'is:pr review-requested:@me', \" +\r\n \"'label:bug created:>2026-01-01', etc. `is_pr` in the response distinguishes PRs from issues.\",\r\n schema: z.object({\r\n q: z.string().describe(\"GitHub search query (e.g. 'is:open is:issue label:bug')\"),\r\n repo: z.string().optional().describe(\"Optional 'owner/name' shortcut; prepended as repo: filter\"),\r\n max_results: z.number().optional().describe(\"Max items (default 25, max 100)\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubGetIssueTool = tool(\r\n async ({ owner, repo, number }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${number}`,\r\n ) as Record<string, unknown> & { error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n const assignees = (data.assignees as Array<{ login?: string }> | undefined ?? [])\r\n .map((a) => a.login).filter(Boolean);\r\n const cap = truncate(typeof data.body === \"string\" ? data.body : \"\", BODY_CAP);\r\n return JSON.stringify({\r\n number: data.number,\r\n title: data.title,\r\n state: data.state,\r\n is_pr: !!data.pull_request,\r\n url: data.html_url,\r\n author: liteUser(data.user),\r\n labels: liteLabels(data.labels),\r\n assignees,\r\n created_at: data.created_at,\r\n updated_at: data.updated_at,\r\n closed_at: data.closed_at,\r\n comments: data.comments,\r\n body: cap.text,\r\n truncated: cap.truncated,\r\n });\r\n },\r\n {\r\n name: \"github_get_issue\",\r\n description:\r\n \"Fetch a single issue (or PR — same endpoint) by number. Returns body capped at 20KB, plus labels, \" +\r\n \"assignees, and timestamps. **PREFER THIS over shell-exec'ing the `gh` CLI.**\",\r\n schema: z.object({\r\n owner: z.string().describe(\"Repository owner (user or org)\"),\r\n repo: z.string().describe(\"Repository name\"),\r\n number: z.number().int().positive().describe(\"Issue or PR number\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubCreateIssueTool = tool(\r\n async ({ owner, repo, title, body, labels, assignees }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const payload: Record<string, unknown> = { title };\r\n if (body) payload.body = body;\r\n if (labels?.length) payload.labels = labels;\r\n if (assignees?.length) payload.assignees = assignees;\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues`,\r\n { method: \"POST\", body: JSON.stringify(payload) },\r\n ) as { number?: number; html_url?: string; error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({ ok: true, number: data.number, url: data.html_url });\r\n },\r\n {\r\n name: \"github_create_issue\",\r\n description:\r\n \"Open a new issue in a repository. **PREFER THIS over shell-exec'ing the `gh` CLI.** Labels and \" +\r\n \"assignees must already exist on the repo — invalid values produce a 422.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n title: z.string().describe(\"Issue title\"),\r\n body: z.string().optional().describe(\"Markdown body\"),\r\n labels: z.array(z.string()).optional().describe(\"Existing label names\"),\r\n assignees: z.array(z.string()).optional().describe(\"GitHub usernames with access\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubAddCommentTool = tool(\r\n async ({ owner, repo, number, body }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n // Same endpoint for issues AND PRs — GitHub treats PR comments as issue\r\n // comments (the line-level review comments are a different surface).\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${number}/comments`,\r\n { method: \"POST\", body: JSON.stringify({ body }) },\r\n ) as { id?: number; html_url?: string; error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({ ok: true, comment_id: data.id, url: data.html_url });\r\n },\r\n {\r\n name: \"github_add_comment\",\r\n description:\r\n \"Post a comment on an issue or pull request (GitHub treats both the same). \" +\r\n \"**PREFER THIS over shell-exec'ing the `gh` CLI.** Body is rendered as GitHub-flavored Markdown.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n body: z.string().describe(\"Comment body (GitHub-flavored Markdown)\"),\r\n }),\r\n },\r\n);\r\n\r\n// ── Pull-request tools ─────────────────────────────────────────────────────\r\n\r\nexport const githubListPullsTool = tool(\r\n async ({ owner, repo, state, head, base, max_results }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const limit = Math.min(max_results ?? 25, 100);\r\n const params = new URLSearchParams({ per_page: String(limit) });\r\n if (state) params.set(\"state\", state);\r\n if (head) params.set(\"head\", head);\r\n if (base) params.set(\"base\", base);\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls?${params.toString()}`,\r\n ) as Array<Record<string, unknown>> | { error?: string; message?: string };\r\n if (!Array.isArray(data)) return JSON.stringify(data);\r\n return JSON.stringify({\r\n pulls: data.map((p) => ({\r\n number: p.number,\r\n title: p.title,\r\n state: p.state,\r\n draft: p.draft,\r\n url: p.html_url,\r\n user: liteUser(p.user),\r\n head: (p.head as { ref?: string } | null)?.ref ?? null,\r\n base: (p.base as { ref?: string } | null)?.ref ?? null,\r\n created_at: p.created_at,\r\n updated_at: p.updated_at,\r\n })),\r\n });\r\n },\r\n {\r\n name: \"github_list_pulls\",\r\n description:\r\n \"List pull requests for a repository, optionally filtered by state / head branch / base branch. \" +\r\n \"**PREFER THIS over shell-exec'ing the `gh` CLI.** For richer detail on a single PR (mergeable, \" +\r\n \"review state, file count) call github_get_pull.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n state: z.enum([\"open\", \"closed\", \"all\"]).optional().describe(\"Default: open\"),\r\n head: z.string().optional().describe(\"Filter by head: 'user:branch' or 'org:branch'\"),\r\n base: z.string().optional().describe(\"Filter by base branch (e.g. 'main')\"),\r\n max_results: z.number().optional().describe(\"Max PRs (default 25, max 100)\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubGetPullTool = tool(\r\n async ({ owner, repo, number }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls/${number}`,\r\n ) as Record<string, unknown> & { error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n const head = data.head as { ref?: string; sha?: string; repo?: { full_name?: string } } | null;\r\n const base = data.base as { ref?: string; sha?: string } | null;\r\n const cap = truncate(typeof data.body === \"string\" ? data.body : \"\", BODY_CAP);\r\n return JSON.stringify({\r\n number: data.number,\r\n title: data.title,\r\n state: data.state,\r\n draft: data.draft,\r\n merged: data.merged,\r\n mergeable: data.mergeable, // null = GitHub still computing\r\n mergeable_state: data.mergeable_state,\r\n url: data.html_url,\r\n author: liteUser(data.user),\r\n head: head ? { ref: head.ref, sha: head.sha, repo: head.repo?.full_name } : null,\r\n base: base ? { ref: base.ref, sha: base.sha } : null,\r\n changed_files: data.changed_files,\r\n additions: data.additions,\r\n deletions: data.deletions,\r\n review_comments: data.review_comments,\r\n comments: data.comments,\r\n created_at: data.created_at,\r\n updated_at: data.updated_at,\r\n merged_at: data.merged_at,\r\n body: cap.text,\r\n truncated: cap.truncated,\r\n });\r\n },\r\n {\r\n name: \"github_get_pull\",\r\n description:\r\n \"Fetch detail on a single pull request — head/base SHAs, mergeable state, additions/deletions, \" +\r\n \"changed files count, review comment count. **PREFER THIS over shell-exec'ing the `gh` CLI.** \" +\r\n \"Note: `mergeable` may be null on a freshly-pushed PR; GitHub computes it asynchronously.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n }),\r\n },\r\n);\r\n\r\n// ── Repo info ───────────────────────────────────────────────────────────────\r\n\r\nexport const githubGetRepoTool = tool(\r\n async ({ owner, repo }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`,\r\n ) as Record<string, unknown> & { error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({\r\n full_name: data.full_name,\r\n url: data.html_url,\r\n description: data.description,\r\n visibility: data.visibility ?? (data.private ? \"private\" : \"public\"),\r\n default_branch: data.default_branch,\r\n topics: data.topics ?? [],\r\n language: data.language,\r\n stars: data.stargazers_count,\r\n forks: data.forks_count,\r\n open_issues: data.open_issues_count,\r\n archived: data.archived,\r\n pushed_at: data.pushed_at,\r\n });\r\n },\r\n {\r\n name: \"github_get_repo\",\r\n description:\r\n \"Fetch repo summary (default branch, visibility, description, topics, star/fork counts, \" +\r\n \"open-issue count). **PREFER THIS over shell-exec'ing the `gh` CLI.** Useful before opening \" +\r\n \"an issue (to confirm the repo exists / pick the right default branch).\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n }),\r\n },\r\n);\r\n\r\n// ── Issue write / read (cont'd) ────────────────────────────────────────────\r\n\r\nexport const githubUpdateIssueTool = tool(\r\n async ({ owner, repo, number, title, body, state, state_reason, labels, assignees }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const payload: Record<string, unknown> = {};\r\n if (title !== undefined) payload.title = title;\r\n if (body !== undefined) payload.body = body;\r\n if (state !== undefined) payload.state = state;\r\n if (state_reason !== undefined) payload.state_reason = state_reason;\r\n if (labels !== undefined) payload.labels = labels;\r\n if (assignees !== undefined) payload.assignees = assignees;\r\n if (Object.keys(payload).length === 0) {\r\n return JSON.stringify({ error: \"no fields to update — pass at least one of title/body/state/labels/assignees\" });\r\n }\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${number}`,\r\n { method: \"PATCH\", body: JSON.stringify(payload) },\r\n ) as { number?: number; html_url?: string; state?: string; error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({\r\n ok: true,\r\n number: data.number,\r\n state: data.state,\r\n url: data.html_url,\r\n updated_fields: Object.keys(payload),\r\n });\r\n },\r\n {\r\n name: \"github_update_issue\",\r\n description:\r\n \"Edit an issue or PR (same endpoint): change title, body, labels, assignees, or close/reopen via \" +\r\n \"`state`. **PREFER THIS over shell-exec'ing the `gh` CLI.** Pass `state: \\\"closed\\\"` with \" +\r\n \"`state_reason: \\\"completed\\\"` for done-as-intended, or `\\\"not_planned\\\"` for won't-fix.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n title: z.string().optional(),\r\n body: z.string().optional().describe(\"New issue body (Markdown). Replaces, doesn't append.\"),\r\n state: z.enum([\"open\", \"closed\"]).optional(),\r\n state_reason: z.enum([\"completed\", \"not_planned\", \"reopened\"]).optional(),\r\n labels: z.array(z.string()).optional().describe(\"Replaces the label set entirely.\"),\r\n assignees: z.array(z.string()).optional().describe(\"Replaces the assignee set entirely.\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubListIssueCommentsTool = tool(\r\n async ({ owner, repo, number, max_results }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const limit = Math.min(max_results ?? 25, 100);\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/issues/${number}/comments?per_page=${limit}`,\r\n ) as Array<Record<string, unknown>> | { error?: string };\r\n if (!Array.isArray(data)) return JSON.stringify(data);\r\n return JSON.stringify({\r\n comments: data.map((c) => {\r\n const cap = truncate(typeof c.body === \"string\" ? c.body : \"\", COMMENT_CAP);\r\n return {\r\n id: c.id,\r\n user: liteUser(c.user),\r\n created_at: c.created_at,\r\n updated_at: c.updated_at,\r\n url: c.html_url,\r\n body: cap.text,\r\n truncated: cap.truncated,\r\n };\r\n }),\r\n });\r\n },\r\n {\r\n name: \"github_list_issue_comments\",\r\n description:\r\n \"List comments on an issue or PR. **PREFER THIS over shell-exec'ing the `gh` CLI.** Each comment \" +\r\n \"body is capped at 8 KB; `truncated: true` flags ones that hit the cap.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n max_results: z.number().optional().describe(\"Max comments (default 25, max 100)\"),\r\n }),\r\n },\r\n);\r\n\r\n// ── Pull-request write ─────────────────────────────────────────────────────\r\n\r\nexport const githubCreatePullTool = tool(\r\n async ({ owner, repo, title, head, base, body, draft, maintainer_can_modify }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const payload: Record<string, unknown> = { title, head, base };\r\n if (body !== undefined) payload.body = body;\r\n if (draft !== undefined) payload.draft = draft;\r\n if (maintainer_can_modify !== undefined) payload.maintainer_can_modify = maintainer_can_modify;\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls`,\r\n { method: \"POST\", body: JSON.stringify(payload) },\r\n ) as { number?: number; html_url?: string; draft?: boolean; error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({ ok: true, number: data.number, draft: data.draft, url: data.html_url });\r\n },\r\n {\r\n name: \"github_create_pull\",\r\n description:\r\n \"Open a pull request. **PREFER THIS over shell-exec'ing the `gh` CLI.** `head` is the branch with \" +\r\n \"your changes (use `user:branch` for cross-fork PRs); `base` is the branch you want to merge into. \" +\r\n \"Returns 422 if the head/base pair has no diff or if the branches don't exist.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n title: z.string(),\r\n head: z.string().describe(\"Source branch ('feature/x' for same-repo, 'user:branch' for fork PRs)\"),\r\n base: z.string().describe(\"Target branch (typically 'main')\"),\r\n body: z.string().optional().describe(\"PR description (Markdown)\"),\r\n draft: z.boolean().optional().describe(\"Open as draft (default false)\"),\r\n maintainer_can_modify: z.boolean().optional()\r\n .describe(\"Allow upstream maintainers to push to your fork branch (default true)\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubUpdatePullTool = tool(\r\n async ({ owner, repo, number, title, body, state, base, maintainer_can_modify }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const payload: Record<string, unknown> = {};\r\n if (title !== undefined) payload.title = title;\r\n if (body !== undefined) payload.body = body;\r\n if (state !== undefined) payload.state = state;\r\n if (base !== undefined) payload.base = base;\r\n if (maintainer_can_modify !== undefined) payload.maintainer_can_modify = maintainer_can_modify;\r\n if (Object.keys(payload).length === 0) {\r\n return JSON.stringify({ error: \"no fields to update — pass at least one of title/body/state/base\" });\r\n }\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls/${number}`,\r\n { method: \"PATCH\", body: JSON.stringify(payload) },\r\n ) as { number?: number; html_url?: string; state?: string; error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({\r\n ok: true,\r\n number: data.number,\r\n state: data.state,\r\n url: data.html_url,\r\n updated_fields: Object.keys(payload),\r\n });\r\n },\r\n {\r\n name: \"github_update_pull\",\r\n description:\r\n \"Edit a pull request: title, body, base branch, or close/reopen. **PREFER THIS over shell-exec'ing \" +\r\n \"the `gh` CLI.** To MERGE a PR use github_merge_pull — `state` here only opens / closes.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n title: z.string().optional(),\r\n body: z.string().optional(),\r\n state: z.enum([\"open\", \"closed\"]).optional()\r\n .describe(\"`closed` here means 'close without merging'. Use github_merge_pull to merge.\"),\r\n base: z.string().optional().describe(\"Re-target the PR at a different base branch.\"),\r\n maintainer_can_modify: z.boolean().optional(),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubMergePullTool = tool(\r\n async ({ owner, repo, number, method, commit_title, commit_message, sha }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const payload: Record<string, unknown> = {};\r\n if (commit_title !== undefined) payload.commit_title = commit_title;\r\n if (commit_message !== undefined) payload.commit_message = commit_message;\r\n if (method !== undefined) payload.merge_method = method;\r\n if (sha !== undefined) payload.sha = sha;\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls/${number}/merge`,\r\n { method: \"PUT\", body: JSON.stringify(payload) },\r\n ) as { merged?: boolean; sha?: string; message?: string; error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({\r\n ok: !!data.merged,\r\n merged_sha: data.sha ?? null,\r\n message: data.message ?? null,\r\n });\r\n },\r\n {\r\n name: \"github_merge_pull\",\r\n description:\r\n \"Merge a pull request. **PREFER THIS over shell-exec'ing the `gh` CLI.** `method` selects the \" +\r\n \"merge strategy (default `merge`); pass `sha` to refuse the merge if the PR head has been \" +\r\n \"force-pushed since you last looked. 405 means the PR isn't mergeable yet (still in CI / has \" +\r\n \"conflicts / needs review); 409 means the `sha` guard tripped.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n method: z.enum([\"merge\", \"squash\", \"rebase\"]).optional(),\r\n commit_title: z.string().optional()\r\n .describe(\"Title for the merge commit (or squash commit). Default: GitHub's auto-generated title.\"),\r\n commit_message: z.string().optional(),\r\n sha: z.string().optional()\r\n .describe(\"Refuse to merge unless the PR head still matches this SHA — guards against TOCTOU.\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubRequestReviewersTool = tool(\r\n async ({ owner, repo, number, reviewers, team_reviewers }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n if (!reviewers?.length && !team_reviewers?.length) {\r\n return JSON.stringify({ error: \"pass at least one of reviewers or team_reviewers\" });\r\n }\r\n const payload: Record<string, unknown> = {};\r\n if (reviewers?.length) payload.reviewers = reviewers;\r\n if (team_reviewers?.length) payload.team_reviewers = team_reviewers;\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls/${number}/requested_reviewers`,\r\n { method: \"POST\", body: JSON.stringify(payload) },\r\n ) as {\r\n requested_reviewers?: Array<{ login?: string }>;\r\n requested_teams?: Array<{ slug?: string }>;\r\n html_url?: string;\r\n error?: string;\r\n };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({\r\n ok: true,\r\n requested_users: (data.requested_reviewers ?? []).map((u) => u.login).filter(Boolean),\r\n requested_teams: (data.requested_teams ?? []).map((t) => t.slug).filter(Boolean),\r\n url: data.html_url,\r\n });\r\n },\r\n {\r\n name: \"github_request_reviewers\",\r\n description:\r\n \"Request review on a pull request from one or more users and/or teams. **PREFER THIS over \" +\r\n \"shell-exec'ing the `gh` CLI.** GitHub silently drops invalid usernames / team slugs — check the \" +\r\n \"returned `requested_users` / `requested_teams` to see who actually got a notification.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n reviewers: z.array(z.string()).optional().describe(\"GitHub usernames\"),\r\n team_reviewers: z.array(z.string()).optional().describe(\"Team slugs (org-scoped)\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubCreateReviewTool = tool(\r\n async ({ owner, repo, number, event, body, commit_id }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n if (event === \"REQUEST_CHANGES\" && !body?.trim()) {\r\n return JSON.stringify({ error: \"REQUEST_CHANGES requires a non-empty body explaining what to change\" });\r\n }\r\n const payload: Record<string, unknown> = { event };\r\n if (body !== undefined) payload.body = body;\r\n if (commit_id !== undefined) payload.commit_id = commit_id;\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls/${number}/reviews`,\r\n { method: \"POST\", body: JSON.stringify(payload) },\r\n ) as { id?: number; state?: string; html_url?: string; error?: string };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({ ok: true, review_id: data.id, state: data.state, url: data.html_url });\r\n },\r\n {\r\n name: \"github_create_review\",\r\n description:\r\n \"Submit a pull-request review (approve / request changes / leave a comment). **PREFER THIS over \" +\r\n \"shell-exec'ing the `gh` CLI.** `event=APPROVE` doesn't require a body. `event=REQUEST_CHANGES` \" +\r\n \"requires a body. Line-level inline review comments aren't supported by this tool yet — use the \" +\r\n \"GitHub UI for those.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n event: z.enum([\"APPROVE\", \"REQUEST_CHANGES\", \"COMMENT\"]),\r\n body: z.string().optional().describe(\"Review summary (Markdown). Required for REQUEST_CHANGES.\"),\r\n commit_id: z.string().optional().describe(\"Pin the review to a specific commit SHA.\"),\r\n }),\r\n },\r\n);\r\n\r\n// ── Pull-request read (cont'd) ─────────────────────────────────────────────\r\n\r\nexport const githubListPullFilesTool = tool(\r\n async ({ owner, repo, number, max_results }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const limit = Math.min(max_results ?? 30, 100);\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls/${number}/files?per_page=${limit}`,\r\n ) as Array<Record<string, unknown>> | { error?: string };\r\n if (!Array.isArray(data)) return JSON.stringify(data);\r\n return JSON.stringify({\r\n files: data.map((f) => {\r\n const patch = typeof f.patch === \"string\" ? truncate(f.patch, PATCH_CAP) : null;\r\n return {\r\n filename: f.filename,\r\n status: f.status, // added | modified | removed | renamed | …\r\n additions: f.additions,\r\n deletions: f.deletions,\r\n changes: f.changes,\r\n previous_filename: f.previous_filename,\r\n sha: f.sha,\r\n patch: patch?.text,\r\n patch_truncated: patch?.truncated ?? false,\r\n };\r\n }),\r\n });\r\n },\r\n {\r\n name: \"github_list_pull_files\",\r\n description:\r\n \"List files changed in a pull request, with per-file additions/deletions and (capped) patch text. \" +\r\n \"**PREFER THIS over shell-exec'ing the `gh` CLI.** Each patch caps at 8 KB; `patch_truncated: true` \" +\r\n \"means the diff was longer than that. GitHub itself caps the response at 3000 files.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n max_results: z.number().optional().describe(\"Max files (default 30, max 100)\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubListPullReviewsTool = tool(\r\n async ({ owner, repo, number, max_results }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const limit = Math.min(max_results ?? 30, 100);\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/pulls/${number}/reviews?per_page=${limit}`,\r\n ) as Array<Record<string, unknown>> | { error?: string };\r\n if (!Array.isArray(data)) return JSON.stringify(data);\r\n return JSON.stringify({\r\n reviews: data.map((r) => {\r\n const cap = truncate(typeof r.body === \"string\" ? r.body : \"\", COMMENT_CAP);\r\n return {\r\n id: r.id,\r\n user: liteUser(r.user),\r\n state: r.state, // APPROVED | CHANGES_REQUESTED | COMMENTED | DISMISSED | PENDING\r\n submitted_at: r.submitted_at,\r\n commit_id: r.commit_id,\r\n url: r.html_url,\r\n body: cap.text,\r\n truncated: cap.truncated,\r\n };\r\n }),\r\n });\r\n },\r\n {\r\n name: \"github_list_pull_reviews\",\r\n description:\r\n \"List reviews submitted on a pull request (approvals, change-requests, comment-only). **PREFER THIS \" +\r\n \"over shell-exec'ing the `gh` CLI.** Use this to check whether a PR is approved before calling \" +\r\n \"github_merge_pull.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n number: z.number().int().positive(),\r\n max_results: z.number().optional().describe(\"Max reviews (default 30, max 100)\"),\r\n }),\r\n },\r\n);\r\n\r\n// ── Repo content ───────────────────────────────────────────────────────────\r\n\r\nexport const githubListBranchesTool = tool(\r\n async ({ owner, repo, max_results }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const limit = Math.min(max_results ?? 30, 100);\r\n const data = await ghFetch(\r\n auth,\r\n `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/branches?per_page=${limit}`,\r\n ) as Array<Record<string, unknown>> | { error?: string };\r\n if (!Array.isArray(data)) return JSON.stringify(data);\r\n return JSON.stringify({\r\n branches: data.map((b) => ({\r\n name: b.name,\r\n commit_sha: (b.commit as { sha?: string } | null)?.sha ?? null,\r\n protected: b.protected,\r\n })),\r\n });\r\n },\r\n {\r\n name: \"github_list_branches\",\r\n description:\r\n \"List branches in a repository with their head SHAs and protection state. **PREFER THIS over \" +\r\n \"shell-exec'ing the `gh` CLI.** Useful before opening a PR (confirm the head branch exists \" +\r\n \"and is the SHA you expect).\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n max_results: z.number().optional().describe(\"Max branches (default 30, max 100)\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubGetFileTool = tool(\r\n async ({ owner, repo, path, ref }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const url = `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/contents/${path\r\n .split(\"/\").map(encodeURIComponent).join(\"/\")}` + (ref ? `?ref=${encodeURIComponent(ref)}` : \"\");\r\n const data = await ghFetch(auth, url) as Record<string, unknown> | Array<unknown> | { error?: string };\r\n if (!Array.isArray(data) && (data as { error?: string }).error) {\r\n return JSON.stringify(data);\r\n }\r\n if (Array.isArray(data) || (data as { type?: string }).type === \"dir\") {\r\n return JSON.stringify({\r\n error: `'${path}' is a directory; this tool only reads single files. Pass a path to a file.`,\r\n });\r\n }\r\n const f = data as { type?: string; encoding?: string; content?: string; sha?: string;\r\n size?: number; html_url?: string; path?: string };\r\n if (f.type !== \"file\") {\r\n return JSON.stringify({ error: `unsupported content type '${f.type ?? \"?\"}' at ${path}` });\r\n }\r\n const decoded = decodeContentsBlob(f.content ?? \"\", f.encoding);\r\n if (decoded.binary) {\r\n return JSON.stringify({\r\n path: f.path, sha: f.sha, url: f.html_url,\r\n binary: true, size_bytes: decoded.size_bytes,\r\n });\r\n }\r\n const cap = truncate(decoded.text ?? \"\", BODY_CAP);\r\n return JSON.stringify({\r\n path: f.path, sha: f.sha, url: f.html_url,\r\n binary: false, size_bytes: decoded.size_bytes,\r\n content: cap.text, truncated: cap.truncated,\r\n });\r\n },\r\n {\r\n name: \"github_get_file\",\r\n description:\r\n \"Read a file's contents from a repo at an optional ref (branch / tag / commit SHA). **PREFER THIS \" +\r\n \"over shell-exec'ing the `gh` CLI.** Returns up to 20 KB of UTF-8 text; longer files are truncated \" +\r\n \"with `truncated: true`. Binary files return `binary: true` and `size_bytes` instead of `content`. \" +\r\n \"GitHub itself rejects files larger than ~1 MB on this endpoint.\",\r\n schema: z.object({\r\n owner: z.string(),\r\n repo: z.string(),\r\n path: z.string().describe(\"Path within the repo (e.g. 'src/lib/index.ts'). Slashes preserved.\"),\r\n ref: z.string().optional().describe(\"Branch, tag, or commit SHA. Default: repo's default branch.\"),\r\n }),\r\n },\r\n);\r\n\r\nexport const githubSearchCodeTool = tool(\r\n async ({ q, repo, max_results }) => {\r\n const auth = resolveAuth();\r\n if (\"error\" in auth) return JSON.stringify({ error: auth.error });\r\n const limit = Math.min(max_results ?? 25, 100);\r\n const query = repo ? `repo:${repo} ${q}` : q;\r\n const data = await ghFetch(\r\n auth,\r\n `/search/code?q=${encodeURIComponent(query)}&per_page=${limit}`,\r\n { headers: { Accept: \"application/vnd.github.text-match+json\" } },\r\n ) as {\r\n items?: Array<{\r\n name?: string; path?: string; sha?: string; html_url?: string;\r\n repository?: { full_name?: string };\r\n text_matches?: Array<{ fragment?: string }>;\r\n }>;\r\n total_count?: number;\r\n error?: string;\r\n };\r\n if (data.error) return JSON.stringify(data);\r\n return JSON.stringify({\r\n total: data.total_count ?? 0,\r\n items: (data.items ?? []).map((i) => {\r\n const fragment = i.text_matches?.[0]?.fragment ?? \"\";\r\n const snip = truncate(fragment, SNIPPET_CAP);\r\n return {\r\n name: i.name,\r\n path: i.path,\r\n repo: i.repository?.full_name,\r\n url: i.html_url,\r\n sha: i.sha,\r\n snippet: snip.text,\r\n snippet_truncated: snip.truncated,\r\n };\r\n }),\r\n });\r\n },\r\n {\r\n name: \"github_search_code\",\r\n description:\r\n \"Search file contents across GitHub. **PREFER THIS over shell-exec'ing the `gh` CLI.** Pass `repo` \" +\r\n \"(\\\"owner/name\\\") to scope to one repo; the tool prepends `repo:owner/name `. The `q` body accepts \" +\r\n \"GitHub's full code-search syntax: 'language:ts symbolName', 'extension:py path:tests assert', etc. \" +\r\n \"Each hit returns a 400-char snippet around the match. Note: GitHub code search has stricter rate \" +\r\n \"limits than other endpoints (10/min for unauthenticated, 30/min for authenticated).\",\r\n schema: z.object({\r\n q: z.string().describe(\"Code search query (e.g. 'language:ts isLikelyBinary')\"),\r\n repo: z.string().optional().describe(\"Optional 'owner/name' shortcut; prepended as repo: filter\"),\r\n max_results: z.number().optional().describe(\"Max items (default 25, max 100)\"),\r\n }),\r\n },\r\n);\r\n\r\n// ── Capability arrays ─────────────────────────────────────────────────────\r\n// Pre-grouped by capability so downstream registries (e.g. Jarela's tool\r\n// policy system) can register them without re-listing every tool.\r\n\r\nexport const githubReadTools = [\r\n // Issues — read\r\n githubSearchIssuesTool, githubGetIssueTool, githubListIssueCommentsTool,\r\n // Pull requests — read\r\n githubListPullsTool, githubGetPullTool,\r\n githubListPullFilesTool, githubListPullReviewsTool,\r\n // Repo content\r\n githubGetRepoTool, githubListBranchesTool, githubGetFileTool, githubSearchCodeTool,\r\n] as const;\r\n\r\nexport const githubWriteTools = [\r\n // Issues\r\n githubCreateIssueTool, githubUpdateIssueTool, githubAddCommentTool,\r\n // Pull requests (record edits — open/update/review)\r\n githubCreatePullTool, githubUpdatePullTool,\r\n githubRequestReviewersTool, githubCreateReviewTool,\r\n] as const;\r\n\r\n// merge_pull is execute: it triggers CI, deploys, and downstream automation.\r\nexport const githubExecuteTools = [githubMergePullTool] as const;\r\n\r\nexport const githubTools = [\r\n ...githubReadTools,\r\n ...githubWriteTools,\r\n ...githubExecuteTools,\r\n] as const;\r\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@circuitwall/github-langchain",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "LangChain tools for the GitHub REST API — direct REST calls, no MCP, no gh CLI, proxy-aware. Extracted from Jarela.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"author": "Andrew Ge Wu",
|
|
7
|
+
"homepage": "https://github.com/CircuitWall/jarela/tree/main/packages/github-langchain#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/CircuitWall/jarela.git",
|
|
11
|
+
"directory": "packages/github-langchain"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/CircuitWall/jarela/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"github",
|
|
18
|
+
"langchain",
|
|
19
|
+
"langgraph",
|
|
20
|
+
"tool",
|
|
21
|
+
"tools",
|
|
22
|
+
"agent",
|
|
23
|
+
"rest",
|
|
24
|
+
"pull-request",
|
|
25
|
+
"issue"
|
|
26
|
+
],
|
|
27
|
+
"type": "module",
|
|
28
|
+
"main": "./dist/index.cjs",
|
|
29
|
+
"module": "./dist/index.js",
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"import": "./dist/index.js",
|
|
35
|
+
"require": "./dist/index.cjs"
|
|
36
|
+
},
|
|
37
|
+
"./package.json": "./package.json"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"README.md",
|
|
42
|
+
"CHANGELOG.md",
|
|
43
|
+
"LICENSE"
|
|
44
|
+
],
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public",
|
|
47
|
+
"registry": "https://registry.npmjs.org"
|
|
48
|
+
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=20"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"build": "tsup",
|
|
54
|
+
"clean": "rimraf dist",
|
|
55
|
+
"typecheck": "tsc --noEmit"
|
|
56
|
+
},
|
|
57
|
+
"peerDependencies": {
|
|
58
|
+
"@langchain/core": ">=0.3.0",
|
|
59
|
+
"zod": ">=3.23.0 <5"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@langchain/core": "^1.1.46",
|
|
63
|
+
"rimraf": "^6.0.1",
|
|
64
|
+
"tsup": "^8.3.5",
|
|
65
|
+
"typescript": "^5.7.2",
|
|
66
|
+
"zod": "^3.25.0"
|
|
67
|
+
}
|
|
68
|
+
}
|