diff --git a/packages/client-github/.npmignore b/packages/client-github/.npmignore new file mode 100644 index 0000000000..078562ecea --- /dev/null +++ b/packages/client-github/.npmignore @@ -0,0 +1,6 @@ +* + +!dist/** +!package.json +!readme.md +!tsup.config.ts \ No newline at end of file diff --git a/packages/client-github/package.json b/packages/client-github/package.json new file mode 100644 index 0000000000..4b2a4a1501 --- /dev/null +++ b/packages/client-github/package.json @@ -0,0 +1,22 @@ +{ + "name": "@ai16z/client-github", + "version": "0.1.0", + "main": "dist/index.js", + "type": "module", + "types": "dist/index.d.ts", + "dependencies": { + "@ai16z/eliza": "workspace:*", + "@octokit/rest": "^20.0.2", + "@octokit/types": "^12.6.0", + "glob": "^10.3.10", + "simple-git": "^3.22.0" + }, + "devDependencies": { + "@types/glob": "^8.1.0", + "tsup": "^8.3.5" + }, + "scripts": { + "build": "tsup --format esm --dts", + "dev": "tsup --watch" + } +} \ No newline at end of file diff --git a/packages/client-github/src/index.ts b/packages/client-github/src/index.ts new file mode 100644 index 0000000000..59260baea7 --- /dev/null +++ b/packages/client-github/src/index.ts @@ -0,0 +1,236 @@ +import { Octokit } from "@octokit/rest"; +import { glob } from "glob"; +import simpleGit, { SimpleGit } from "simple-git"; +import path from "path"; +import fs from "fs/promises"; +import { existsSync } from "fs"; +import { createHash } from "crypto"; +import { + elizaLogger, + AgentRuntime, + Client, + IAgentRuntime, + Content, + Memory, + stringToUuid, + embeddingZeroVector, + splitChunks, + embed, +} from "@ai16z/eliza"; + +export interface GitHubConfig { + owner: string; + repo: string; + branch?: string; + path?: string; + token: string; +} + +export class GitHubClient { + private octokit: Octokit; + private git: SimpleGit; + private config: GitHubConfig; + private runtime: AgentRuntime; + private repoPath: string; + + constructor(runtime: AgentRuntime) { + this.runtime = runtime; + this.config = { + owner: runtime.getSetting("GITHUB_OWNER") as string, + repo: runtime.getSetting("GITHUB_REPO") as string, + branch: runtime.getSetting("GITHUB_BRANCH") as string, + path: runtime.getSetting("GITHUB_PATH") as string, + token: runtime.getSetting("GITHUB_API_TOKEN") as string, + }; + this.octokit = new Octokit({ auth: this.config.token }); + this.git = simpleGit(); + this.repoPath = path.join( + process.cwd(), + ".repos", + this.config.owner, + this.config.repo + ); + } + + async initialize() { + // Create repos directory if it doesn't exist + await fs.mkdir(path.join(process.cwd(), ".repos", this.config.owner), { + recursive: true, + }); + + // Clone or pull repository + if (!existsSync(this.repoPath)) { + await this.git.clone( + `https://github.com/${this.config.owner}/${this.config.repo}.git`, + this.repoPath + ); + } else { + const git = simpleGit(this.repoPath); + await git.pull(); + } + + // Checkout specified branch if provided + if (this.config.branch) { + const git = simpleGit(this.repoPath); + await git.checkout(this.config.branch); + } + } + + async createMemoriesFromFiles() { + console.log("Create memories"); + const searchPath = this.config.path + ? path.join(this.repoPath, this.config.path, "**/*") + : path.join(this.repoPath, "**/*"); + + const files = await glob(searchPath, { nodir: true }); + + for (const file of files) { + const relativePath = path.relative(this.repoPath, file); + const content = await fs.readFile(file, "utf-8"); + const contentHash = createHash("sha256") + .update(content) + .digest("hex"); + const knowledgeId = stringToUuid( + `github-${this.config.owner}-${this.config.repo}-${relativePath}` + ); + + const existingDocument = + await this.runtime.documentsManager.getMemoryById(knowledgeId); + + if ( + existingDocument && + existingDocument.content["hash"] == contentHash + ) { + continue; + } + + console.log( + "Processing knowledge for ", + this.runtime.character.name, + " - ", + relativePath + ); + + const memory: Memory = { + id: knowledgeId, + agentId: this.runtime.agentId, + userId: this.runtime.agentId, + roomId: this.runtime.agentId, + content: { + text: content, + hash: contentHash, + source: "github", + attachments: [], + metadata: { + path: relativePath, + repo: this.config.repo, + owner: this.config.owner, + }, + }, + embedding: embeddingZeroVector, + }; + + await this.runtime.documentsManager.createMemory(memory); + + // Only split if content exceeds 4000 characters + const fragments = + content.length > 4000 + ? await splitChunks(content, 2000, 200) + : [content]; + + for (const fragment of fragments) { + // Skip empty fragments + if (!fragment.trim()) continue; + + // Add file path context to the fragment before embedding + const fragmentWithPath = `File: ${relativePath}\n\n${fragment}`; + const embedding = await embed(this.runtime, fragmentWithPath); + + await this.runtime.knowledgeManager.createMemory({ + // We namespace the knowledge base uuid to avoid id + // collision with the document above. + id: stringToUuid(knowledgeId + fragment), + roomId: this.runtime.agentId, + agentId: this.runtime.agentId, + userId: this.runtime.agentId, + content: { + source: knowledgeId, + text: fragment, + }, + embedding, + }); + } + } + } + + async createPullRequest( + title: string, + branch: string, + files: Array<{ path: string; content: string }>, + description?: string + ) { + // Create new branch + const git = simpleGit(this.repoPath); + await git.checkout(["-b", branch]); + + // Write files + for (const file of files) { + const filePath = path.join(this.repoPath, file.path); + await fs.mkdir(path.dirname(filePath), { recursive: true }); + await fs.writeFile(filePath, file.content); + } + + // Commit and push changes + await git.add("."); + await git.commit(title); + await git.push("origin", branch); + + // Create PR + const pr = await this.octokit.pulls.create({ + owner: this.config.owner, + repo: this.config.repo, + title, + body: description || title, + head: branch, + base: this.config.branch || "main", + }); + + return pr.data; + } + + async createCommit( + message: string, + files: Array<{ path: string; content: string }> + ) { + const git = simpleGit(this.repoPath); + + // Write files + for (const file of files) { + const filePath = path.join(this.repoPath, file.path); + await fs.mkdir(path.dirname(filePath), { recursive: true }); + await fs.writeFile(filePath, file.content); + } + + // Commit and push changes + await git.add("."); + await git.commit(message); + await git.push(); + } +} + +export const GitHubClientInterface: Client = { + start: async (runtime: IAgentRuntime) => { + elizaLogger.log("GitHubClientInterface start"); + + const client = new GitHubClient(runtime as AgentRuntime); + await client.initialize(); + await client.createMemoriesFromFiles(); + + return client; + }, + stop: async (runtime: IAgentRuntime) => { + elizaLogger.log("GitHubClientInterface stop"); + }, +}; + +export default GitHubClientInterface; diff --git a/packages/client-github/tsconfig.json b/packages/client-github/tsconfig.json new file mode 100644 index 0000000000..7541efa69d --- /dev/null +++ b/packages/client-github/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/client-github/tsup.config.ts b/packages/client-github/tsup.config.ts new file mode 100644 index 0000000000..1a96f24afa --- /dev/null +++ b/packages/client-github/tsup.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + sourcemap: true, + clean: true, + format: ["esm"], // Ensure you're targeting CommonJS + external: [ + "dotenv", // Externalize dotenv to prevent bundling + "fs", // Externalize fs to use Node.js built-in module + "path", // Externalize other built-ins if necessary + "@reflink/reflink", + "@node-llama-cpp", + "https", + "http", + "agentkeepalive", + "safe-buffer", + // Add other modules you want to externalize + ], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2117991264..4092384721 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -431,6 +431,31 @@ importers: specifier: ^8.3.5 version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) + packages/client-github: + dependencies: + '@ai16z/eliza': + specifier: workspace:* + version: link:../core + '@octokit/rest': + specifier: ^20.0.2 + version: 20.1.1 + '@octokit/types': + specifier: ^12.6.0 + version: 12.6.0 + glob: + specifier: ^10.3.10 + version: 10.4.5 + simple-git: + specifier: ^3.22.0 + version: 3.27.0 + devDependencies: + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + tsup: + specifier: ^8.3.5 + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.15))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) + packages/client-telegram: dependencies: '@ai16z/eliza': @@ -3525,6 +3550,10 @@ packages: resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} engines: {node: '>= 14'} + '@octokit/auth-token@4.0.0': + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} + '@octokit/auth-token@5.1.1': resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} engines: {node: '>= 18'} @@ -3537,6 +3566,10 @@ packages: resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} engines: {node: '>= 14'} + '@octokit/core@5.2.0': + resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} + engines: {node: '>= 18'} + '@octokit/core@6.1.2': resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==} engines: {node: '>= 18'} @@ -3549,10 +3582,18 @@ packages: resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} engines: {node: '>= 14'} + '@octokit/endpoint@9.0.5': + resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} + engines: {node: '>= 18'} + '@octokit/graphql@5.0.6': resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} engines: {node: '>= 14'} + '@octokit/graphql@7.1.0': + resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} + engines: {node: '>= 18'} + '@octokit/graphql@8.1.1': resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==} engines: {node: '>= 18'} @@ -3572,6 +3613,9 @@ packages: '@octokit/openapi-types@18.1.1': resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} + '@octokit/openapi-types@20.0.0': + resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + '@octokit/openapi-types@22.2.0': resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} @@ -3587,6 +3631,12 @@ packages: peerDependencies: '@octokit/core': '>=6' + '@octokit/plugin-paginate-rest@11.3.1': + resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + '@octokit/plugin-paginate-rest@11.3.5': resolution: {integrity: sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==} engines: {node: '>= 18'} @@ -3604,6 +3654,18 @@ packages: peerDependencies: '@octokit/core': '>=3' + '@octokit/plugin-request-log@4.0.1': + resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-rest-endpoint-methods@13.2.2': + resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': ^5 + '@octokit/plugin-rest-endpoint-methods@13.2.6': resolution: {integrity: sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==} engines: {node: '>= 18'} @@ -3632,6 +3694,10 @@ packages: resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} engines: {node: '>= 14'} + '@octokit/request-error@5.1.0': + resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} + engines: {node: '>= 18'} + '@octokit/request-error@6.1.5': resolution: {integrity: sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==} engines: {node: '>= 18'} @@ -3640,6 +3706,10 @@ packages: resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} engines: {node: '>= 14'} + '@octokit/request@8.4.0': + resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} + engines: {node: '>= 18'} + '@octokit/request@9.1.3': resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==} engines: {node: '>= 18'} @@ -3648,12 +3718,19 @@ packages: resolution: {integrity: sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==} engines: {node: '>= 14'} + '@octokit/rest@20.1.1': + resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} + engines: {node: '>= 18'} + '@octokit/tsconfig@1.0.2': resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==} '@octokit/types@10.0.0': resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} + '@octokit/types@12.6.0': + resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} + '@octokit/types@13.6.1': resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==} @@ -4722,6 +4799,9 @@ packages: '@types/geojson@7946.0.14': resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} + '@types/glob@8.1.0': + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -4779,6 +4859,9 @@ packages: '@types/minimatch@3.0.5': resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} @@ -17157,6 +17240,8 @@ snapshots: '@octokit/auth-token@3.0.4': {} + '@octokit/auth-token@4.0.0': {} + '@octokit/auth-token@5.1.1': {} '@octokit/auth-unauthenticated@6.1.0': @@ -17176,6 +17261,16 @@ snapshots: transitivePeerDependencies: - encoding + '@octokit/core@5.2.0': + dependencies: + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.1.0 + '@octokit/request': 8.4.0 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.6.1 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + '@octokit/core@6.1.2': dependencies: '@octokit/auth-token': 5.1.1 @@ -17197,6 +17292,11 @@ snapshots: is-plain-object: 5.0.0 universal-user-agent: 6.0.1 + '@octokit/endpoint@9.0.5': + dependencies: + '@octokit/types': 13.6.1 + universal-user-agent: 6.0.1 + '@octokit/graphql@5.0.6(encoding@0.1.13)': dependencies: '@octokit/request': 6.2.8(encoding@0.1.13) @@ -17205,6 +17305,12 @@ snapshots: transitivePeerDependencies: - encoding + '@octokit/graphql@7.1.0': + dependencies: + '@octokit/request': 8.4.0 + '@octokit/types': 13.6.1 + universal-user-agent: 6.0.1 + '@octokit/graphql@8.1.1': dependencies: '@octokit/request': 9.1.3 @@ -17233,6 +17339,8 @@ snapshots: '@octokit/openapi-types@18.1.1': {} + '@octokit/openapi-types@20.0.0': {} + '@octokit/openapi-types@22.2.0': {} '@octokit/openapi-webhooks-types@8.4.0': {} @@ -17243,6 +17351,11 @@ snapshots: dependencies: '@octokit/core': 6.1.2 + '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/types': 13.6.1 + '@octokit/plugin-paginate-rest@11.3.5(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 @@ -17258,6 +17371,15 @@ snapshots: dependencies: '@octokit/core': 4.2.4(encoding@0.1.13) + '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + + '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/types': 13.6.1 + '@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 @@ -17287,6 +17409,12 @@ snapshots: deprecation: 2.3.1 once: 1.4.0 + '@octokit/request-error@5.1.0': + dependencies: + '@octokit/types': 13.6.1 + deprecation: 2.3.1 + once: 1.4.0 + '@octokit/request-error@6.1.5': dependencies: '@octokit/types': 13.6.1 @@ -17302,6 +17430,13 @@ snapshots: transitivePeerDependencies: - encoding + '@octokit/request@8.4.0': + dependencies: + '@octokit/endpoint': 9.0.5 + '@octokit/request-error': 5.1.0 + '@octokit/types': 13.6.1 + universal-user-agent: 6.0.1 + '@octokit/request@9.1.3': dependencies: '@octokit/endpoint': 10.1.1 @@ -17318,12 +17453,23 @@ snapshots: transitivePeerDependencies: - encoding + '@octokit/rest@20.1.1': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0) + '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0) + '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0) + '@octokit/tsconfig@1.0.2': {} '@octokit/types@10.0.0': dependencies: '@octokit/openapi-types': 18.1.1 + '@octokit/types@12.6.0': + dependencies: + '@octokit/openapi-types': 20.0.0 + '@octokit/types@13.6.1': dependencies: '@octokit/openapi-types': 22.2.0 @@ -18543,6 +18689,11 @@ snapshots: '@types/geojson@7946.0.14': {} + '@types/glob@8.1.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.8.4 + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 22.8.4 @@ -18598,6 +18749,8 @@ snapshots: '@types/minimatch@3.0.5': {} + '@types/minimatch@5.1.2': {} + '@types/minimist@1.2.5': {} '@types/mocha@10.0.9': {} @@ -24772,7 +24925,7 @@ snapshots: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.0.5 + minimatch: 3.1.2 mute-stream@0.0.8: {}