From d790df53f0019bc80cf87f23214ceef84b6ec923 Mon Sep 17 00:00:00 2001 From: Mincong Huang Date: Wed, 29 Jan 2025 06:16:53 +0100 Subject: [PATCH 1/2] ignore .npmrc --- .gitignore | 1 + .npmrc.template | 1 + 2 files changed, 2 insertions(+) create mode 100644 .npmrc.template diff --git a/.gitignore b/.gitignore index 20ca2f4..74392ee 100644 --- a/.gitignore +++ b/.gitignore @@ -131,3 +131,4 @@ dist # Vertesia lib/ +.npmrc \ No newline at end of file diff --git a/.npmrc.template b/.npmrc.template new file mode 100644 index 0000000..28931b3 --- /dev/null +++ b/.npmrc.template @@ -0,0 +1 @@ +@dglabs:registry=https://us-central1-npm.pkg.dev/dengenlabs/npm/ From da05a5b5ff9397f5e6ad5787de6908f39a423180 Mon Sep 17 00:00:00 2001 From: Mincong Huang Date: Wed, 29 Jan 2025 06:18:18 +0100 Subject: [PATCH 2/2] init --- apps/github-agent/.docker/config.json | 5 + apps/github-agent/.dockerignore | 7 + .../.github/workflows/release.yaml | 42 ++++ apps/github-agent/.github/workflows/test.yaml | 88 +++++++ apps/github-agent/Dockerfile | 28 +++ apps/github-agent/bin/bundle-workflows.mjs | 26 ++ apps/github-agent/package.json | 35 +++ apps/github-agent/src/activities.ts | 7 + apps/github-agent/src/debug-replayer.ts | 9 + apps/github-agent/src/main.ts | 37 +++ apps/github-agent/src/workflows.ts | 22 ++ apps/github-agent/tsconfig.json | 39 +++ pnpm-lock.yaml | 228 ++++++++++++++++++ 13 files changed, 573 insertions(+) create mode 100644 apps/github-agent/.docker/config.json create mode 100644 apps/github-agent/.dockerignore create mode 100644 apps/github-agent/.github/workflows/release.yaml create mode 100644 apps/github-agent/.github/workflows/test.yaml create mode 100644 apps/github-agent/Dockerfile create mode 100644 apps/github-agent/bin/bundle-workflows.mjs create mode 100644 apps/github-agent/package.json create mode 100644 apps/github-agent/src/activities.ts create mode 100644 apps/github-agent/src/debug-replayer.ts create mode 100644 apps/github-agent/src/main.ts create mode 100644 apps/github-agent/src/workflows.ts create mode 100644 apps/github-agent/tsconfig.json diff --git a/apps/github-agent/.docker/config.json b/apps/github-agent/.docker/config.json new file mode 100644 index 0000000..586adf0 --- /dev/null +++ b/apps/github-agent/.docker/config.json @@ -0,0 +1,5 @@ +{ + "credHelpers": { + "us-docker.pkg.dev": "vertesia" + } +} \ No newline at end of file diff --git a/apps/github-agent/.dockerignore b/apps/github-agent/.dockerignore new file mode 100644 index 0000000..e197af2 --- /dev/null +++ b/apps/github-agent/.dockerignore @@ -0,0 +1,7 @@ +.env +.DS_Store +.git +.gitignore +*.md +lib/ +node_modules/ diff --git a/apps/github-agent/.github/workflows/release.yaml b/apps/github-agent/.github/workflows/release.yaml new file mode 100644 index 0000000..825da7f --- /dev/null +++ b/apps/github-agent/.github/workflows/release.yaml @@ -0,0 +1,42 @@ +name: release + +on: + push: + tags: + - 'github-agent/*' + +permissions: + id-token: write + contents: read + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v4 + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + - name: Install dependencies + run: pnpm install + - name: Run build + run: pnpm -r build + - name: Authenticate with Google Cloud + uses: google-github-actions/auth@v2 + with: + token_format: access_token + project_id: dengenlabs + service_account: gar-pusher@dengenlabs.iam.gserviceaccount.com + workload_identity_provider: projects/265888598630/locations/global/workloadIdentityPools/composable-cloud/providers/github + access_token_lifetime: 300s + create_credentials_file: true + - name: Authenticate to Google Artifact Registry + run: pnpm run registry-login --repo-config=.npmrc + - name: Publish Package + run: | + # We modified the .npmrc file to use GAR, which put the Git repository in dirty state. + # So we need to disable the Git checks. + pnpm publish packages/github-agent --no-git-checks diff --git a/apps/github-agent/.github/workflows/test.yaml b/apps/github-agent/.github/workflows/test.yaml new file mode 100644 index 0000000..5e33e42 --- /dev/null +++ b/apps/github-agent/.github/workflows/test.yaml @@ -0,0 +1,88 @@ +name: actions + +on: [push] + +permissions: + id-token: write + contents: read + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v4 + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + - name: Authenticate with Google Cloud + uses: google-github-actions/auth@v2 + with: + token_format: access_token + project_id: dengenlabs + service_account: gar-pusher@dengenlabs.iam.gserviceaccount.com + workload_identity_provider: projects/265888598630/locations/global/workloadIdentityPools/composable-cloud/providers/github + access_token_lifetime: 300s + create_credentials_file: true + - name: Authenticate to Google Artifact Registry + run: | + pnpm install --filter "@dglabs/demo-github-root" + pnpm run registry-login + - name: Install dependencies + run: pnpm install + - name: Run build + run: pnpm -r build + - name: Run tests + run: pnpm -r test + + publish-github-agent: + if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/docker') + needs: test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Authenticate with Google Cloud + uses: google-github-actions/auth@v2 + id: gauth + with: + token_format: access_token + project_id: dengenlabs + service_account: gar-pusher@dengenlabs.iam.gserviceaccount.com + workload_identity_provider: projects/265888598630/locations/global/workloadIdentityPools/composable-cloud/providers/github + access_token_lifetime: 300s + create_credentials_file: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + # list of Docker images to use as base name for tags + images: | + us.gcr.io/dengenlabs/agents/vertesia/github-agent + tags: | + type=ref,event=branch + type=ref,event=pr + type=sha,format=long,prefix= + + - name: Login to GAR + uses: docker/login-action@v3 + with: + registry: us.gcr.io + username: oauth2accesstoken + password: ${{ steps.gauth.outputs.access_token }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./apps/github-agent/Dockerfile + push: ${{ github.ref == 'refs/heads/main' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + secret-files: | + "gcp=${{ steps.gauth.outputs.credentials_file_path }}" diff --git a/apps/github-agent/Dockerfile b/apps/github-agent/Dockerfile new file mode 100644 index 0000000..c8d79fd --- /dev/null +++ b/apps/github-agent/Dockerfile @@ -0,0 +1,28 @@ +FROM node:23.5-slim AS base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable +COPY . /app +WORKDIR /app + +FROM base AS prod-deps +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile + +FROM base AS build +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile +RUN pnpm run build + +FROM base +RUN apt-get update -y && \ + apt-get install -y openssl ca-certificates + +COPY --from=prod-deps /app/node_modules /app/node_modules +COPY --from=build /app/lib /app/lib +COPY --from=build /app/bin /app/bin + +COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-init + +ENV SERVICE_NAME=vertesia_github-agent + +ENTRYPOINT ["/app/datadog-init"] +CMD [ "pnpm", "start" ] diff --git a/apps/github-agent/bin/bundle-workflows.mjs b/apps/github-agent/bin/bundle-workflows.mjs new file mode 100644 index 0000000..3e90804 --- /dev/null +++ b/apps/github-agent/bin/bundle-workflows.mjs @@ -0,0 +1,26 @@ +#!/usr/bin/env node + +import { bundleWorkflowCode } from '@temporalio/worker'; +import { writeFile } from 'node:fs/promises'; +import path from 'node:path'; + +async function bundle(wsPath, bundlePath) { + const { code } = await bundleWorkflowCode({ + workflowsPath: path.resolve(wsPath), + }); + const codePath = path.resolve(bundlePath); + await writeFile(codePath, code); + console.log(`Bundle written to ${codePath}`); +} + +const wsPath = process.argv[2]; +const bundlePath = process.argv[3]; +if (!wsPath || !bundlePath) { + console.error('Usage: build-workflows '); + process.exit(1); +} + +bundle(wsPath, bundlePath).catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/apps/github-agent/package.json b/apps/github-agent/package.json new file mode 100644 index 0000000..c8cf5cb --- /dev/null +++ b/apps/github-agent/package.json @@ -0,0 +1,35 @@ +{ + "name": "@vertesia/github-agent", + "version": "1.10.0", + "description": "", + "type": "module", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "scripts": { + "clean": "rimraf ./lib tsconfig.tsbuildinfo", + "build": "${npm_package_vertesia_pm} run clean && tsc --build && node ./bin/bundle-workflows.mjs lib/workflows.js lib/workflows-bundle.js", + "start": "node lib/main.js", + "connect": "vertesia agent connect" + }, + "vertesia": { + "pm": "pnpm", + "image": { + "repository": "us-docker.pkg.dev/dengenlabs/us.gcr.io", + "organization": "vertesia", + "name": "github-agent" + }, + "profile": "staging-experiments" + }, + "devDependencies": { + "@types/node": "^22.10.2", + "rimraf": "^6.0.1", + "typescript": "^5.7.2", + "vitest": "^2.1.8" + }, + "dependencies": { + "@dglabs/agent-runner": "^0.9.2", + "@temporalio/activity": "^1.11.5", + "@temporalio/worker": "^1.11.5", + "@temporalio/workflow": "^1.11.5" + } +} \ No newline at end of file diff --git a/apps/github-agent/src/activities.ts b/apps/github-agent/src/activities.ts new file mode 100644 index 0000000..d1f06bd --- /dev/null +++ b/apps/github-agent/src/activities.ts @@ -0,0 +1,7 @@ +import { log } from "@temporalio/activity"; + +// Export your activity functions here + +export async function helloActivity() { + log.info("Hello, World!"); +} diff --git a/apps/github-agent/src/debug-replayer.ts b/apps/github-agent/src/debug-replayer.ts new file mode 100644 index 0000000..da1a234 --- /dev/null +++ b/apps/github-agent/src/debug-replayer.ts @@ -0,0 +1,9 @@ +import { startDebugReplayer } from "@temporalio/worker"; +import { resolveScriptFile } from "@dglabs/agent-runner"; + +resolveScriptFile("./workflows", import.meta.url).then((p: string) => { + console.log("Debugging using workflows path", p); + startDebugReplayer({ + workflowsPath: p + }) +}); diff --git a/apps/github-agent/src/main.ts b/apps/github-agent/src/main.ts new file mode 100644 index 0000000..56da2a0 --- /dev/null +++ b/apps/github-agent/src/main.ts @@ -0,0 +1,37 @@ +/** + * This is a generated file. Do not modify. + */ +import { resolveScriptFile, run } from "@dglabs/agent-runner"; +import { readFileSync } from "fs"; +import { fileURLToPath } from "url"; +import { dirname, resolve } from 'path'; + +const pkg = readPackageJson(); + +let domain = `agents/${pkg.name}`; +if (pkg.vertesia?.image?.organization) { + if (pkg.vertesia.image.name) { + domain = `agents/${pkg.vertesia.image.organization}/${pkg.vertesia.image.name}`; + } +} + +const workflowBundle = await resolveScriptFile("./workflows-bundle.js", import.meta.url); +const activities = await import("./activities.js"); + +await run({ + workflowBundle, + activities, + domain +}).catch((err: any) => { + console.error(err); +}).finally(() => { + process.exit(0); +}); + + +function readPackageJson() { + const scriptPath = fileURLToPath(import.meta.url); + const pkgFile = resolve(dirname(scriptPath), '../package.json') + const content = readFileSync(pkgFile, "utf8"); + return JSON.parse(content); +} diff --git a/apps/github-agent/src/workflows.ts b/apps/github-agent/src/workflows.ts new file mode 100644 index 0000000..66a3cd0 --- /dev/null +++ b/apps/github-agent/src/workflows.ts @@ -0,0 +1,22 @@ +import { log, proxyActivities } from "@temporalio/workflow"; +import * as activities from "./activities.js"; + +// Export your workflow functions here + +const { + helloActivity, +} = proxyActivities({ + startToCloseTimeout: "5 minute", + retry: { + initialInterval: '5s', + backoffCoefficient: 2, + maximumAttempts: 5, + maximumInterval: 100 * 30 * 1000, //ms + nonRetryableErrorTypes: [], + }, +}); + +export async function helloWorkflow() { + log.info("Entering Hello workflow"); + await helloActivity(); +} \ No newline at end of file diff --git a/apps/github-agent/tsconfig.json b/apps/github-agent/tsconfig.json new file mode 100644 index 0000000..0d8606b --- /dev/null +++ b/apps/github-agent/tsconfig.json @@ -0,0 +1,39 @@ +{ + "compilerOptions": { + "composite": true, + "rootDir": "./src", + "sourceMap": true, + "outDir": "./lib", + "forceConsistentCasingInFileNames": true, + "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ + "target": "ES2022", + "useDefineForClassFields": true, + "lib": [ + "ES2022", + "DOM" + ], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "declarationMap": true, + "skipLibCheck": true, + /* Bundler mode */ + //"allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "exclude": [ + "node_modules", + "**/*.test.ts", + "lib", + "test" + ], + "references": [] +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b1a0a9..600bb48 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,34 @@ importers: specifier: ^2.1.8 version: 2.1.8(@types/node@22.10.2)(terser@5.37.0) + apps/github-agent: + dependencies: + '@dglabs/agent-runner': + specifier: ^0.9.2 + version: 0.9.2(@aws-sdk/client-sts@3.716.0) + '@temporalio/activity': + specifier: ^1.11.5 + version: 1.11.5 + '@temporalio/worker': + specifier: ^1.11.5 + version: 1.11.5 + '@temporalio/workflow': + specifier: ^1.11.5 + version: 1.11.5 + devDependencies: + '@types/node': + specifier: ^22.10.2 + version: 22.10.2 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + typescript: + specifier: ^5.7.2 + version: 5.7.2 + vitest: + specifier: ^2.1.8 + version: 2.1.8(@types/node@22.10.2)(terser@5.37.0) + apps/github-agent-old: dependencies: '@dglabs/agent-runner': @@ -359,6 +387,10 @@ packages: engines: {node: '>=6'} hasBin: true + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@isaacs/ttlcache@1.4.1': resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} @@ -1002,10 +1034,18 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -1020,6 +1060,9 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1029,6 +1072,9 @@ packages: bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + browserslist@4.24.3: resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1105,6 +1151,10 @@ packages: cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + crypto-randomuuid@1.0.0: resolution: {integrity: sha512-/RC5F4l1SCqD/jazwUF6+t34Cd8zTSAGZ7rvvZu1whZUhD2a5MOGKjSGowoGcpj/cbVZk1ZODIooJEQQq3nNAA==} @@ -1158,6 +1208,9 @@ packages: duplexify@4.1.3: resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} @@ -1167,6 +1220,9 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -1258,6 +1314,10 @@ packages: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + form-data@2.5.2: resolution: {integrity: sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==} engines: {node: '>= 0.12'} @@ -1296,6 +1356,11 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + google-artifactregistry-auth@3.2.0: resolution: {integrity: sha512-zkxnWly7GjLNlo/qyYyQFISMAWQJreGCKm/JBRqmrx9gP4EmettqmLqTThLunh0VLoeEnR7aFWjtggvG9m9kwQ==} hasBin: true @@ -1390,6 +1455,9 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.1: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} @@ -1398,6 +1466,10 @@ packages: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} + jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} + engines: {node: 20 || >=22} + jest-docblock@29.7.0: resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1493,6 +1565,10 @@ packages: loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} @@ -1522,9 +1598,17 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} @@ -1635,9 +1719,20 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} @@ -1741,6 +1836,11 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + rollup@4.29.1: resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -1778,6 +1878,14 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + shell-quote@1.8.2: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} @@ -1804,6 +1912,10 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + sonic-boom@3.8.1: resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} @@ -1854,6 +1966,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -1861,6 +1977,10 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -2083,6 +2203,11 @@ packages: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + which@4.0.0: resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} engines: {node: ^16.13.0 || >=18.0.0} @@ -2097,6 +2222,10 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -2707,6 +2836,15 @@ snapshots: protobufjs: 7.4.0 yargs: 17.7.2 + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/ttlcache@1.4.1': {} '@jridgewell/gen-mapping@0.3.8': @@ -3468,10 +3606,14 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.1.0: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.1: {} + arg@5.0.2: {} assertion-error@2.0.1: {} @@ -3480,12 +3622,18 @@ snapshots: atomic-sleep@1.0.0: {} + balanced-match@1.0.2: {} + base64-js@1.5.1: {} bignumber.js@9.1.2: {} bowser@2.11.0: {} + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + browserslist@4.24.3: dependencies: caniuse-lite: 1.0.30001690 @@ -3560,6 +3708,12 @@ snapshots: transitivePeerDependencies: - encoding + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crypto-randomuuid@1.0.0: {} datadog-transport-common@3.0.2: @@ -3634,6 +3788,8 @@ snapshots: readable-stream: 3.6.2 stream-shift: 1.0.3 + eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 @@ -3642,6 +3798,8 @@ snapshots: emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -3732,6 +3890,11 @@ snapshots: dependencies: strnum: 1.0.5 + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + form-data@2.5.2: dependencies: asynckit: 0.4.0 @@ -3788,6 +3951,15 @@ snapshots: glob-to-regexp@0.4.1: {} + glob@11.0.1: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.2 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + google-artifactregistry-auth@3.2.0: dependencies: google-auth-library: 9.15.0 @@ -3917,10 +4089,16 @@ snapshots: is-stream@2.0.1: {} + isexe@2.0.0: {} + isexe@3.1.1: {} istanbul-lib-coverage@3.2.0: {} + jackspeak@4.0.2: + dependencies: + '@isaacs/cliui': 8.0.2 + jest-docblock@29.7.0: dependencies: detect-newline: 3.1.0 @@ -4012,6 +4190,8 @@ snapshots: loupe@3.1.2: {} + lru-cache@11.0.2: {} + lru-cache@7.18.3: {} magic-string@0.30.17: @@ -4037,8 +4217,14 @@ snapshots: dependencies: mime-db: 1.52.0 + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.8: {} + minipass@7.1.2: {} + module-details-from-path@1.0.3: {} mongodb-connection-string-url@3.0.1: @@ -4119,8 +4305,17 @@ snapshots: dependencies: yocto-queue: 0.1.0 + package-json-from-dist@1.0.1: {} + pako@2.1.0: {} + path-key@3.1.1: {} + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + path-to-regexp@0.1.12: {} pathe@1.1.2: {} @@ -4259,6 +4454,11 @@ snapshots: rfdc@1.4.1: {} + rimraf@6.0.1: + dependencies: + glob: 11.0.1 + package-json-from-dist: 1.0.1 + rollup@4.29.1: dependencies: '@types/estree': 1.0.6 @@ -4315,6 +4515,12 @@ snapshots: dependencies: randombytes: 2.1.0 + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + shell-quote@1.8.2: {} side-channel-list@1.0.0: @@ -4349,6 +4555,8 @@ snapshots: siginfo@2.0.0: {} + signal-exit@4.1.0: {} + sonic-boom@3.8.1: dependencies: atomic-sleep: 1.0.0 @@ -4396,6 +4604,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -4404,6 +4618,10 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + strip-json-comments@3.1.1: {} strnum@1.0.5: {} @@ -4623,6 +4841,10 @@ snapshots: which-pm-runs@1.1.0: {} + which@2.0.2: + dependencies: + isexe: 2.0.0 + which@4.0.0: dependencies: isexe: 3.1.1 @@ -4638,6 +4860,12 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} y18n@5.0.8: {}