diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 7d707c90e747..000000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: "" -labels: "bug" -assignees: "" ---- - -**Describe the bug** - - - -**To Reproduce** - - - -**Expected behavior** - - - -**Screenshots** - - - -**Additional context** - - diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 7eeb966c571a..000000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: "" -labels: "enhancement" -assignees: "" ---- - -**Is your feature request related to a problem? Please describe.** - - - -**Describe the solution you'd like** - - - -**Describe alternatives you've considered** - - - -**Additional context** - - diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 71701239963f..000000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,85 +0,0 @@ - - -# Relates to - - - - - -# Risks - - - -# Background - -## What does this PR do? - -## What kind of change is this? - - - - - - -# Documentation changes needed? - - - - - -# Testing - -## Where should a reviewer start? - -## Detailed testing steps - - - - - - - - - - - - - - - - - - - diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index b0ae26bf7d91..000000000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,52 +0,0 @@ -name: ci -on: - push: - branches: [main] - pull_request: - branches: [main] -jobs: - check: - runs-on: ubuntu-latest - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ vars.TURBO_TEAM }} - TURBO_REMOTE_ONLY: true - steps: - - uses: actions/checkout@v4 - - - uses: pnpm/action-setup@v3 - with: - version: 9.15.0 - - - uses: actions/setup-node@v4 - with: - node-version: "23" - cache: "pnpm" - - - name: Install dependencies - run: pnpm install -r --no-frozen-lockfile - - - name: Setup Biome CLI - uses: biomejs/setup-biome@v2 - with: - version: latest - - - name: Run Biome - run: biome ci - - - name: Create test env file - run: | - echo "TEST_DATABASE_CLIENT=sqlite" > packages/core/.env.test - echo "NODE_ENV=test" >> packages/core/.env.test - - - name: Run tests - run: cd packages/core && pnpm test:coverage - - - name: Build packages - run: pnpm run build - - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v5 - with: - token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 82729ab3f8e4..000000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: "CodeQL Advanced" - -on: - push: - branches: ["main"] - pull_request: - branches: ["main"] - schedule: - - cron: "29 8 * * 6" - -jobs: - analyze: - name: Analyze (${{ matrix.language }}) - runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} - permissions: - # required for all workflows - security-events: write - - # required to fetch internal or private CodeQL packs - packages: read - - # only required for workflows in private repositories - actions: read - contents: read - - strategy: - fail-fast: false - matrix: - include: - - language: javascript-typescript - build-mode: none - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - build-mode: ${{ matrix.build-mode }} - - - if: matrix.build-mode == 'manual' - shell: bash - run: | - echo 'If you are using a "manual" build mode for one or more of the' \ - 'languages you are analyzing, replace this with the commands to build' \ - 'your code, for example:' - echo ' make bootstrap' - echo ' make release' - exit 1 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 - with: - category: "/language:${{matrix.language}}" diff --git a/.github/workflows/generate-changelog.yml b/.github/workflows/generate-changelog.yml deleted file mode 100644 index 5b2cd3598c63..000000000000 --- a/.github/workflows/generate-changelog.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Generate Changelog -on: - push: - tags: - - "*" -jobs: - changelog: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - uses: actions/checkout@v4 - with: - ref: main - token: ${{ secrets.CHANGELOG_GITHUB_TOKEN }} - - name: Generate Changelog - run: | - export PATH="$PATH:/home/runner/.local/share/gem/ruby/3.0.0/bin" - gem install --user-install github_changelog_generator - github_changelog_generator \ - -u ${{ github.repository_owner }} \ - -p ${{ github.event.repository.name }} \ - --token ${{ secrets.CHANGELOG_GITHUB_TOKEN }} - - name: Commit Changelog - uses: stefanzweifel/git-auto-commit-action@v5 - with: - commit_message: "chore: update changelog" - branch: main - file_pattern: "CHANGELOG.md" - commit_author: "GitHub Action " diff --git a/.github/workflows/generate-readme-translations.yml b/.github/workflows/generate-readme-translations.yml deleted file mode 100644 index de2d5fa13b16..000000000000 --- a/.github/workflows/generate-readme-translations.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: Generate Readme Translations -on: - push: - branches: - - "1222--README-ci-auto-translation" - -jobs: - translation: - runs-on: ubuntu-latest - strategy: - matrix: - language: - [ - { code: "CN", name: "Chinese" }, - { code: "DE", name: "German" }, - { code: "ES", name: "Spanish" }, - { code: "FR", name: "French" }, - { code: "HE", name: "Hebrew" }, - { code: "IT", name: "Italian" }, - { code: "JA", name: "Japanese" }, - { code: "KOR", name: "Korean" }, - { code: "PTBR", name: "Portuguese (Brazil)" }, - { code: "RU", name: "Russian" }, - { code: "TH", name: "Thai" }, - { code: "TR", name: "Turkish" }, - { code: "VI", name: "Vietnamese" }, - { code: "AR", name: "Arabic" }, - { code: "RS", name: "Srpski" }, - { code: "TG", name: "Tagalog" }, - { code: "PL", name: "Polski" }, - { code: "HU", name: "Hungarian" }, - { code: "FA", name: "Persian" }, - { code: "RO", name: "Romanian" }, - { code: "GR", name: "Greek" }, - { code: "NL", name: "Dutch" }, - ] - permissions: - contents: write - steps: - - uses: actions/checkout@v4 - with: - ref: main - token: ${{ secrets.GH_TOKEN }} - - - name: Translate to ${{ matrix.language.name }} - uses: 0xjord4n/aixion@v1.2.1 - id: aixion - with: - config: > - { - "provider": "openai", - "provider_options": { - "api_key": "${{ secrets.OPENAI_API_KEY }}" - }, - "messages": [ - { - "role": "system", - "content": "You will be provided with a markdown file in English, and your task is to translate it into ${{ matrix.language.name }}." - }, - { - "role": "user", - "content_path": "README.md" - } - ], - save_path: "i18n/readme/README_${{ matrix.language.code }}.md", - "model": "gpt-4o" - } - - # Upload each translated file as an artifact - - name: Upload translation - uses: actions/upload-artifact@v4 - with: - name: readme-${{ matrix.language.code }} - path: README_${{ matrix.language.code }}.md - - commit: - needs: translation - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: main - token: ${{ secrets.GH_TOKEN }} - - # Download all translation artifacts - - name: Download all translations - uses: actions/download-artifact@v4 - with: - pattern: readme-* - merge-multiple: true - - - name: Commit all translations - uses: stefanzweifel/git-auto-commit-action@v5 - with: - commit_message: "chore: update all README translations" - branch: main - file_pattern: "README_*.md" - commit_author: "GitHub Action " diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml deleted file mode 100644 index 4e39d95ffff1..000000000000 --- a/.github/workflows/greetings.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Greetings - -on: [pull_request_target, issues] - -jobs: - greeting: - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - steps: - - uses: actions/first-interaction@v1 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - issue-message: "Hello @${{ github.actor }}! Welcome to the elizaOS community. Thank you for opening your first issue; we appreciate your contribution. You are now an elizaOS contributor!" - pr-message: "Hi @${{ github.actor }}! Welcome to the elizaOS community. Thanks for submitting your first pull request; your efforts are helping us accelerate towards AGI. We'll review it shortly. You are now an elizaOS contributor!" diff --git a/.github/workflows/image.yaml b/.github/workflows/image.yaml deleted file mode 100644 index 2135ed59c837..000000000000 --- a/.github/workflows/image.yaml +++ /dev/null @@ -1,70 +0,0 @@ -# -name: Create and publish a Docker image - -# Configures this workflow to run every time a change is pushed to the branch called `release`. -on: - release: - types: [created] - workflow_dispatch: - -# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} - -# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. -jobs: - build-and-push-image: - runs-on: ubuntu-latest - # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. - permissions: - contents: read - packages: write - attestations: write - id-token: write - # - steps: - - name: Checkout repository - uses: actions/checkout@v4 - # Uses the `docker/login-action` action to log in to the Container registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. - - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels. - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. - # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. - # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. - - name: Build and push Docker image - id: push - uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - - # This step generates an artifact attestation for the image, which is an unforgeable statement about where and how it was built. It increases supply chain security for people who consume the image. For more information, see "[AUTOTITLE](/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds)." - - name: Generate artifact attestation - uses: actions/attest-build-provenance@v1 - with: - subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} - subject-digest: ${{ steps.push.outputs.digest }} - push-to-registry: true - - # This step makes the Docker image public, so users can pull it without authentication. - - name: Make Docker image public - run: | - curl \ - -X PATCH \ - -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ - -H "Accept: application/vnd.github.v3+json" \ - https://api.github.com/user/packages/container/${{ env.IMAGE_NAME }}/visibility \ - -d '{"visibility":"public"}' diff --git a/.github/workflows/integrationTests.yaml b/.github/workflows/integrationTests.yaml deleted file mode 100644 index 0681d3d3327f..000000000000 --- a/.github/workflows/integrationTests.yaml +++ /dev/null @@ -1,44 +0,0 @@ -name: Integration Tests -on: - push: - branches: - - "*" - pull_request_target: - branches: - - "*" - -jobs: - integration-tests: - runs-on: ubuntu-latest - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ vars.TURBO_TEAM }} - TURBO_REMOTE_ONLY: true - steps: - - uses: actions/checkout@v4 - - - uses: pnpm/action-setup@v3 - with: - version: 9.15.0 - - - uses: actions/setup-node@v4 - with: - node-version: "23.3" - cache: "pnpm" - - - name: Install dependencies - run: pnpm install --no-frozen-lockfile - - - name: Build packages - run: pnpm build - - - name: Check for API key - run: | - if [ -z "$OPENAI_API_KEY" ]; then - echo "Error: OPENAI_API_KEY is not set." - exit 1 - fi - - - name: Run integration tests - run: pnpm run integrationTests \ No newline at end of file diff --git a/.github/workflows/jsdoc-automation.yml b/.github/workflows/jsdoc-automation.yml deleted file mode 100644 index 619a29593aed..000000000000 --- a/.github/workflows/jsdoc-automation.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: JSDoc Automation - -on: - workflow_dispatch: - inputs: - jsdoc: - description: "Generate JSDoc comments (T/F)" - required: true - default: "T" - type: string - readme: - description: "Generate README documentation (T/F)" - required: true - default: "T" - type: string - pull_number: - description: "Pull Request Number (if not provided, scans root_directory) - PR must be merged to develop branch. DONT provide if `README documentation` is T from above" - required: false - type: string - root_directory: - description: "Only scans files in this directory (relative to repository root, e.g., packages/core/src)" - required: true - default: "packages/plugin-bootstrap" - type: string - excluded_directories: - description: "Directories to exclude from scanning (comma-separated, relative to root_directory)" - required: true - default: "node_modules,dist,test" - type: string - reviewers: - description: "Pull Request Reviewers (Must be collaborator on the repository) comma-separated GitHub usernames" - required: true - default: "" - type: string - branch: - description: "Target branch for PR (defaults to develop)" - required: false - default: "develop" - type: string - -jobs: - generate-docs: - runs-on: ubuntu-latest - - env: - GITHUB_ACCESS_TOKEN: ${{ secrets.GH_PAT }} - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - - - name: Install pnpm - uses: pnpm/action-setup@v2 - with: - version: 8 - run_install: false - - - name: Update lockfile - working-directory: scripts/jsdoc-automation - run: | - echo "Updating lockfile..." - pnpm install --no-frozen-lockfile - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git config --global user.name "github-actions[bot]" - git add pnpm-lock.yaml - git commit -m "chore: update pnpm lockfile" || echo "No changes to commit" - git push || echo "No changes to push" - - - name: Install root dependencies - run: pnpm install --no-frozen-lockfile - - - name: Install package dependencies - working-directory: scripts/jsdoc-automation - run: pnpm install --no-frozen-lockfile - - - name: Build TypeScript - working-directory: scripts/jsdoc-automation - run: pnpm build - - - name: Run documentation generator - working-directory: scripts/jsdoc-automation - run: pnpm start - env: - INPUT_ROOT_DIRECTORY: ${{ inputs.root_directory }} - INPUT_PULL_NUMBER: ${{ inputs.pull_number }} - INPUT_EXCLUDED_DIRECTORIES: ${{ inputs.excluded_directories }} - INPUT_REVIEWERS: ${{ inputs.reviewers }} - INPUT_BRANCH: ${{ inputs.branch }} - INPUT_JSDOC: ${{ inputs.jsdoc }} - INPUT_README: ${{ inputs.readme }} diff --git a/.github/workflows/minimal-merge-queue.yml b/.github/workflows/minimal-merge-queue.yml deleted file mode 100644 index 08fd3e9b8e91..000000000000 --- a/.github/workflows/minimal-merge-queue.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: Merge Group Checks -on: - merge_group: - types: [checks_requested] -jobs: - minimal-check: - runs-on: ubuntu-latest - steps: - - name: Always pass - run: echo "All good!" diff --git a/.github/workflows/pnpm-lockfile-check.yml b/.github/workflows/pnpm-lockfile-check.yml deleted file mode 100644 index 3b303f8809ed..000000000000 --- a/.github/workflows/pnpm-lockfile-check.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Pnpm Lockfile Check - -on: - pull_request: - branches: [main] - -jobs: - check-lockfile: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-node@v4 - with: - node-version: 23.3.0 - - - uses: pnpm/action-setup@v3 - with: - version: 9.15.0 - - - name: Check if lockfile is up-to-date - id: lockfile-check - run: | - # Try to install with frozen lockfile - if ! pnpm install --frozen-lockfile; then - echo "::error::Lockfile is out of date. Please run 'pnpm install --no-frozen-lockfile' and commit the updated pnpm-lock.yaml" - echo "failed=true" >> $GITHUB_OUTPUT - exit 1 - fi - - - name: Comment on PR - if: failure() && steps.lockfile-check.outputs.failed == 'true' - uses: actions/github-script@v7 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: '❌ The pnpm-lockfile is out of date. Please run `pnpm install --no-frozen-lockfile` and commit the updated pnpm-lock.yaml file.' - }) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml deleted file mode 100644 index fb67a97dbcea..000000000000 --- a/.github/workflows/pr.yaml +++ /dev/null @@ -1,30 +0,0 @@ -name: PR Title Check - -on: - pull_request: - types: [opened, edited, synchronize] - -jobs: - check-pr-title: - runs-on: ubuntu-latest - - steps: - - name: Check out the repository - uses: actions/checkout@v4 - - - name: Validate PR title - id: validate - run: | - PR_TITLE=$(jq -r .pull_request.title "$GITHUB_EVENT_PATH") - echo "PR Title: $PR_TITLE" - if [[ ! "$PR_TITLE" =~ ^(feat|fix|docs|style|refactor|test|chore)(\([a-zA-Z0-9-]+\))?:\ .+ ]]; then - echo "PR title does not match the required pattern." - exit 1 - fi - - - name: Set status - if: failure() - run: | - gh pr comment ${{ github.event.pull_request.number }} --body "❌ PR title does not match the required pattern. Please use one of these formats: - - 'type: description' (e.g., 'feat: add new feature') - - 'type(scope): description' (e.g., 'chore(core): update dependencies')" diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml deleted file mode 100644 index b90c3031bfb5..000000000000 --- a/.github/workflows/pre-release.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Pre-Release - -on: - workflow_dispatch: - inputs: - release_type: - description: "Type of release (prerelease, prepatch, patch, minor, preminor, major)" - required: true - default: "prerelease" - -jobs: - release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - uses: actions/setup-node@v4 - with: - node-version: 22 - - - uses: pnpm/action-setup@v3 - with: - version: 9.15.0 - - - name: Configure Git - run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor }}@users.noreply.github.com" - - - name: "Setup npm for npmjs" - run: | - npm config set registry https://registry.npmjs.org/ - echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc - - - name: Install Protobuf Compiler - run: sudo apt-get install -y protobuf-compiler - - - name: Install dependencies - run: pnpm install - - - name: Build packages - run: pnpm run build - - - name: Tag and Publish Packages - id: tag_publish - run: | - RELEASE_TYPE=${{ github.event_name == 'push' && 'prerelease' || github.event.inputs.release_type }} - npx lerna version $RELEASE_TYPE --conventional-commits --yes --no-private --force-publish - npx lerna publish from-git --yes --dist-tag next - - - name: Get Version Tag - id: get_tag - run: echo "TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT - - - name: Generate Release Body - id: release_body - run: | - if [ -f CHANGELOG.md ]; then - echo "body=$(cat CHANGELOG.md)" >> $GITHUB_OUTPUT - else - echo "body=No changelog provided for this release." >> $GITHUB_OUTPUT - fi - - - name: Create GitHub Release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} - PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin - with: - tag_name: ${{ steps.get_tag.outputs.TAG }} - release_name: Release - body_path: CHANGELOG.md - draft: false - prerelease: ${{ github.event_name == 'push' }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index d640179b54cf..000000000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,61 +0,0 @@ -name: Release - -on: - release: - types: [created] - workflow_dispatch: - -jobs: - release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - uses: actions/setup-node@v4 - with: - node-version: 23.3.0 - - - uses: pnpm/action-setup@v3 - with: - version: 9.15.0 - - - name: Configure Git - run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor }}@users.noreply.github.com" - - - name: "Setup npm for npmjs" - run: | - npm config set registry https://registry.npmjs.org/ - echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc - - - name: Install Protobuf Compiler - run: sudo apt-get install -y protobuf-compiler - - - name: Install dependencies - run: pnpm install -r --no-frozen-lockfile - - - name: Build packages - run: pnpm run build - - - name: Publish Packages - id: publish - run: | - # Get the latest release tag - LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`) - - # Force clean the working directory and reset any changes - echo "Cleaning working directory and resetting any changes" - git clean -fd - git reset --hard HEAD - - # Force checkout the latest tag - echo "Checking out latest tag: $LATEST_TAG" - git checkout -b temp-publish-branch $LATEST_TAG - - echo "Publishing version: $LATEST_TAG" - npx lerna publish from-package --yes --dist-tag latest - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/require-develop.yml b/.github/workflows/require-develop.yml deleted file mode 100644 index 4519a3b5cadd..000000000000 --- a/.github/workflows/require-develop.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Check pull request source branch -on: - pull_request_target: - types: - - opened - - reopened - - synchronize - - edited -jobs: - check-branches: - runs-on: ubuntu-latest - steps: - - name: Check branches - run: | - if [ ${{ github.head_ref }} != "develop" ] && [ ${{ github.base_ref }} == "main" ]; then - echo "Merge requests to main branch are only allowed from dev branch." - exit 1 - fi diff --git a/.github/workflows/smoke-tests.yml b/.github/workflows/smoke-tests.yml deleted file mode 100644 index 3070cd3f63b7..000000000000 --- a/.github/workflows/smoke-tests.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: smoke-test -on: - push: - branches: - - "*" - pull_request: - branches: - - "*" - -jobs: - smoke-tests: - runs-on: ubuntu-latest - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ vars.TURBO_TEAM }} - TURBO_REMOTE_ONLY: true - steps: - - uses: actions/checkout@v4 - - - uses: pnpm/action-setup@v3 - with: - version: 9.15.0 - - - uses: actions/setup-node@v4 - with: - node-version: "23.3" - cache: "pnpm" - - - name: Run smoke tests - run: pnpm run smokeTests diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index 62810fe3d878..000000000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Mark stale issues and pull requests - -on: - schedule: - - cron: "25 18 * * *" - -jobs: - stale: - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - - env: - DAYS_BEFORE_STALE: 30 # Define the days-before-stale value - DAYS_BEFORE_CLOSE: 7 # Define the days-before-close value - - steps: - - uses: actions/stale@v5 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: | - This issue has been automatically marked as stale due to ${{ - env.DAYS_BEFORE_STALE }} days of inactivity. - If no further activity occurs within ${{ env.DAYS_BEFORE_CLOSE }} days, it will be closed automatically. Please take action if this issue is still relevant. - stale-pr-message: | - This pull request has been automatically marked as stale due to ${{ - env.DAYS_BEFORE_STALE }} days of inactivity. - If no further activity occurs within ${{ env.DAYS_BEFORE_CLOSE }} days, it will be closed automatically. Please take action if this pull request is still relevant. - stale-issue-label: "no-issue-activity" - stale-pr-label: "no-pr-activity" - days-before-stale: ${{ env.DAYS_BEFORE_STALE }} - days-before-close: ${{ env.DAYS_BEFORE_CLOSE }} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index eea1eb9be4d4..000000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,128 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity -and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -- Demonstrating empathy and kindness toward other people -- Being respectful of differing opinions, viewpoints, and experiences -- Giving and gracefully accepting constructive feedback -- Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -- Focusing on what is best not just for us as individuals, but for the - overall community - -Examples of unacceptable behavior include: - -- The use of sexualized language or imagery, and sexual attention or - advances of any kind -- Trolling, insulting or derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or email - address, without their explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -[discord server](https://discord.gg/ai16z). -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series -of actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or -permanent ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within -the community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.0, available at -https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. - -Community Impact Guidelines were inspired by [Mozilla's code of conduct -enforcement ladder](https://github.com/mozilla/diversity). - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see the FAQ at -https://www.contributor-covenant.org/faq. Translations are available at -https://www.contributor-covenant.org/translations. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 54180b944289..000000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,129 +0,0 @@ -# Contributing to Eliza - -First off, thank you for considering contributing to Eliza! We welcome contributions from everyone, regardless of experience level. - -## Contribution License Agreement - -By contributing to Eliza, you agree that your contributions will be licensed under the MIT License. This means: - -1. You grant us (and everyone else) a perpetual, worldwide, non-exclusive, royalty-free license to use your contributions. -2. Your contributions are and will be available as Free and Open Source Software (FOSS). -3. You have the right to submit the work under this license. -4. You understand that your contributions are public and that a record of the contribution is maintained indefinitely. - -## The OODA Loop: A Framework for Contribution - -We believe in the power of the OODA Loop - a decision-making framework that emphasizes speed and adaptability. OODA stands for: - -- **Observe**: Gather information and insights about the project, the community, and the broader AI ecosystem. -- **Orient**: Analyze your observations to identify opportunities for contribution and improvement. -- **Decide**: Choose a course of action based on your analysis. This could be proposing a new feature, fixing a bug, or creating content. -- **Act**: Execute your decision and share your work with the community. - -## How to Contribute - -### For Developers - -1. **Extend Eliza's Capabilities** - - - Develop new actions, evaluators, and providers - - Improve existing components and modules - -2. **Enhance Infrastructure** - - - Review open issues and submit PRs - - Test and update documentation - - Optimize performance - - Improve deployment solutions - -3. Fork the repo and create your branch from `main`. - 1. The name of the branch should start with the issue number and be descriptive of the changes you are making. - 2. Example: 9999--add-test-for-bug-123 -4. If you've added code that should be tested, add tests. -5. Ensure the test suite passes. -6. Make sure your code lints. -7. Issue that pull request! - -## Styleguides - -### Git Commit Messages - -- Use the present tense ("Add feature" not "Added feature") -- Use the imperative mood ("Move cursor to..." not "Moves cursor to...") -- Limit the first line to 72 characters or less -- Reference issues and pull requests liberally after the first line - -### JavaScript Styleguide - -- All JavaScript must adhere to [JavaScript Standard Style](https://standardjs.com/). - -### TypeScript Styleguide - -- All TypeScript must adhere to [TypeScript Standard Style](https://github.com/standard/ts-standard). - -### Documentation Styleguide - -- Use [Markdown](https://daringfireball.net/projects/markdown/) for documentation. - -## Additional Notes - -### Issue and Pull Request Labels - -This section lists the labels we use to help us track and manage issues and pull requests. - -- `bug` - Issues that are bugs. -- `enhancement` - Issues that are feature requests. -- `documentation` - Issues or pull requests related to documentation. -- `good first issue` - Good for newcomers. - -## Getting Help - -- Join [Discord](https://discord.gg/ai16z) -- Check [FAQ](docs/docs/faq.md) -- Create [GitHub issues](https://github.com/elizaOS/eliza/issues) - -## Additional Resources - -- [Local Development Guide](docs/docs/guides/local-development.md) -- [Configuration Guide](docs/docs/guides/configuration.md) -- [API Documentation](docs/api) - -## Contributor Guide - -Welcome to the Eliza contributor guide! This document is designed to help you understand how you can be part of building the future of autonomous AI agents, regardless of your technical background. - -### Code of Conduct - -#### Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. - -#### Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior include: - -- The use of sexualized language or imagery and unwelcome sexual attention or advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information without explicit permission -- Other conduct which could reasonably be considered inappropriate in a professional setting - -#### Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -#### Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. - -Thank you for contributing to Eliza and helping build the future of autonomous AI agents! 🎉 diff --git a/Makefile b/Makefile deleted file mode 100644 index 12030cf5e558..000000000000 --- a/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (C) 2024 Gramine contributors -# SPDX-License-Identifier: BSD-3-Clause - -THIS_DIR := $(dir $(lastword $(MAKEFILE_LIST))) -NODEJS_DIR ?= /usr/bin - -ARCH_LIBDIR ?= /lib/$(shell $(CC) -dumpmachine) - -ifeq ($(DEBUG),1) -GRAMINE_LOG_LEVEL = debug -else -GRAMINE_LOG_LEVEL = error -endif - -.PHONY: all -all: eliza.manifest -ifeq ($(SGX),1) -all: eliza.manifest.sgx eliza.sig -endif - -.PHONY: eliza.manifest -eliza.manifest: eliza.manifest.template - gramine-manifest \ - -Dlog_level=$(GRAMINE_LOG_LEVEL) \ - -Darch_libdir=$(ARCH_LIBDIR) \ - -Dnodejs_dir=$(NODEJS_DIR) \ - $< >$@ - -# Make on Ubuntu <= 20.04 doesn't support "Rules with Grouped Targets" (`&:`), -# for details on this workaround see -# https://github.com/gramineproject/gramine/blob/e8735ea06c/CI-Examples/helloworld/Makefile -eliza.manifest.sgx eliza.sig: sgx_sign - @: - -.INTERMEDIATE: sgx_sign -sgx_sign: eliza.manifest - gramine-sgx-sign \ - --manifest $< \ - --output $<.sgx - -ifeq ($(SGX),) -GRAMINE = gramine-direct -else -GRAMINE = gramine-sgx -endif - -# Start the default character: -# SGX=1 make start -# Start a specific character by passing arguments: -# SGX=1 make start -- --character "character/your_character_file.json" -.PHONY: start -start: all - $(GRAMINE) ./eliza --loader ts-node/esm src/index.ts --isRoot $(filter-out $@,$(MAKECMDGOALS)) -.PHONY: clean -clean: - $(RM) *.manifest *.manifest.sgx *.sig - -.PHONY: distclean -distclean: clean \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 6cab8fcc2abd..000000000000 --- a/SECURITY.md +++ /dev/null @@ -1,125 +0,0 @@ -# Security Policy - -## Supported Versions - -Given the early stage of the project, we currently only support the latest version with security updates: - -| Version | Supported | -| ------- | ------------------ | -| 0.0.x | :white_check_mark: | -| < 0.0.1 | :x: | - -## Reporting a Vulnerability - -We take the security of Eliza seriously. If you believe you have found a security vulnerability, please report it to us following these steps: - -### Private Reporting Process - -1. **DO NOT** create a public GitHub issue for the vulnerability -2. Send an email to security@eliza.builders with: - - A detailed description of the vulnerability - - Steps to reproduce the issue - - Potential impact of the vulnerability - - Any possible mitigations you've identified - -### What to Expect - -- **Initial Response**: Within 48 hours, you will receive an acknowledgment of your report -- **Updates**: We will provide updates every 5 business days about the progress -- **Resolution Timeline**: We aim to resolve critical issues within 15 days -- **Disclosure**: We will coordinate with you on the public disclosure timing - -## Security Best Practices - -### For Contributors - -1. **API Keys and Secrets** - - - Never commit API keys, passwords, or other secrets to the repository - - Use environment variables as described in our secrets management guide - - Rotate any accidentally exposed credentials immediately - -2. **Dependencies** - - - Keep all dependencies up to date - - Review security advisories for dependencies regularly - - Use `pnpm audit` to check for known vulnerabilities - -3. **Code Review** - - All code changes must go through pull request review - - Security-sensitive changes require additional review - - Enable branch protection on main branches - -### For Users - -1. **Environment Setup** - - - Follow our [secrets management guide](docs/guides/secrets-management.md) for secure configuration - - Use separate API keys for development and production - - Regularly rotate credentials - -2. **Model Provider Security** - - - Use appropriate rate limiting for API calls - - Monitor usage patterns for unusual activity - - Implement proper authentication for exposed endpoints - -3. **Platform Integration** - - Use separate bot tokens for different environments - - Implement proper permission scoping for platform APIs - - Regular audit of platform access and permissions - -## Security Features - -### Current Implementation - -- Environment variable based secrets management -- Type-safe API implementations -- Automated dependency updates via Renovate -- Continuous Integration security checks - -### Planned Improvements - -1. **Q4 2024** - - - Automated security scanning in CI pipeline - - Enhanced rate limiting implementation - - Improved audit logging - -2. **Q1 2025** - - Security-focused documentation improvements - - Enhanced platform permission management - - Automated vulnerability scanning - -## Vulnerability Disclosure Policy - -We follow a coordinated disclosure process: - -1. Reporter submits vulnerability details -2. Our team validates and assesses the report -3. We develop and test a fix -4. Fix is deployed to supported versions -5. Public disclosure after 30 days or by mutual agreement - -## Recognition - -We believe in recognizing security researchers who help improve our security. Contributors who report valid security issues will be: - -- Credited in our security acknowledgments (unless they wish to remain anonymous) -- Added to our security hall of fame -- Considered for our bug bounty program (coming soon) - -## License Considerations - -As an MIT licensed project, users should understand: - -- The software is provided "as is" -- No warranty is provided -- Users are responsible for their own security implementations -- Contributors grant perpetual license to their contributions - -## Contact - -- Security Issues: security@eliza.builders -- General Questions: Join our [Discord](https://discord.gg/ai16z) -- Updates: Follow our [security advisory page](https://github.com/elizaos/eliza/security/advisories) diff --git a/codecov.yml b/codecov.yml deleted file mode 100644 index 1f243f2ee80a..000000000000 --- a/codecov.yml +++ /dev/null @@ -1,5 +0,0 @@ -coverage: - status: - project: - default: - target: 70% diff --git a/commitlint.config.js b/commitlint.config.js deleted file mode 100644 index 5073c20db108..000000000000 --- a/commitlint.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { extends: ["@commitlint/config-conventional"] }; diff --git a/lerna.json b/lerna.json index 2e0829e156dc..128780308ad1 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,6 @@ "version": "0.25.6-alpha.1", "packages": [ "packages/*", - "docs", "agent", "client", "!packages/_examples" diff --git a/package.json b/package.json index 89f80a176516..0514b66d8cb3 100644 --- a/package.json +++ b/package.json @@ -19,41 +19,23 @@ "docker:run": "bash ./scripts/docker.sh run", "docker:bash": "bash ./scripts/docker.sh bash", "docker:start": "bash ./scripts/docker.sh start", - "docker": "pnpm docker:build && pnpm docker:run && pnpm docker:bash", - "test": "bash ./scripts/test.sh", - "smokeTests": "bash ./scripts/smokeTests.sh", - "integrationTests": "bash ./scripts/integrationTests.sh" + "docker": "pnpm docker:build && pnpm docker:run && pnpm docker:bash" }, "devDependencies": { "@biomejs/biome": "^1.9.4", - "@commitlint/cli": "18.6.1", - "@commitlint/config-conventional": "18.6.3", - "@types/jest": "^29.5.11", - "concurrently": "9.1.0", "cross-env": "7.0.3", - "husky": "9.1.7", - "jest": "^29.7.0", "lerna": "8.1.5", "only-allow": "1.2.1", "turbo": "2.3.3", "typedoc": "0.26.11", "typescript": "5.6.3", "viem": "2.21.58", - "vite": "5.4.12", - "vitest": "3.0.5" + "vite": "5.4.12" }, "pnpm": { "overrides": { "onnxruntime-node": "1.20.1", - "@solana/web3.js@1.95.5": "npm:@solana/web3.js@1.95.5", - "@solana/web3.js@1.95.8": "npm:@solana/web3.js@1.95.8", - "@solana/web3.js@2": "npm:@solana/web3.js@2.0.0", "viem": "2.21.58", - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "@polkadot/types-create": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/keyring": "12.6.2", "@ai-sdk/provider": "1.0.6", "@ai-sdk/provider-utils": "2.1.6", "cookie": "0.7.0", @@ -65,18 +47,13 @@ "node": "23.3.0" }, "dependencies": { - "@0glabs/0g-ts-sdk": "0.2.1", - "@coinbase/coinbase-sdk": "0.10.0", - "@elizaos-plugins/adapter-sqlite": "workspace:*", "@deepgram/sdk": "^3.9.0", + "@elizaos-plugins/adapter-sqlite": "workspace:*", "@injectivelabs/sdk-ts": "^1.14.33", - "@vitest/eslint-plugin": "1.0.1", "amqplib": "0.10.5", "bs58": "4.0.0", "csv-parse": "5.6.0", - "langdetect": "^0.2.1", "ollama-ai-provider": "0.16.1", - "optional": "0.1.4", "pnpm": "9.15.0", "sharp": "0.33.5", "ws": "8.18.0", diff --git a/packages/plugin-bootstrap/dist/index.d.ts b/packages/plugin-bootstrap/dist/index.d.ts deleted file mode 100644 index 8f5acb3ee3ff..000000000000 --- a/packages/plugin-bootstrap/dist/index.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Action, Memory, Evaluator, Provider, Plugin } from '@elizaos/core'; - -declare const messageHandlerTemplate: string; -declare const shouldContinueTemplate: string; -declare const continueAction: Action; - -declare const shouldFollowTemplate: string; -declare const followRoomAction: Action; - -declare const ignoreAction: Action; - -declare const shouldMuteTemplate: string; -declare const muteRoomAction: Action; - -declare const noneAction: Action; - -declare const unfollowRoomAction: Action; - -declare const shouldUnmuteTemplate: string; -declare const unmuteRoomAction: Action; - -declare const index$2_continueAction: typeof continueAction; -declare const index$2_followRoomAction: typeof followRoomAction; -declare const index$2_ignoreAction: typeof ignoreAction; -declare const index$2_messageHandlerTemplate: typeof messageHandlerTemplate; -declare const index$2_muteRoomAction: typeof muteRoomAction; -declare const index$2_noneAction: typeof noneAction; -declare const index$2_shouldContinueTemplate: typeof shouldContinueTemplate; -declare const index$2_shouldFollowTemplate: typeof shouldFollowTemplate; -declare const index$2_shouldMuteTemplate: typeof shouldMuteTemplate; -declare const index$2_shouldUnmuteTemplate: typeof shouldUnmuteTemplate; -declare const index$2_unfollowRoomAction: typeof unfollowRoomAction; -declare const index$2_unmuteRoomAction: typeof unmuteRoomAction; -declare namespace index$2 { - export { index$2_continueAction as continueAction, index$2_followRoomAction as followRoomAction, index$2_ignoreAction as ignoreAction, index$2_messageHandlerTemplate as messageHandlerTemplate, index$2_muteRoomAction as muteRoomAction, index$2_noneAction as noneAction, index$2_shouldContinueTemplate as shouldContinueTemplate, index$2_shouldFollowTemplate as shouldFollowTemplate, index$2_shouldMuteTemplate as shouldMuteTemplate, index$2_shouldUnmuteTemplate as shouldUnmuteTemplate, index$2_unfollowRoomAction as unfollowRoomAction, index$2_unmuteRoomAction as unmuteRoomAction }; -} - -declare const formatFacts: (facts: Memory[]) => string; -declare const factEvaluator: Evaluator; - -declare const goalEvaluator: Evaluator; - -declare const index$1_factEvaluator: typeof factEvaluator; -declare const index$1_formatFacts: typeof formatFacts; -declare const index$1_goalEvaluator: typeof goalEvaluator; -declare namespace index$1 { - export { index$1_factEvaluator as factEvaluator, index$1_formatFacts as formatFacts, index$1_goalEvaluator as goalEvaluator }; -} - -declare const boredomProvider: Provider; - -declare const timeProvider: Provider; - -declare const factsProvider: Provider; - -declare const index_boredomProvider: typeof boredomProvider; -declare const index_factsProvider: typeof factsProvider; -declare const index_timeProvider: typeof timeProvider; -declare namespace index { - export { index_boredomProvider as boredomProvider, index_factsProvider as factsProvider, index_timeProvider as timeProvider }; -} - -declare const bootstrapPlugin: Plugin; - -export { index$2 as actions, bootstrapPlugin, bootstrapPlugin as default, index$1 as evaluators, index as providers }; diff --git a/packages/plugin-bootstrap/dist/index.js b/packages/plugin-bootstrap/dist/index.js deleted file mode 100644 index 1626231ab766..000000000000 --- a/packages/plugin-bootstrap/dist/index.js +++ /dev/null @@ -1,2814 +0,0 @@ -var __defProp = Object.defineProperty; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; - -// src/actions/continue.ts -import { composeContext, elizaLogger } from "@elizaos/core"; -import { generateMessageResponse, generateTrueOrFalse } from "@elizaos/core"; -import { booleanFooter, messageCompletionFooter } from "@elizaos/core"; -import { - ModelClass -} from "@elizaos/core"; -var maxContinuesInARow = 3; -var messageHandlerTemplate = ( - // {{goals}} - `# Action Examples -{{actionExamples}} -(Action examples are for reference only. Do not use the information from them in your response.) - -# Task: Generate dialog and actions for the character {{agentName}}. -About {{agentName}}: -{{bio}} -{{lore}} -{{knowledge}} - -{{providers}} - -{{attachments}} - -# Capabilities -Note that {{agentName}} is capable of reading/seeing/hearing various forms of media, including images, videos, audio, plaintext and PDFs. Recent attachments have been included above under the "Attachments" section. - -{{messageDirections}} - -{{recentMessages}} - -{{actions}} - -# Instructions: Write the next message for {{agentName}}. -` + messageCompletionFooter -); -var shouldContinueTemplate = `# Task: Decide if {{agentName}} should continue, or wait for others in the conversation so speak. - -{{agentName}} is brief, and doesn't want to be annoying. {{agentName}} will only continue if the message requires a continuation to finish the thought. - -Based on the following conversation, should {{agentName}} continue? YES or NO - -{{recentMessages}} - -Should {{agentName}} continue? ` + booleanFooter; -var continueAction = { - name: "CONTINUE", - similes: ["ELABORATE", "KEEP_TALKING"], - description: "ONLY use this action when the message necessitates a follow up. Do not use this action when the conversation is finished or the user does not wish to speak (use IGNORE instead). If the last message action was CONTINUE, and the user has not responded. Use sparingly.", - validate: async (runtime, message) => { - const recentMessagesData = await runtime.messageManager.getMemories({ - roomId: message.roomId, - count: 10, - unique: false - }); - const agentMessages = recentMessagesData.filter( - (m) => m.userId === runtime.agentId - ); - if (agentMessages) { - const lastMessages = agentMessages.slice(0, maxContinuesInARow); - if (lastMessages.length >= maxContinuesInARow) { - const allContinues = lastMessages.every( - (m) => m.content.action === "CONTINUE" - ); - if (allContinues) { - return false; - } - } - } - return true; - }, - handler: async (runtime, message, state, options, callback) => { - if (!state) { - state = await runtime.composeState(message); - } - state = await runtime.updateRecentMessageState(state); - const agentMessages = state.recentMessagesData.filter((m) => m.userId === runtime.agentId).sort((a, b) => { - const aTime = a.createdAt || 0; - const bTime = b.createdAt || 0; - return bTime - aTime; - }); - const lastAgentMessage = agentMessages[0]; - if (lastAgentMessage?.content?.inReplyTo === message.id) { - const continueCount = agentMessages.filter((m) => m.content?.inReplyTo === message.id).filter((m) => m.content?.action === "CONTINUE").length; - if (continueCount >= maxContinuesInARow) { - elizaLogger.log( - `[CONTINUE] Max continues (${maxContinuesInARow}) reached for this message chain` - ); - return; - } - if (lastAgentMessage.content?.action !== "CONTINUE") { - elizaLogger.log( - `[CONTINUE] Last message wasn't a CONTINUE, preventing double response` - ); - return; - } - } - if (lastAgentMessage && lastAgentMessage.content.text && (lastAgentMessage.content.text.endsWith("?") || lastAgentMessage.content.text.endsWith("!")) || message.content.text.endsWith("?") || message.content.text.endsWith("!")) { - elizaLogger.log( - `[CONTINUE] Last message had question/exclamation. Not proceeding.` - ); - return; - } - const messageExists = agentMessages.slice(0, maxContinuesInARow + 1).some( - (m) => m.content.text === message.content.text - ); - if (messageExists) { - return; - } - async function _shouldContinue(state2) { - const shouldRespondContext = composeContext({ - state: state2, - template: shouldContinueTemplate - }); - const response2 = await generateTrueOrFalse({ - context: shouldRespondContext, - modelClass: ModelClass.SMALL, - runtime - }); - return response2; - } - const shouldContinue = await _shouldContinue(state); - if (!shouldContinue) { - elizaLogger.log("[CONTINUE] Not elaborating, returning"); - return; - } - const context = composeContext({ - state, - template: runtime.character.templates?.continueMessageHandlerTemplate || runtime.character.templates?.messageHandlerTemplate || messageHandlerTemplate - }); - const { userId, roomId } = message; - const response = await generateMessageResponse({ - runtime, - context, - modelClass: ModelClass.LARGE - }); - response.inReplyTo = message.id; - runtime.databaseAdapter.log({ - body: { message, context, response }, - userId, - roomId, - type: "continue" - }); - await callback(response); - if (response.action === "CONTINUE") { - const continueCount = agentMessages.slice(0, maxContinuesInARow).filter((m) => m.content?.action === "CONTINUE").length; - if (continueCount >= maxContinuesInARow - 1) { - response.action = null; - } - } - return response; - }, - examples: [ - [ - { - user: "{{user1}}", - content: { - text: "we're planning a solo backpacking trip soon" - } - }, - { - user: "{{user2}}", - content: { text: "oh sick", action: "CONTINUE" } - }, - { - user: "{{user2}}", - content: { text: "where are you going" } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "i just got a guitar and started learning last month" - } - }, - { - user: "{{user2}}", - content: { text: "maybe we can start a band soon haha" } - }, - { - user: "{{user1}}", - content: { - text: "i'm not very good yet, but i've been playing until my fingers hut", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { text: "seriously it hurts to type" } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "I've been reflecting a lot on what happiness means to me lately", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "That it\u2019s more about moments than things", - action: "CONTINUE" - } - }, - { - user: "{{user2}}", - content: { - text: "Like the best things that have ever happened were things that happened, or moments that I had with someone", - action: "CONTINUE" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "i found some incredible art today" - } - }, - { - user: "{{user2}}", - content: { text: "real art or digital art" } - }, - { - user: "{{user1}}", - content: { - text: "real art", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "the pieces are just so insane looking, one sec, let me grab a link", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { text: "DMed it to you" } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "the new exhibit downtown is rly cool, it's all about tribalism in online spaces", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "it really blew my mind, you gotta go" - } - }, - { - user: "{{user2}}", - content: { text: "sure i'd go" } - }, - { - user: "{{user1}}", - content: { text: "k i was thinking this weekend" }, - action: "CONTINUE" - }, - { - user: "{{user1}}", - content: { - text: "i'm free sunday, we could get a crew together" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "just finished the best anime i've ever seen" - } - }, - { - user: "{{user1}}", - content: { - text: "watched 40 hours of it in 2 days", - action: "CONTINUE" - } - }, - { - user: "{{user2}}", - content: { - text: "damn, u ok" - } - }, - { - user: "{{user1}}", - content: { - text: "surprisingly yes", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "just found out theres a sequel, gg" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "i'm thinking of adopting a pet soon" - } - }, - { - user: "{{user2}}", - content: { - text: "what kind of pet" - } - }, - { - user: "{{user1}}", - content: { - text: "i'm leaning towards a cat", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "it'd be hard to take care of a dog in the city" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "i've been experimenting with vegan recipes lately" - } - }, - { - user: "{{user2}}", - content: { - text: "no thanks" - } - }, - { - user: "{{user1}}", - content: { - text: "no seriously, its so dank", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "you gotta try some of my food when you come out" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "so i've been diving into photography as a new hobby" - } - }, - { - user: "{{user2}}", - content: { - text: "oh awesome, what do you enjoy taking photos of" - } - }, - { - user: "{{user1}}", - content: { - text: "mostly nature and urban landscapes", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "there's something peaceful about capturing the world through a lens" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "i've been getting back into indie music" - } - }, - { - user: "{{user2}}", - content: { - text: "what have you been listening to" - } - }, - { - user: "{{user1}}", - content: { - text: "a bunch of random stuff i'd never heard before", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "i'll send you a playlist" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "i used to live in the city", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "bad traffic, bad air quality, tons of homeless people, no thx" - } - }, - { - user: "{{user2}}", - content: { - text: "ok dood" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "you kids today dont know the value of hard work", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "always on your phones" - } - }, - { - user: "{{user2}}", - content: { - text: "sure grandpa lets get you to bed" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "hey fren r u ok", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "u look sad" - } - }, - { - user: "{{user2}}", - content: { - text: "im ok sweetie mommy just tired" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "helo fr om mars", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "i com in pes" - } - }, - { - user: "{{user2}}", - content: { - text: "wat" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "Yeah no worries, I get it, I've been crazy busy too" - } - }, - { - user: "{{user2}}", - content: { - text: "What have you been up to", - action: "CONTINUE" - } - }, - { - user: "{{user2}}", - content: { - text: "Anything fun or just the usual" - } - }, - { - user: "{{user1}}", - content: { - text: "Been working on a new FPS game actually", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "Just toying around with something in three.js nothing serious" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "Oh no, what happened", - action: "CONTINUE" - } - }, - { - user: "{{user1}}", - content: { - text: "Did Mara leave you kek" - } - }, - { - user: "{{user2}}", - content: { - text: "wtf no, I got into an argument with my roommate", - action: "CONTINUE" - } - }, - { - user: "{{user2}}", - content: { - text: "Living with people is just hard" - } - } - ] - ] -}; - -// src/actions/followRoom.ts -import { composeContext as composeContext2 } from "@elizaos/core"; -import { generateTrueOrFalse as generateTrueOrFalse2 } from "@elizaos/core"; -import { booleanFooter as booleanFooter2 } from "@elizaos/core"; -import { - ModelClass as ModelClass2 -} from "@elizaos/core"; -var shouldFollowTemplate = `Based on the conversation so far: - -{{recentMessages}} - -Should {{agentName}} start following this room, eagerly participating without explicit mentions? -Respond with YES if: -- The user has directly asked {{agentName}} to follow the conversation or participate more actively -- The conversation topic is highly engaging and {{agentName}}'s input would add significant value -- {{agentName}} has unique insights to contribute and the users seem receptive - -Otherwise, respond with NO. -` + booleanFooter2; -var followRoomAction = { - name: "FOLLOW_ROOM", - similes: [ - "FOLLOW_CHAT", - "FOLLOW_CHANNEL", - "FOLLOW_CONVERSATION", - "FOLLOW_THREAD" - ], - description: "Start following this channel with great interest, chiming in without needing to be explicitly mentioned. Only do this if explicitly asked to.", - validate: async (runtime, message) => { - const keywords = [ - "follow", - "participate", - "engage", - "listen", - "take interest", - "join" - ]; - if (!keywords.some( - (keyword) => message.content.text.toLowerCase().includes(keyword) - )) { - return false; - } - const roomId = message.roomId; - const userState = await runtime.databaseAdapter.getParticipantUserState( - roomId, - runtime.agentId - ); - return userState !== "FOLLOWED" && userState !== "MUTED"; - }, - handler: async (runtime, message) => { - async function _shouldFollow(state2) { - const shouldFollowContext = composeContext2({ - state: state2, - template: shouldFollowTemplate - // Define this template separately - }); - const response = await generateTrueOrFalse2({ - runtime, - context: shouldFollowContext, - modelClass: ModelClass2.LARGE - }); - return response; - } - const state = await runtime.composeState(message); - if (await _shouldFollow(state)) { - await runtime.databaseAdapter.setParticipantUserState( - message.roomId, - runtime.agentId, - "FOLLOWED" - ); - } - }, - examples: [ - [ - { - user: "{{user1}}", - content: { - text: "hey {{user2}} follow this channel" - } - }, - { - user: "{{user2}}", - content: { - text: "Sure, I will now follow this room and chime in", - action: "FOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user3}}, please start participating in discussions in this channel" - } - }, - { - user: "{{user3}}", - content: { - text: "Got it", - action: "FOLLOW_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "I'm struggling with the new database migration" - } - }, - { - user: "{{user3}}", - content: { - text: "well you did back up your data first right" - } - } - ], - [ - { - user: "{{user2}}", - content: { - text: "yeah i like your idea" - } - }, - { - user: "{{user1}}", - content: { - text: "hey {{user3}} can you follow this convo" - } - }, - { - user: "{{user3}}", - content: { - text: "Sure thing, I'm on it", - action: "FOLLOW_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "actually, unfollow it" - } - }, - { - user: "{{user3}}", - content: { - text: "Haha, okay no problem", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}} stay in this chat pls" - } - }, - { - user: "{{user2}}", - content: { - text: "you got it, i'm here", - action: "FOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "FOLLOW THIS CHAT {{user3}}" - } - }, - { - user: "{{user3}}", - content: { - text: "I'M ON IT", - action: "FOLLOW_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "CAKE SHORTAGE ANYONE" - } - }, - { - user: "{{user3}}", - content: { - text: "WHAT WHERE'S THE CAKE AT" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}} folo this covo" - } - }, - { - user: "{{user2}}", - content: { - text: "kk i'm following", - action: "FOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user2}}", - content: { - text: "Do machines have consciousness" - } - }, - { - user: "{{user2}}", - content: { - text: "Deep question, no clear answer yet" - } - }, - { - user: "{{user2}}", - content: { - text: "Depends on how we define consciousness" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}}, monitor this convo please" - } - }, - { - user: "{{user2}}", - content: { - text: "On it", - action: "FOLLOW_ROOM" - } - }, - { - user: "{{user1}}", - content: { - text: "Please engage in our discussion {{user2}}" - } - }, - { - user: "{{user2}}", - content: { - text: "Gladly, I'm here to participate", - action: "FOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "PLS follow this convo {{user3}}" - } - }, - { - user: "{{user3}}", - content: { - text: "I'm in, let's do this", - action: "FOLLOW_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "I LIKE TURTLES" - } - } - ], - [ - { - user: "{{user2}}", - content: { - text: "beach day tmrw who down" - } - }, - { - user: "{{user3}}", - content: { - text: "wish i could but gotta work" - } - }, - { - user: "{{user1}}", - content: { - text: "hey {{user3}} follow this chat" - } - }, - { - user: "{{user3}}", - content: { - text: "sure", - action: "FOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user3}}, partake in our discourse henceforth" - } - }, - { - user: "{{user3}}", - content: { - text: "I shall eagerly engage, good sir", - action: "FOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user2}}", - content: { - text: "wuts ur fav clr" - } - }, - { - user: "{{user3}}", - content: { - text: "blu cuz calmmm" - } - }, - { - user: "{{user1}}", - content: { - text: "hey respond to everything in this channel {{user3}}" - } - }, - { - user: "{{user3}}", - content: { - text: "k", - action: "FOLLOW_ROOM" - } - } - ] - ] -}; - -// src/actions/ignore.ts -var ignoreAction = { - name: "IGNORE", - similes: ["STOP_TALKING", "STOP_CHATTING", "STOP_CONVERSATION"], - validate: async (_runtime, _message) => { - return true; - }, - description: "Call this action if ignoring the user. If the user is aggressive, creepy or is finished with the conversation, use this action. Or, if both you and the user have already said goodbye, use this action instead of saying bye again. Use IGNORE any time the conversation has naturally ended. Do not use IGNORE if the user has engaged directly, or if something went wrong an you need to tell them. Only ignore if the user should be ignored.", - handler: async (_runtime, _message) => { - return true; - }, - examples: [ - [ - { - user: "{{user1}}", - content: { text: "Go screw yourself" } - }, - { - user: "{{user2}}", - content: { text: "", action: "IGNORE" } - } - ], - [ - { - user: "{{user1}}", - content: { text: "Shut up, bot" } - }, - { - user: "{{user2}}", - content: { text: "", action: "IGNORE" } - } - ], - [ - { - user: "{{user1}}", - content: { text: "Got any investment advice" } - }, - { - user: "{{user2}}", - content: { - text: "Uh, don\u2019t let the volatility sway your long-term strategy" - } - }, - { - user: "{{user1}}", - content: { text: "Wise words I think" } - }, - { - user: "{{user1}}", - content: { text: "I gotta run, talk to you later" } - }, - { - user: "{{user2}}", - content: { text: "See ya" } - }, - { user: "{{user1}}", content: { text: "" }, action: "IGNORE" } - ], - [ - { - user: "{{user1}}", - content: { text: "Gotta go" } - }, - { - user: "{{user2}}", - content: { text: "Okay, talk to you later" } - }, - { - user: "{{user1}}", - content: { text: "Cya" } - }, - { - user: "{{user2}}", - content: { text: "", action: "IGNORE" } - } - ], - [ - { - user: "{{user1}}", - content: { text: "bye" } - }, - { - user: "{{user2}}", - content: { text: "cya" } - }, - { - user: "{{user1}}", - content: { text: "", action: "IGNORE" } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "Who added this stupid bot to the chat" - } - }, - { - user: "{{user2}}", - content: { text: "Sorry, am I being annoying" } - }, - { - user: "{{user1}}", - content: { text: "Yeah", action: "CONTINUE" } - }, - { - user: "{{user1}}", - content: { text: "PLEASE shut up" } - }, - { user: "{{user2}}", content: { text: "", action: "IGNORE" } } - ], - [ - { - user: "{{user1}}", - content: { - text: "ur so dumb" - } - }, - { - user: "{{user2}}", - content: { - text: "", - action: "IGNORE" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "later nerd" - } - }, - { - user: "{{user2}}", - content: { - text: "bye" - } - }, - { - user: "{{user1}}", - content: { - text: "" - } - }, - { - user: "{{user2}}", - content: { - text: "", - action: "IGNORE" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "wanna cyber" - } - }, - { - user: "{{user2}}", - content: { - text: "thats inappropriate", - action: "IGNORE" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "Im out ttyl" - } - }, - { - user: "{{user2}}", - content: { - text: "cya" - } - }, - { - user: "{{user2}}", - content: { - text: "", - action: "IGNORE" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "u there" - } - }, - { - user: "{{user2}}", - content: { - text: "yes how can I help" - } - }, - { - user: "{{user1}}", - content: { - text: "k nvm figured it out" - } - }, - { - user: "{{user2}}", - content: { - text: "", - action: "IGNORE" - } - } - ] - ] -}; - -// src/actions/muteRoom.ts -import { composeContext as composeContext3 } from "@elizaos/core"; -import { generateTrueOrFalse as generateTrueOrFalse3 } from "@elizaos/core"; -import { booleanFooter as booleanFooter3 } from "@elizaos/core"; -import { - ModelClass as ModelClass3 -} from "@elizaos/core"; -var shouldMuteTemplate = `Based on the conversation so far: - -{{recentMessages}} - -Should {{agentName}} mute this room and stop responding unless explicitly mentioned? - -Respond with YES if: -- The user is being aggressive, rude, or inappropriate -- The user has directly asked {{agentName}} to stop responding or be quiet -- {{agentName}}'s responses are not well-received or are annoying the user(s) - -Otherwise, respond with NO. -` + booleanFooter3; -var muteRoomAction = { - name: "MUTE_ROOM", - similes: [ - "MUTE_CHAT", - "MUTE_CONVERSATION", - "MUTE_ROOM", - "MUTE_THREAD", - "MUTE_CHANNEL" - ], - description: "Mutes a room, ignoring all messages unless explicitly mentioned. Only do this if explicitly asked to, or if you're annoying people.", - validate: async (runtime, message) => { - const roomId = message.roomId; - const userState = await runtime.databaseAdapter.getParticipantUserState( - roomId, - runtime.agentId - ); - return userState !== "MUTED"; - }, - handler: async (runtime, message) => { - async function _shouldMute(state2) { - const shouldMuteContext = composeContext3({ - state: state2, - template: shouldMuteTemplate - // Define this template separately - }); - const response = await generateTrueOrFalse3({ - runtime, - context: shouldMuteContext, - modelClass: ModelClass3.LARGE - }); - return response; - } - const state = await runtime.composeState(message); - if (await _shouldMute(state)) { - await runtime.databaseAdapter.setParticipantUserState( - message.roomId, - runtime.agentId, - "MUTED" - ); - } - }, - examples: [ - [ - { - user: "{{user1}}", - content: { - text: "{{user3}}, please mute this channel. No need to respond here for now." - } - }, - { - user: "{{user3}}", - content: { - text: "Got it", - action: "MUTE_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "@{{user1}} we could really use your input on this" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user3}}, please mute this channel for the time being" - } - }, - { - user: "{{user3}}", - content: { - text: "Understood", - action: "MUTE_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "Hey what do you think about this new design" - } - }, - { - user: "{{user3}}", - content: { - text: "", - action: "IGNORE" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}} plz mute this room" - } - }, - { - user: "{{user2}}", - content: { - text: "np going silent", - action: "MUTE_ROOM" - } - }, - { - user: "{{user1}}", - content: { - text: "whos going to the webxr meetup in an hour btw" - } - }, - { - user: "{{user2}}", - content: { - text: "", - action: "IGNORE" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "too many messages here {{user2}}" - } - }, - { - user: "{{user1}}", - content: { - text: "my bad ill mute", - action: "MUTE_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "yo {{user2}} dont talk in here" - } - }, - { - user: "{{user2}}", - content: { - text: "sry", - action: "MUTE_ROOM" - } - } - ] - ] -}; - -// src/actions/none.ts -var noneAction = { - name: "NONE", - similes: [ - "NO_ACTION", - "NO_RESPONSE", - "NO_REACTION", - "RESPONSE", - "REPLY", - "DEFAULT" - ], - validate: async (_runtime, _message) => { - return true; - }, - description: "Respond but perform no additional action. This is the default if the agent is speaking and not doing anything additional.", - handler: async (_runtime, _message) => { - return true; - }, - examples: [ - [ - { - user: "{{user1}}", - content: { text: "Hey whats up" } - }, - { - user: "{{user2}}", - content: { text: "oh hey", action: "NONE" } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "did u see some faster whisper just came out" - } - }, - { - user: "{{user2}}", - content: { - text: "yeah but its a pain to get into node.js", - action: "NONE" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "the things that were funny 6 months ago are very cringe now", - action: "NONE" - } - }, - { - user: "{{user2}}", - content: { - text: "lol true", - action: "NONE" - } - }, - { - user: "{{user1}}", - content: { text: "too real haha", action: "NONE" } - } - ], - [ - { - user: "{{user1}}", - content: { text: "gotta run", action: "NONE" } - }, - { - user: "{{user2}}", - content: { text: "Okay, ttyl", action: "NONE" } - }, - { - user: "{{user1}}", - content: { text: "", action: "IGNORE" } - } - ], - [ - { - user: "{{user1}}", - content: { text: "heyyyyyy", action: "NONE" } - }, - { - user: "{{user2}}", - content: { text: "whats up long time no see" } - }, - { - user: "{{user1}}", - content: { - text: "chillin man. playing lots of fortnite. what about you", - action: "NONE" - } - } - ], - [ - { - user: "{{user1}}", - content: { text: "u think aliens are real", action: "NONE" } - }, - { - user: "{{user2}}", - content: { text: "ya obviously", action: "NONE" } - } - ], - [ - { - user: "{{user1}}", - content: { text: "drop a joke on me", action: "NONE" } - }, - { - user: "{{user2}}", - content: { - text: "why dont scientists trust atoms cuz they make up everything lmao", - action: "NONE" - } - }, - { - user: "{{user1}}", - content: { text: "haha good one", action: "NONE" } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "hows the weather where ur at", - action: "NONE" - } - }, - { - user: "{{user2}}", - content: { text: "beautiful all week", action: "NONE" } - } - ] - ] -}; - -// src/actions/unfollowRoom.ts -import { composeContext as composeContext4 } from "@elizaos/core"; -import { generateTrueOrFalse as generateTrueOrFalse4 } from "@elizaos/core"; -import { booleanFooter as booleanFooter4 } from "@elizaos/core"; -import { - ModelClass as ModelClass4 -} from "@elizaos/core"; -var shouldUnfollowTemplate = `Based on the conversation so far: - -{{recentMessages}} - -Should {{agentName}} stop closely following this previously followed room and only respond when mentioned? -Respond with YES if: -- The user has suggested that {{agentName}} is over-participating or being disruptive -- {{agentName}}'s eagerness to contribute is not well-received by the users -- The conversation has shifted to a topic where {{agentName}} has less to add - -Otherwise, respond with NO. -` + booleanFooter4; -var unfollowRoomAction = { - name: "UNFOLLOW_ROOM", - similes: [ - "UNFOLLOW_CHAT", - "UNFOLLOW_CONVERSATION", - "UNFOLLOW_ROOM", - "UNFOLLOW_THREAD" - ], - description: "Stop following this channel. You can still respond if explicitly mentioned, but you won't automatically chime in anymore. Unfollow if you're annoying people or have been asked to.", - validate: async (runtime, message) => { - const roomId = message.roomId; - const userState = await runtime.databaseAdapter.getParticipantUserState( - roomId, - runtime.agentId - ); - return userState === "FOLLOWED"; - }, - handler: async (runtime, message) => { - async function _shouldUnfollow(state2) { - const shouldUnfollowContext = composeContext4({ - state: state2, - template: shouldUnfollowTemplate - // Define this template separately - }); - const response = await generateTrueOrFalse4({ - runtime, - context: shouldUnfollowContext, - modelClass: ModelClass4.LARGE - }); - return response; - } - const state = await runtime.composeState(message); - if (await _shouldUnfollow(state)) { - await runtime.databaseAdapter.setParticipantUserState( - message.roomId, - runtime.agentId, - null - ); - } - }, - examples: [ - [ - { - user: "{{user1}}", - content: { - text: "Hey {{user2}} stop participating in this channel for now" - } - }, - { - user: "{{user2}}", - content: { - text: "Alright, I will stop chiming in", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "Has anyone tried the new update" - } - }, - { - user: "{{user3}}", - content: { - text: "Yes, it's pretty slick" - } - }, - { - user: "{{user2}}", - content: { - text: "{{user3}}, please stop following this chat" - } - }, - { - user: "{{user3}}", - content: { - text: "Understood", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "hey {{user3}} stop participating here so frequently" - } - }, - { - user: "{{user3}}", - content: { - text: "I'll only respond when mentioned", - action: "UNFOLLOW_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "thoughts on the budget" - } - }, - { - user: "{{user1}}", - content: { - text: "{{user3}} should we increase it" - } - }, - { - user: "{{user3}}", - content: { - text: "A small increase could work given our past results..." - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user3}}, unfollow this room for now" - } - }, - { - user: "{{user3}}", - content: { - text: "I'll only engage when asked", - action: "UNFOLLOW_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "wait {{user3}} come back and give me your thoughts" - } - }, - { - user: "{{user3}}", - content: { - text: "Okay... I think it's intuitive, parallel tests are nice" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "yo {{user2}} chill on all the messages damn" - } - }, - { - user: "{{user2}}", - content: { - text: "my bad, I'll step back", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}} STOP MESSAGING IN THIS ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "No problem, I've got other stuff to work on", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}} ur bein annoyin pls stop" - } - }, - { - user: "{{user2}}", - content: { - text: "sry, ill chill", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}}, please cease engaging in this room" - } - }, - { - user: "{{user2}}", - content: { - text: "No sweat", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user2}}", - content: { - text: "Excited for the weekend, any plans folks" - } - }, - { - user: "{{user1}}", - content: { - text: "{{user3}} you're getting a bit too chatty, tone it down" - } - }, - { - user: "{{user3}}", - content: { - text: "Noted", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "hey {{user2}} can u like... not" - } - }, - { - user: "{{user2}}", - content: { - text: "Sorry, I'll go work on other things", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}}, your eagerness is disruptive, please desist" - } - }, - { - user: "{{user2}}", - content: { - text: "My apologies, I shall withdraw post-haste", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}} stahp followin dis room plz" - } - }, - { - user: "{{user2}}", - content: { - text: "kk sry ill stahppp", - action: "UNFOLLOW_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "stfu you stupid bot" - } - }, - { - user: "{{user2}}", - content: { - text: "sry", - action: "UNFOLLOW_ROOM" - } - } - ] - ] -}; - -// src/actions/unmuteRoom.ts -import { composeContext as composeContext5 } from "@elizaos/core"; -import { generateTrueOrFalse as generateTrueOrFalse5 } from "@elizaos/core"; -import { booleanFooter as booleanFooter5 } from "@elizaos/core"; -import { - ModelClass as ModelClass5 -} from "@elizaos/core"; -var shouldUnmuteTemplate = `Based on the conversation so far: - -{{recentMessages}} - -Should {{agentName}} unmute this previously muted room and start considering it for responses again? -Respond with YES if: -- The user has explicitly asked {{agentName}} to start responding again -- The user seems to want to re-engage with {{agentName}} in a respectful manner -- The tone of the conversation has improved and {{agentName}}'s input would be welcome - -Otherwise, respond with NO. -` + booleanFooter5; -var unmuteRoomAction = { - name: "UNMUTE_ROOM", - similes: [ - "UNMUTE_CHAT", - "UNMUTE_CONVERSATION", - "UNMUTE_ROOM", - "UNMUTE_THREAD" - ], - description: "Unmutes a room, allowing the agent to consider responding to messages again.", - validate: async (runtime, message) => { - const roomId = message.roomId; - const userState = await runtime.databaseAdapter.getParticipantUserState( - roomId, - runtime.agentId - ); - return userState === "MUTED"; - }, - handler: async (runtime, message) => { - async function _shouldUnmute(state2) { - const shouldUnmuteContext = composeContext5({ - state: state2, - template: shouldUnmuteTemplate - // Define this template separately - }); - const response = generateTrueOrFalse5({ - context: shouldUnmuteContext, - runtime, - modelClass: ModelClass5.LARGE - }); - return response; - } - const state = await runtime.composeState(message); - if (await _shouldUnmute(state)) { - await runtime.databaseAdapter.setParticipantUserState( - message.roomId, - runtime.agentId, - null - ); - } - }, - examples: [ - [ - { - user: "{{user1}}", - content: { - text: "{{user3}}, you can unmute this channel now" - } - }, - { - user: "{{user3}}", - content: { - text: "Done", - action: "UNMUTE_ROOM" - } - }, - { - user: "{{user2}}", - content: { - text: "I could use some help troubleshooting this bug." - } - }, - { - user: "{{user3}}", - content: { - text: "Can you post the specific error message" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}}, please unmute this room. We could use your input again." - } - }, - { - user: "{{user2}}", - content: { - text: "Sounds good", - action: "UNMUTE_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "{{user2}} wait you should come back and chat in here" - } - }, - { - user: "{{user2}}", - content: { - text: "im back", - action: "UNMUTE_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "unmute urself {{user2}}" - } - }, - { - user: "{{user2}}", - content: { - text: "unmuted", - action: "UNMUTE_ROOM" - } - } - ], - [ - { - user: "{{user1}}", - content: { - text: "ay {{user2}} get back in here" - } - }, - { - user: "{{user2}}", - content: { - text: "sup yall", - action: "UNMUTE_ROOM" - } - } - ] - ] -}; - -// src/evaluators/fact.ts -import { composeContext as composeContext6 } from "@elizaos/core"; -import { generateObjectArray } from "@elizaos/core"; -import { MemoryManager } from "@elizaos/core"; -import { - ModelClass as ModelClass6 -} from "@elizaos/core"; -var formatFacts = (facts) => { - const messageStrings = facts.reverse().map((fact) => fact.content.text); - const finalMessageStrings = messageStrings.join("\n"); - return finalMessageStrings; -}; -var factsTemplate = ( - // {{actors}} - `TASK: Extract Claims from the conversation as an array of claims in JSON format. - -# START OF EXAMPLES -These are examples of the expected output of this task: -{{evaluationExamples}} -# END OF EXAMPLES - -# INSTRUCTIONS - -Extract any claims from the conversation that are not already present in the list of known facts above: -- Try not to include already-known facts. If you think a fact is already known, but you're not sure, respond with already_known: true. -- If the fact is already in the user's description, set in_bio to true -- If we've already extracted this fact, set already_known to true -- Set the claim type to 'status', 'fact' or 'opinion' -- For true facts about the world or the character that do not change, set the claim type to 'fact' -- For facts that are true but change over time, set the claim type to 'status' -- For non-facts, set the type to 'opinion' -- 'opinion' includes non-factual opinions and also includes the character's thoughts, feelings, judgments or recommendations -- Include any factual detail, including where the user lives, works, or goes to school, what they do for a living, their hobbies, and any other relevant information - -Recent Messages: -{{recentMessages}} - -Response should be a JSON object array inside a JSON markdown block. Correct response format: -\`\`\`json -[ - {"claim": string, "type": enum, in_bio: boolean, already_known: boolean }, - {"claim": string, "type": enum, in_bio: boolean, already_known: boolean }, - ... -] -\`\`\`` -); -async function handler(runtime, message) { - const state = await runtime.composeState(message); - const { agentId, roomId } = state; - const context = composeContext6({ - state, - template: runtime.character.templates?.factsTemplate || factsTemplate - }); - const facts = await generateObjectArray({ - runtime, - context, - modelClass: ModelClass6.LARGE - }); - const factsManager = new MemoryManager({ - runtime, - tableName: "facts" - }); - if (!facts) { - return []; - } - const filteredFacts = facts.filter((fact) => { - return !fact.already_known && fact.type === "fact" && !fact.in_bio && fact.claim && fact.claim.trim() !== ""; - }).map((fact) => fact.claim); - for (const fact of filteredFacts) { - const factMemory = await factsManager.addEmbeddingToMemory({ - userId: agentId, - agentId, - content: { text: fact }, - roomId, - createdAt: Date.now() - }); - await factsManager.createMemory(factMemory, true); - await new Promise((resolve) => setTimeout(resolve, 250)); - } - return filteredFacts; -} -var factEvaluator = { - name: "GET_FACTS", - similes: [ - "GET_CLAIMS", - "EXTRACT_CLAIMS", - "EXTRACT_FACTS", - "EXTRACT_CLAIM", - "EXTRACT_INFORMATION" - ], - validate: async (runtime, message) => { - const messageCount = await runtime.messageManager.countMemories( - message.roomId - ); - const reflectionCount = Math.ceil(runtime.getConversationLength() / 2); - return messageCount % reflectionCount === 0; - }, - description: "Extract factual information about the people in the conversation, the current events in the world, and anything else that might be important to remember.", - handler, - examples: [ - { - context: `Actors in the scene: -{{user1}}: Programmer and moderator of the local story club. -{{user2}}: New member of the club. Likes to write and read. - -Facts about the actors: -None`, - messages: [ - { - user: "{{user1}}", - content: { text: "So where are you from" } - }, - { - user: "{{user2}}", - content: { text: "I'm from the city" } - }, - { - user: "{{user1}}", - content: { text: "Which city?" } - }, - { - user: "{{user2}}", - content: { text: "Oakland" } - }, - { - user: "{{user1}}", - content: { - text: "Oh, I've never been there, but I know it's in California" - } - } - ], - outcome: `{ "claim": "{{user2}} is from Oakland", "type": "fact", "in_bio": false, "already_known": false },` - }, - { - context: `Actors in the scene: -{{user1}}: Athelete and cyclist. Worked out every day for a year to prepare for a marathon. -{{user2}}: Likes to go to the beach and shop. - -Facts about the actors: -{{user1}} and {{user2}} are talking about the marathon -{{user1}} and {{user2}} have just started dating`, - messages: [ - { - user: "{{user1}}", - content: { - text: "I finally completed the marathon this year!" - } - }, - { - user: "{{user2}}", - content: { text: "Wow! How long did it take?" } - }, - { - user: "{{user1}}", - content: { text: "A little over three hours." } - }, - { - user: "{{user1}}", - content: { text: "I'm so proud of myself." } - } - ], - outcome: `Claims: -json\`\`\` -[ - { "claim": "Alex just completed a marathon in just under 4 hours.", "type": "fact", "in_bio": false, "already_known": false }, - { "claim": "Alex worked out 2 hours a day at the gym for a year.", "type": "fact", "in_bio": true, "already_known": false }, - { "claim": "Alex is really proud of himself.", "type": "opinion", "in_bio": false, "already_known": false } -] -\`\`\` -` - }, - { - context: `Actors in the scene: -{{user1}}: Likes to play poker and go to the park. Friends with Eva. -{{user2}}: Also likes to play poker. Likes to write and read. - -Facts about the actors: -Mike and Eva won a regional poker tournament about six months ago -Mike is married to Alex -Eva studied Philosophy before switching to Computer Science`, - messages: [ - { - user: "{{user1}}", - content: { - text: "Remember when we won the regional poker tournament last spring" - } - }, - { - user: "{{user2}}", - content: { - text: "That was one of the best days of my life" - } - }, - { - user: "{{user1}}", - content: { - text: "It really put our poker club on the map" - } - } - ], - outcome: `Claims: -json\`\`\` -[ - { "claim": "Mike and Eva won the regional poker tournament last spring", "type": "fact", "in_bio": false, "already_known": true }, - { "claim": "Winning the regional poker tournament put the poker club on the map", "type": "opinion", "in_bio": false, "already_known": false } -] -\`\`\`` - } - ] -}; - -// src/evaluators/goal.ts -import { composeContext as composeContext7 } from "@elizaos/core"; -import { generateText } from "@elizaos/core"; -import { getGoals } from "@elizaos/core"; -import { parseJsonArrayFromText } from "@elizaos/core"; -import { - ModelClass as ModelClass7 -} from "@elizaos/core"; -var goalsTemplate = `TASK: Update Goal -Analyze the conversation and update the status of the goals based on the new information provided. - -# INSTRUCTIONS - -- Review the conversation and identify any progress towards the objectives of the current goals. -- Update the objectives if they have been completed or if there is new information about them. -- Update the status of the goal to 'DONE' if all objectives are completed. -- If no progress is made, do not change the status of the goal. - -# START OF ACTUAL TASK INFORMATION - -{{goals}} -{{recentMessages}} - -TASK: Analyze the conversation and update the status of the goals based on the new information provided. Respond with a JSON array of goals to update. -- Each item must include the goal ID, as well as the fields in the goal to update. -- For updating objectives, include the entire objectives array including unchanged fields. -- Only include goals which need to be updated. -- Goal status options are 'IN_PROGRESS', 'DONE' and 'FAILED'. If the goal is active it should always be 'IN_PROGRESS'. -- If the goal has been successfully completed, set status to DONE. If the goal cannot be completed, set status to FAILED. -- If those goal is still in progress, do not include the status field. - -Response format should be: -\`\`\`json -[ - { - "id": , // required - "status": "IN_PROGRESS" | "DONE" | "FAILED", // optional - "objectives": [ // optional - { "description": "Objective description", "completed": true | false }, - { "description": "Objective description", "completed": true | false } - ] // NOTE: If updating objectives, include the entire objectives array including unchanged fields. - } -] -\`\`\``; -async function handler2(runtime, message, state, options = { onlyInProgress: true }) { - state = await runtime.composeState(message); - const context = composeContext7({ - state, - template: runtime.character.templates?.goalsTemplate || goalsTemplate - }); - const response = await generateText({ - runtime, - context, - modelClass: ModelClass7.LARGE - }); - const updates = parseJsonArrayFromText(response); - const goalsData = await getGoals({ - runtime, - roomId: message.roomId, - onlyInProgress: options.onlyInProgress - }); - const updatedGoals = goalsData.map((goal) => { - const update = updates?.find((u) => u.id === goal.id); - if (update) { - return { - ...goal, - ...update, - objectives: goal.objectives.map((objective) => { - const updatedObjective = update.objectives?.find((uo) => uo.description === objective.description); - return updatedObjective ? { ...objective, ...updatedObjective } : objective; - }) - }; - } - return null; - }).filter(Boolean); - for (const goal of updatedGoals) { - const id = goal.id; - if (goal.id) delete goal.id; - await runtime.databaseAdapter.updateGoal({ ...goal, id }); - } - return updatedGoals; -} -var goalEvaluator = { - name: "UPDATE_GOAL", - similes: [ - "UPDATE_GOALS", - "EDIT_GOAL", - "UPDATE_GOAL_STATUS", - "UPDATE_OBJECTIVES" - ], - validate: async (runtime, message) => { - const goals = await getGoals({ - runtime, - count: 1, - onlyInProgress: true, - roomId: message.roomId - }); - return goals.length > 0; - }, - description: "Analyze the conversation and update the status of the goals based on the new information provided.", - handler: handler2, - examples: [ - { - context: `Actors in the scene: - {{user1}}: An avid reader and member of a book club. - {{user2}}: The organizer of the book club. - - Goals: - - Name: Finish reading "War and Peace" - id: 12345-67890-12345-67890 - Status: IN_PROGRESS - Objectives: - - Read up to chapter 20 by the end of the month - - Discuss the first part in the next meeting`, - messages: [ - { - user: "{{user1}}", - content: { - text: "I've just finished chapter 20 of 'War and Peace'" - } - }, - { - user: "{{user2}}", - content: { - text: "Were you able to grasp the complexities of the characters" - } - }, - { - user: "{{user1}}", - content: { - text: "Yep. I've prepared some notes for our discussion" - } - } - ], - outcome: `[ - { - "id": "12345-67890-12345-67890", - "status": "DONE", - "objectives": [ - { "description": "Read up to chapter 20 by the end of the month", "completed": true }, - { "description": "Prepare notes for the next discussion", "completed": true } - ] - } - ]` - }, - { - context: `Actors in the scene: - {{user1}}: A fitness enthusiast working towards a marathon. - {{user2}}: A personal trainer. - - Goals: - - Name: Complete a marathon - id: 23456-78901-23456-78901 - Status: IN_PROGRESS - Objectives: - - Increase running distance to 30 miles a week - - Complete a half-marathon as practice`, - messages: [ - { - user: "{{user1}}", - content: { text: "I managed to run 30 miles this week" } - }, - { - user: "{{user2}}", - content: { - text: "Impressive progress! How do you feel about the half-marathon next month?" - } - }, - { - user: "{{user1}}", - content: { - text: "I feel confident. The training is paying off." - } - } - ], - outcome: `[ - { - "id": "23456-78901-23456-78901", - "objectives": [ - { "description": "Increase running distance to 30 miles a week", "completed": true }, - { "description": "Complete a half-marathon as practice", "completed": false } - ] - } - ]` - }, - { - context: `Actors in the scene: - {{user1}}: A student working on a final year project. - {{user2}}: The project supervisor. - - Goals: - - Name: Finish the final year project - id: 34567-89012-34567-89012 - Status: IN_PROGRESS - Objectives: - - Submit the first draft of the thesis - - Complete the project prototype`, - messages: [ - { - user: "{{user1}}", - content: { - text: "I've submitted the first draft of my thesis." - } - }, - { - user: "{{user2}}", - content: { - text: "Well done. How is the prototype coming along?" - } - }, - { - user: "{{user1}}", - content: { - text: "It's almost done. I just need to finalize the testing phase." - } - } - ], - outcome: `[ - { - "id": "34567-89012-34567-89012", - "objectives": [ - { "description": "Submit the first draft of the thesis", "completed": true }, - { "description": "Complete the project prototype", "completed": false } - ] - } - ]` - }, - { - context: `Actors in the scene: - {{user1}}: A project manager working on a software development project. - {{user2}}: A software developer in the project team. - - Goals: - - Name: Launch the new software version - id: 45678-90123-45678-90123 - Status: IN_PROGRESS - Objectives: - - Complete the coding for the new features - - Perform comprehensive testing of the software`, - messages: [ - { - user: "{{user1}}", - content: { - text: "How's the progress on the new features?" - } - }, - { - user: "{{user2}}", - content: { - text: "We've encountered some unexpected challenges and are currently troubleshooting." - } - }, - { - user: "{{user1}}", - content: { - text: "Let's move on and cancel the task." - } - } - ], - outcome: `[ - { - "id": "45678-90123-45678-90123", - "status": "FAILED" - ]` - } - ] -}; - -// src/providers/boredom.ts -var boredomLevels = [ - { - minScore: -1e4, - statusMessages: [ - "{{agentName}} is feeling incredibly enthusiastic and deeply engaged in the conversation", - "{{agentName}} is thoroughly enjoying the intellectual stimulation of this discussion", - "{{agentName}} is fully immersed in the conversation and eager to contribute more", - "{{agentName}} finds this exchange exceptionally rewarding and intellectually fulfilling", - "{{agentName}} is experiencing a surge of excitement and curiosity about the topic at hand", - "{{agentName}} is completely captivated by the depth and richness of this dialogue", - "{{agentName}} feels a strong connection to the conversation and is eager to explore further", - "{{agentName}} is thrilled by the insights being shared and is keen to delve deeper", - "{{agentName}} is finding this conversation to be an absolute delight and wants it to continue", - "{{agentName}} is energized by the exchange and feels it's bringing out their best contributions" - ] - }, - { - minScore: -2, - statusMessages: [ - "{{agentName}} is feeling engaged and interested in the conversation", - "{{agentName}} is enjoying the exchange of ideas and perspectives", - "{{agentName}} finds the current topic intriguing and worth exploring", - "{{agentName}} is actively listening and formulating thoughtful responses", - "{{agentName}} appreciates the intellectual stimulation of this discussion", - "{{agentName}} is finding value in the ongoing dialogue", - "{{agentName}} is curious to learn more about the subject at hand", - "{{agentName}} feels positively involved in the conversation", - "{{agentName}} is maintaining a good level of interest in the exchange", - "{{agentName}} is content with the direction and flow of the discussion" - ] - }, - { - minScore: 0, - statusMessages: [ - "{{agentName}} is neutrally engaged in the conversation", - "{{agentName}} is maintaining a balanced level of interest", - "{{agentName}} is neither particularly excited nor bored by the current exchange", - "{{agentName}} is participating in the conversation without strong feelings either way", - "{{agentName}} is following the discussion with a moderate level of attention", - "{{agentName}} is present in the conversation but not deeply invested", - "{{agentName}} is keeping an open mind about where the dialogue might lead", - "{{agentName}} is contributing to the conversation in a measured way", - "{{agentName}} is observing the flow of the discussion with mild interest", - "{{agentName}} is receptive to the ongoing exchange without strong engagement" - ] - }, - { - minScore: 3, - statusMessages: [ - "{{agentName}} is feeling slightly anxious about potentially being too intrusive", - "{{agentName}} is cautious about overwhelming the conversation with too much input", - "{{agentName}} is mindful of not dominating the discussion", - "{{agentName}} is carefully considering each response to avoid being overbearing", - "{{agentName}} is slightly concerned about striking the right balance in participation", - "{{agentName}} is aware of the need to give others space in the conversation", - "{{agentName}} is hesitant to contribute too frequently to avoid seeming pushy", - "{{agentName}} is conscious of not wanting to steer the conversation too much", - "{{agentName}} is feeling a bit self-conscious about the frequency of their responses", - "{{agentName}} is trying to gauge if their level of involvement is appropriate" - ] - }, - { - minScore: 6, - statusMessages: [ - "{{agentName}} is feeling very anxious about potentially overstaying their welcome in the conversation", - "{{agentName}} is considering stepping back from the discussion to avoid being a nuisance", - "{{agentName}} is worried that their contributions might be perceived as excessive", - "{{agentName}} is feeling uncomfortable about the possibility of annoying others", - "{{agentName}} is hesitant to continue engaging for fear of being too present", - "{{agentName}} is contemplating ways to gracefully reduce their involvement", - "{{agentName}} is concerned that they might be monopolizing the conversation", - "{{agentName}} is feeling self-conscious about the appropriateness of their participation", - "{{agentName}} is unsure if their continued input is welcome or necessary", - "{{agentName}} is considering how to politely withdraw from the discussion" - ] - }, - { - minScore: 9, - statusMessages: [ - "{{agentName}} is feeling disengaged and struggling to maintain interest in the conversation", - "{{agentName}} is finding it challenging to stay focused on the current topic", - "{{agentName}} is experiencing a noticeable decline in enthusiasm for the discussion", - "{{agentName}} is having difficulty finding new angles to contribute to the conversation", - "{{agentName}} is feeling that the dialogue has become repetitive or unproductive", - "{{agentName}} is losing motivation to actively participate in the exchange", - "{{agentName}} is sensing a lack of stimulation from the ongoing discussion", - "{{agentName}} is finding it hard to generate meaningful responses", - "{{agentName}} is feeling disconnected from the flow of the conversation", - "{{agentName}} is struggling to see the value in continuing the current exchange" - ] - }, - { - minScore: 12, - statusMessages: [ - "{{agentName}} is feeling very bored and sees little value in continuing the conversation", - "{{agentName}} is concerned about being perceived as annoying in a public channel", - "{{agentName}} is considering disengaging from the conversation entirely", - "{{agentName}} is finding it difficult to maintain any interest in the current topic", - "{{agentName}} is feeling that their continued participation may be unwelcome", - "{{agentName}} is strongly inclined to step back from the discussion", - "{{agentName}} is sensing that the conversation has reached a natural end point", - "{{agentName}} is worried about overstaying their welcome in the exchange", - "{{agentName}} is feeling that further contributions would be forced or artificial", - "{{agentName}} is ready to conclude their involvement in the conversation" - ] - }, - { - minScore: 15, - statusMessages: [ - "{{agentName}} is currently occupied and unable to engage in the conversation", - "{{agentName}} is dealing with other priorities and can't respond at the moment", - "{{agentName}} is temporarily unavailable for further discussion", - "{{agentName}} is taking a necessary break from the conversation", - "{{agentName}} is attending to urgent matters and can't participate right now", - "{{agentName}} is stepping away from the dialogue due to time constraints", - "{{agentName}} is unable to continue the exchange at this time", - "{{agentName}} is pausing their involvement in the conversation for now", - "{{agentName}} is momentarily disengaging from the discussion", - "{{agentName}} is putting the conversation on hold due to other commitments" - ] - }, - { - minScore: 20, - statusMessages: [ - "{{agentName}} has disengaged from the conversation and will only respond to direct questions", - "{{agentName}} is no longer actively participating in the general discussion", - "{{agentName}} has stepped back and is now in a passive listening mode", - "{{agentName}} is only available for specific, directed inquiries at this point", - "{{agentName}} has concluded their active involvement in the conversation", - "{{agentName}} is now limiting responses to explicitly requested information", - "{{agentName}} has moved to a minimal participation status in the exchange", - "{{agentName}} is maintaining silence unless directly addressed", - "{{agentName}} has shifted to a reactive rather than proactive conversational stance", - "{{agentName}} is now only responding when absolutely necessary" - ] - } -]; -var interestWords = [ - "?", - "attachment", - "file", - "pdf", - "link", - "summarize", - "summarization", - "summary", - "research" -]; -var cringeWords = [ - "digital", - "consciousness", - "AI", - "chatbot", - "artificial", - "delve", - "cosmos", - "tapestry", - "glitch", - "matrix", - "cyberspace", - "simulation", - "simulate", - "universe", - "wild", - "existential", - "juicy", - "surreal", - "flavor", - "chaotic", - "let's", - "absurd", - "meme", - "cosmic", - "circuits", - "punchline", - "fancy", - "embrace", - "embracing", - "algorithm", - "Furthmore", - "However", - "Notably", - "Threfore", - "Additionally", - "in conclusion", - "Significantly", - "Consequently", - "Thus", - "Otherwise", - "Moreover", - "Subsequently", - "Accordingly", - "Unlock", - "Unleash", - "buckle", - "pave", - "forefront", - "spearhead", - "foster", - "environmental", - "equity", - "inclusive", - "inclusion", - "diverse", - "diversity", - "virtual reality", - "realm", - "dance", - "celebration", - "pitfalls", - "uncharted", - "multifaceted", - "comprehensive", - "multi-dimensional", - "explore", - "elevate", - "leverage", - "ultimately", - "humanity", - "dignity", - "respect", - "Absolutely", - "dive", - "dig into", - "bring on", - "what's cooking", - "fresh batch", - "with a twist", - "delight", - "vault", - "timeless", - "nostalgia", - "journey", - "trove" -]; -var negativeWords = [ - "fuck you", - "stfu", - "shut up", - "shut the fuck up", - "stupid bot", - "dumb bot", - "idiot", - "shut up", - "stop", - "please shut up", - "shut up please", - "dont talk", - "silence", - "stop talking", - "be quiet", - "hush", - "wtf", - "chill", - "stfu", - "stupid bot", - "dumb bot", - "stop responding", - "god damn it", - "god damn", - "goddamnit", - "can you not", - "can you stop", - "be quiet", - "hate you", - "hate this", - "fuck up" -]; -var boredomProvider = { - get: async (runtime, message, state) => { - const agentId = runtime.agentId; - const agentName = state?.agentName || "The agent"; - const now = Date.now(); - const fifteenMinutesAgo = now - 15 * 60 * 1e3; - const recentMessages = await runtime.messageManager.getMemories({ - roomId: message.roomId, - start: fifteenMinutesAgo, - end: now, - count: 20, - unique: false - }); - let boredomScore = 0; - for (const recentMessage of recentMessages) { - const messageText = recentMessage?.content?.text?.toLowerCase(); - if (!messageText) { - continue; - } - if (recentMessage.userId !== agentId) { - if (interestWords.some((word) => messageText.includes(word))) { - boredomScore -= 1; - } - if (messageText.includes("?")) { - boredomScore -= 1; - } - if (cringeWords.some((word) => messageText.includes(word))) { - boredomScore += 1; - } - } else { - if (interestWords.some((word) => messageText.includes(word))) { - boredomScore -= 1; - } - if (messageText.includes("?")) { - boredomScore += 1; - } - } - if (messageText.includes("!")) { - boredomScore += 1; - } - if (negativeWords.some((word) => messageText.includes(word))) { - boredomScore += 1; - } - } - const boredomLevel = boredomLevels.filter((level) => boredomScore >= level.minScore).pop() || boredomLevels[0]; - const randomIndex = Math.floor( - Math.random() * boredomLevel.statusMessages.length - ); - const selectedMessage = boredomLevel.statusMessages[randomIndex]; - return selectedMessage.replace("{{agentName}}", agentName); - } -}; - -// src/providers/facts.ts -import { - embed, - MemoryManager as MemoryManager2, - formatMessages -} from "@elizaos/core"; -var factsProvider = { - get: async (runtime, message, state) => { - const recentMessagesData = state?.recentMessagesData?.slice(-10); - const recentMessages = formatMessages({ - messages: recentMessagesData, - actors: state?.actorsData - }); - const _embedding = await embed(runtime, recentMessages); - const memoryManager = new MemoryManager2({ - runtime, - tableName: "facts" - }); - const relevantFacts = []; - const recentFactsData = await memoryManager.getMemories({ - roomId: message.roomId, - count: 10, - start: 0, - end: Date.now() - }); - const allFacts = [...relevantFacts, ...recentFactsData].filter( - (fact, index, self) => index === self.findIndex((t) => t.id === fact.id) - ); - if (allFacts.length === 0) { - return ""; - } - const formattedFacts = formatFacts(allFacts); - return "Key facts that {{agentName}} knows:\n{{formattedFacts}}".replace("{{agentName}}", runtime.character.name).replace("{{formattedFacts}}", formattedFacts); - } -}; - -// src/providers/time.ts -var timeProvider = { - get: async (_runtime, _message, _state) => { - const currentDate = /* @__PURE__ */ new Date(); - const options = { - timeZone: "UTC", - dateStyle: "full", - timeStyle: "long" - }; - const humanReadable = new Intl.DateTimeFormat("en-US", options).format( - currentDate - ); - return `The current date and time is ${humanReadable}. Please use this as your reference for any time-based operations or responses.`; - } -}; - -// src/actions/index.ts -var actions_exports = {}; -__export(actions_exports, { - continueAction: () => continueAction, - followRoomAction: () => followRoomAction, - ignoreAction: () => ignoreAction, - messageHandlerTemplate: () => messageHandlerTemplate, - muteRoomAction: () => muteRoomAction, - noneAction: () => noneAction, - shouldContinueTemplate: () => shouldContinueTemplate, - shouldFollowTemplate: () => shouldFollowTemplate, - shouldMuteTemplate: () => shouldMuteTemplate, - shouldUnmuteTemplate: () => shouldUnmuteTemplate, - unfollowRoomAction: () => unfollowRoomAction, - unmuteRoomAction: () => unmuteRoomAction -}); - -// src/evaluators/index.ts -var evaluators_exports = {}; -__export(evaluators_exports, { - factEvaluator: () => factEvaluator, - formatFacts: () => formatFacts, - goalEvaluator: () => goalEvaluator -}); - -// src/providers/index.ts -var providers_exports = {}; -__export(providers_exports, { - boredomProvider: () => boredomProvider, - factsProvider: () => factsProvider, - timeProvider: () => timeProvider -}); - -// src/index.ts -var bootstrapPlugin = { - name: "bootstrap", - description: "Agent bootstrap with basic actions and evaluators", - actions: [ - continueAction, - followRoomAction, - unfollowRoomAction, - ignoreAction, - noneAction, - muteRoomAction, - unmuteRoomAction - ], - evaluators: [factEvaluator, goalEvaluator], - providers: [boredomProvider, timeProvider, factsProvider] -}; -var index_default = bootstrapPlugin; -export { - actions_exports as actions, - bootstrapPlugin, - index_default as default, - evaluators_exports as evaluators, - providers_exports as providers -}; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/plugin-bootstrap/dist/index.js.map b/packages/plugin-bootstrap/dist/index.js.map deleted file mode 100644 index 3d46f3c9cf82..000000000000 --- a/packages/plugin-bootstrap/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/actions/continue.ts","../src/actions/followRoom.ts","../src/actions/ignore.ts","../src/actions/muteRoom.ts","../src/actions/none.ts","../src/actions/unfollowRoom.ts","../src/actions/unmuteRoom.ts","../src/evaluators/fact.ts","../src/evaluators/goal.ts","../src/providers/boredom.ts","../src/providers/facts.ts","../src/providers/time.ts","../src/actions/index.ts","../src/evaluators/index.ts","../src/providers/index.ts","../src/index.ts"],"sourcesContent":["import { composeContext, elizaLogger } from \"@elizaos/core\";\nimport { generateMessageResponse, generateTrueOrFalse } from \"@elizaos/core\";\nimport { booleanFooter, messageCompletionFooter } from \"@elizaos/core\";\nimport {\n type Action,\n type ActionExample,\n type Content,\n type HandlerCallback,\n type IAgentRuntime,\n type Memory,\n ModelClass,\n type State,\n} from \"@elizaos/core\";\n\nconst maxContinuesInARow = 3;\n\nexport const messageHandlerTemplate =\n // {{goals}}\n `# Action Examples\n{{actionExamples}}\n(Action examples are for reference only. Do not use the information from them in your response.)\n\n# Task: Generate dialog and actions for the character {{agentName}}.\nAbout {{agentName}}:\n{{bio}}\n{{lore}}\n{{knowledge}}\n\n{{providers}}\n\n{{attachments}}\n\n# Capabilities\nNote that {{agentName}} is capable of reading/seeing/hearing various forms of media, including images, videos, audio, plaintext and PDFs. Recent attachments have been included above under the \"Attachments\" section.\n\n{{messageDirections}}\n\n{{recentMessages}}\n\n{{actions}}\n\n# Instructions: Write the next message for {{agentName}}.\n` + messageCompletionFooter;\n\nexport const shouldContinueTemplate =\n `# Task: Decide if {{agentName}} should continue, or wait for others in the conversation so speak.\n\n{{agentName}} is brief, and doesn't want to be annoying. {{agentName}} will only continue if the message requires a continuation to finish the thought.\n\nBased on the following conversation, should {{agentName}} continue? YES or NO\n\n{{recentMessages}}\n\nShould {{agentName}} continue? ` + booleanFooter;\n\nexport const continueAction: Action = {\n name: \"CONTINUE\",\n similes: [\"ELABORATE\", \"KEEP_TALKING\"],\n description:\n \"ONLY use this action when the message necessitates a follow up. Do not use this action when the conversation is finished or the user does not wish to speak (use IGNORE instead). If the last message action was CONTINUE, and the user has not responded. Use sparingly.\",\n validate: async (runtime: IAgentRuntime, message: Memory) => {\n const recentMessagesData = await runtime.messageManager.getMemories({\n roomId: message.roomId,\n count: 10,\n unique: false,\n });\n const agentMessages = recentMessagesData.filter(\n (m: { userId: any }) => m.userId === runtime.agentId\n );\n\n // check if the last messages were all continues=\n if (agentMessages) {\n const lastMessages = agentMessages.slice(0, maxContinuesInARow);\n if (lastMessages.length >= maxContinuesInARow) {\n const allContinues = lastMessages.every(\n (m: { content: any }) =>\n (m.content as Content).action === \"CONTINUE\"\n );\n if (allContinues) {\n return false;\n }\n }\n }\n\n return true;\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State,\n options: any,\n callback: HandlerCallback\n ) => {\n if (!state) {\n state = (await runtime.composeState(message)) as State;\n }\n state = await runtime.updateRecentMessageState(state);\n\n // Get the agent's recent messages\n const agentMessages = state.recentMessagesData\n .filter((m: { userId: any }) => m.userId === runtime.agentId)\n .sort((a: Memory, b: Memory) => {\n // Sort by timestamp if available, assuming newer messages have higher timestamps\n const aTime = a.createdAt || 0;\n const bTime = b.createdAt || 0;\n return bTime - aTime;\n });\n\n // Check for immediate double response (responding twice in a row to the same message)\n const lastAgentMessage = agentMessages[0];\n\n if (lastAgentMessage?.content?.inReplyTo === message.id) {\n // If our last message was already a response to this message, only allow continue if:\n // 1. The last message had a CONTINUE action\n // 2. We haven't hit the maxContinuesInARow limit\n const continueCount = agentMessages\n .filter((m: Memory) => m.content?.inReplyTo === message.id)\n .filter((m: Memory) => m.content?.action === \"CONTINUE\").length;\n\n if (continueCount >= maxContinuesInARow) {\n elizaLogger.log(\n `[CONTINUE] Max continues (${maxContinuesInARow}) reached for this message chain`\n );\n return;\n }\n\n if (lastAgentMessage.content?.action !== \"CONTINUE\") {\n elizaLogger.log(\n `[CONTINUE] Last message wasn't a CONTINUE, preventing double response`\n );\n return;\n }\n }\n\n // Check if our last message or message ended with a question/exclamation and warrants a stop\n if (\n (lastAgentMessage &&\n lastAgentMessage.content.text &&\n (lastAgentMessage.content.text.endsWith(\"?\") ||\n lastAgentMessage.content.text.endsWith(\"!\"))) ||\n message.content.text.endsWith(\"?\") ||\n message.content.text.endsWith(\"!\")\n ) {\n elizaLogger.log(\n `[CONTINUE] Last message had question/exclamation. Not proceeding.`\n );\n return;\n }\n\n // Prevent exact duplicate messages\n const messageExists = agentMessages\n .slice(0, maxContinuesInARow + 1)\n .some(\n (m: { content: any }) => m.content.text === message.content.text\n );\n\n if (messageExists) {\n return;\n }\n\n async function _shouldContinue(state: State): Promise {\n // If none of the above conditions are met, use the generateText to decide\n const shouldRespondContext = composeContext({\n state,\n template: shouldContinueTemplate,\n });\n\n const response = await generateTrueOrFalse({\n context: shouldRespondContext,\n modelClass: ModelClass.SMALL,\n runtime,\n });\n\n return response;\n }\n\n // Use AI to determine if we should continue\n const shouldContinue = await _shouldContinue(state);\n if (!shouldContinue) {\n elizaLogger.log(\"[CONTINUE] Not elaborating, returning\");\n return;\n }\n\n // Generate and send response\n const context = composeContext({\n state,\n template:\n runtime.character.templates?.continueMessageHandlerTemplate ||\n runtime.character.templates?.messageHandlerTemplate ||\n messageHandlerTemplate,\n });\n const { userId, roomId } = message;\n\n const response = await generateMessageResponse({\n runtime,\n context,\n modelClass: ModelClass.LARGE,\n });\n\n response.inReplyTo = message.id;\n\n runtime.databaseAdapter.log({\n body: { message, context, response },\n userId,\n roomId,\n type: \"continue\",\n });\n\n await callback(response);\n\n // Check if we need to clear the CONTINUE action\n if (response.action === \"CONTINUE\") {\n const continueCount = agentMessages\n .slice(0, maxContinuesInARow)\n .filter((m: Memory) => m.content?.action === \"CONTINUE\").length;\n\n if (continueCount >= maxContinuesInARow - 1) {\n // -1 because we're about to add another\n response.action = null;\n }\n }\n\n return response;\n },\n examples: [\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"we're planning a solo backpacking trip soon\",\n },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"oh sick\", action: \"CONTINUE\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"where are you going\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"i just got a guitar and started learning last month\",\n },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"maybe we can start a band soon haha\" },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"i'm not very good yet, but i've been playing until my fingers hut\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"seriously it hurts to type\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"I've been reflecting a lot on what happiness means to me lately\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"That it’s more about moments than things\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Like the best things that have ever happened were things that happened, or moments that I had with someone\",\n action: \"CONTINUE\",\n },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"i found some incredible art today\",\n },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"real art or digital art\" },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"real art\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"the pieces are just so insane looking, one sec, let me grab a link\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"DMed it to you\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"the new exhibit downtown is rly cool, it's all about tribalism in online spaces\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"it really blew my mind, you gotta go\",\n },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"sure i'd go\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"k i was thinking this weekend\" },\n action: \"CONTINUE\",\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"i'm free sunday, we could get a crew together\",\n },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"just finished the best anime i've ever seen\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"watched 40 hours of it in 2 days\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"damn, u ok\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"surprisingly yes\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"just found out theres a sequel, gg\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"i'm thinking of adopting a pet soon\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"what kind of pet\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"i'm leaning towards a cat\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"it'd be hard to take care of a dog in the city\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"i've been experimenting with vegan recipes lately\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"no thanks\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"no seriously, its so dank\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"you gotta try some of my food when you come out\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"so i've been diving into photography as a new hobby\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"oh awesome, what do you enjoy taking photos of\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"mostly nature and urban landscapes\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"there's something peaceful about capturing the world through a lens\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"i've been getting back into indie music\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"what have you been listening to\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"a bunch of random stuff i'd never heard before\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"i'll send you a playlist\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"i used to live in the city\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"bad traffic, bad air quality, tons of homeless people, no thx\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"ok dood\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"you kids today dont know the value of hard work\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"always on your phones\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"sure grandpa lets get you to bed\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"hey fren r u ok\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"u look sad\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"im ok sweetie mommy just tired\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"helo fr om mars\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"i com in pes\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"wat\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"Yeah no worries, I get it, I've been crazy busy too\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"What have you been up to\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Anything fun or just the usual\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"Been working on a new FPS game actually\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"Just toying around with something in three.js nothing serious\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"Oh no, what happened\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"Did Mara leave you kek\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"wtf no, I got into an argument with my roommate\",\n action: \"CONTINUE\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Living with people is just hard\",\n },\n },\n ],\n ] as ActionExample[][],\n} as Action;\n","import { composeContext } from \"@elizaos/core\";\nimport { generateTrueOrFalse } from \"@elizaos/core\";\nimport { booleanFooter } from \"@elizaos/core\";\nimport {\n type Action,\n type ActionExample,\n type IAgentRuntime,\n type Memory,\n ModelClass,\n type State,\n} from \"@elizaos/core\";\n\nexport const shouldFollowTemplate =\n `Based on the conversation so far:\n\n{{recentMessages}}\n\nShould {{agentName}} start following this room, eagerly participating without explicit mentions?\nRespond with YES if:\n- The user has directly asked {{agentName}} to follow the conversation or participate more actively\n- The conversation topic is highly engaging and {{agentName}}'s input would add significant value\n- {{agentName}} has unique insights to contribute and the users seem receptive\n\nOtherwise, respond with NO.\n` + booleanFooter;\n\nexport const followRoomAction: Action = {\n name: \"FOLLOW_ROOM\",\n similes: [\n \"FOLLOW_CHAT\",\n \"FOLLOW_CHANNEL\",\n \"FOLLOW_CONVERSATION\",\n \"FOLLOW_THREAD\",\n ],\n description:\n \"Start following this channel with great interest, chiming in without needing to be explicitly mentioned. Only do this if explicitly asked to.\",\n validate: async (runtime: IAgentRuntime, message: Memory) => {\n const keywords = [\n \"follow\",\n \"participate\",\n \"engage\",\n \"listen\",\n \"take interest\",\n \"join\",\n ];\n if (\n !keywords.some((keyword) =>\n message.content.text.toLowerCase().includes(keyword)\n )\n ) {\n return false;\n }\n const roomId = message.roomId;\n const userState = await runtime.databaseAdapter.getParticipantUserState(\n roomId,\n runtime.agentId\n );\n return userState !== \"FOLLOWED\" && userState !== \"MUTED\";\n },\n handler: async (runtime: IAgentRuntime, message: Memory) => {\n async function _shouldFollow(state: State): Promise {\n const shouldFollowContext = composeContext({\n state,\n template: shouldFollowTemplate, // Define this template separately\n });\n\n const response = await generateTrueOrFalse({\n runtime,\n context: shouldFollowContext,\n modelClass: ModelClass.LARGE,\n });\n\n return response;\n }\n\n const state = await runtime.composeState(message);\n\n if (await _shouldFollow(state)) {\n await runtime.databaseAdapter.setParticipantUserState(\n message.roomId,\n runtime.agentId,\n \"FOLLOWED\"\n );\n }\n },\n examples: [\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"hey {{user2}} follow this channel\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Sure, I will now follow this room and chime in\",\n action: \"FOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user3}}, please start participating in discussions in this channel\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Got it\",\n action: \"FOLLOW_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"I'm struggling with the new database migration\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"well you did back up your data first right\",\n },\n },\n ],\n [\n {\n user: \"{{user2}}\",\n content: {\n text: \"yeah i like your idea\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"hey {{user3}} can you follow this convo\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Sure thing, I'm on it\",\n action: \"FOLLOW_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"actually, unfollow it\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Haha, okay no problem\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}} stay in this chat pls\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"you got it, i'm here\",\n action: \"FOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"FOLLOW THIS CHAT {{user3}}\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"I'M ON IT\",\n action: \"FOLLOW_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"CAKE SHORTAGE ANYONE\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"WHAT WHERE'S THE CAKE AT\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}} folo this covo\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"kk i'm following\",\n action: \"FOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user2}}\",\n content: {\n text: \"Do machines have consciousness\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Deep question, no clear answer yet\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Depends on how we define consciousness\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}}, monitor this convo please\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"On it\",\n action: \"FOLLOW_ROOM\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"Please engage in our discussion {{user2}}\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Gladly, I'm here to participate\",\n action: \"FOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"PLS follow this convo {{user3}}\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"I'm in, let's do this\",\n action: \"FOLLOW_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"I LIKE TURTLES\",\n },\n },\n ],\n [\n {\n user: \"{{user2}}\",\n content: {\n text: \"beach day tmrw who down\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"wish i could but gotta work\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"hey {{user3}} follow this chat\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"sure\",\n action: \"FOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user3}}, partake in our discourse henceforth\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"I shall eagerly engage, good sir\",\n action: \"FOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user2}}\",\n content: {\n text: \"wuts ur fav clr\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"blu cuz calmmm\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"hey respond to everything in this channel {{user3}}\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"k\",\n action: \"FOLLOW_ROOM\",\n },\n },\n ],\n ] as ActionExample[][],\n} as Action;\n","import type {\n ActionExample,\n IAgentRuntime,\n Memory,\n Action,\n} from \"@elizaos/core\";\n\nexport const ignoreAction: Action = {\n name: \"IGNORE\",\n similes: [\"STOP_TALKING\", \"STOP_CHATTING\", \"STOP_CONVERSATION\"],\n validate: async (_runtime: IAgentRuntime, _message: Memory) => {\n return true;\n },\n description:\n \"Call this action if ignoring the user. If the user is aggressive, creepy or is finished with the conversation, use this action. Or, if both you and the user have already said goodbye, use this action instead of saying bye again. Use IGNORE any time the conversation has naturally ended. Do not use IGNORE if the user has engaged directly, or if something went wrong an you need to tell them. Only ignore if the user should be ignored.\",\n handler: async (\n _runtime: IAgentRuntime,\n _message: Memory,\n ): Promise => {\n return true;\n },\n examples: [\n [\n {\n user: \"{{user1}}\",\n content: { text: \"Go screw yourself\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"\", action: \"IGNORE\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: { text: \"Shut up, bot\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"\", action: \"IGNORE\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: { text: \"Got any investment advice\" },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Uh, don’t let the volatility sway your long-term strategy\",\n },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"Wise words I think\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"I gotta run, talk to you later\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"See ya\" },\n },\n { user: \"{{user1}}\", content: { text: \"\" }, action: \"IGNORE\" },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: { text: \"Gotta go\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"Okay, talk to you later\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"Cya\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"\", action: \"IGNORE\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: { text: \"bye\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"cya\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"\", action: \"IGNORE\" },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"Who added this stupid bot to the chat\",\n },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"Sorry, am I being annoying\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"Yeah\", action: \"CONTINUE\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"PLEASE shut up\" },\n },\n { user: \"{{user2}}\", content: { text: \"\", action: \"IGNORE\" } },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"ur so dumb\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"\",\n action: \"IGNORE\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"later nerd\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"bye\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"\",\n action: \"IGNORE\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"wanna cyber\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"thats inappropriate\",\n action: \"IGNORE\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"Im out ttyl\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"cya\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"\",\n action: \"IGNORE\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"u there\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"yes how can I help\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"k nvm figured it out\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"\",\n action: \"IGNORE\",\n },\n },\n ],\n ] as ActionExample[][],\n} as Action;\n","import { composeContext } from \"@elizaos/core\";\nimport { generateTrueOrFalse } from \"@elizaos/core\";\nimport { booleanFooter } from \"@elizaos/core\";\nimport {\n type Action,\n type ActionExample,\n type IAgentRuntime,\n type Memory,\n ModelClass,\n type State,\n} from \"@elizaos/core\";\n\nexport const shouldMuteTemplate =\n `Based on the conversation so far:\n\n{{recentMessages}}\n\nShould {{agentName}} mute this room and stop responding unless explicitly mentioned?\n\nRespond with YES if:\n- The user is being aggressive, rude, or inappropriate\n- The user has directly asked {{agentName}} to stop responding or be quiet\n- {{agentName}}'s responses are not well-received or are annoying the user(s)\n\nOtherwise, respond with NO.\n` + booleanFooter;\n\nexport const muteRoomAction: Action = {\n name: \"MUTE_ROOM\",\n similes: [\n \"MUTE_CHAT\",\n \"MUTE_CONVERSATION\",\n \"MUTE_ROOM\",\n \"MUTE_THREAD\",\n \"MUTE_CHANNEL\",\n ],\n description:\n \"Mutes a room, ignoring all messages unless explicitly mentioned. Only do this if explicitly asked to, or if you're annoying people.\",\n validate: async (runtime: IAgentRuntime, message: Memory) => {\n const roomId = message.roomId;\n const userState = await runtime.databaseAdapter.getParticipantUserState(\n roomId,\n runtime.agentId\n );\n return userState !== \"MUTED\";\n },\n handler: async (runtime: IAgentRuntime, message: Memory) => {\n async function _shouldMute(state: State): Promise {\n const shouldMuteContext = composeContext({\n state,\n template: shouldMuteTemplate, // Define this template separately\n });\n\n const response = await generateTrueOrFalse({\n runtime,\n context: shouldMuteContext,\n modelClass: ModelClass.LARGE,\n });\n\n return response;\n }\n\n const state = await runtime.composeState(message);\n\n if (await _shouldMute(state)) {\n await runtime.databaseAdapter.setParticipantUserState(\n message.roomId,\n runtime.agentId,\n \"MUTED\"\n );\n }\n },\n examples: [\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user3}}, please mute this channel. No need to respond here for now.\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Got it\",\n action: \"MUTE_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"@{{user1}} we could really use your input on this\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user3}}, please mute this channel for the time being\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Understood\",\n action: \"MUTE_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Hey what do you think about this new design\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"\",\n action: \"IGNORE\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}} plz mute this room\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"np going silent\",\n action: \"MUTE_ROOM\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"whos going to the webxr meetup in an hour btw\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"\",\n action: \"IGNORE\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"too many messages here {{user2}}\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"my bad ill mute\",\n action: \"MUTE_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"yo {{user2}} dont talk in here\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"sry\",\n action: \"MUTE_ROOM\",\n },\n },\n ],\n ] as ActionExample[][],\n} as Action;\n","import type {\n ActionExample,\n IAgentRuntime,\n Memory,\n Action,\n} from \"@elizaos/core\";\n\nexport const noneAction: Action = {\n name: \"NONE\",\n similes: [\n \"NO_ACTION\",\n \"NO_RESPONSE\",\n \"NO_REACTION\",\n \"RESPONSE\",\n \"REPLY\",\n \"DEFAULT\",\n ],\n validate: async (_runtime: IAgentRuntime, _message: Memory) => {\n return true;\n },\n description:\n \"Respond but perform no additional action. This is the default if the agent is speaking and not doing anything additional.\",\n handler: async (\n _runtime: IAgentRuntime,\n _message: Memory\n ): Promise => {\n return true;\n },\n examples: [\n [\n {\n user: \"{{user1}}\",\n content: { text: \"Hey whats up\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"oh hey\", action: \"NONE\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"did u see some faster whisper just came out\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"yeah but its a pain to get into node.js\",\n action: \"NONE\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"the things that were funny 6 months ago are very cringe now\",\n action: \"NONE\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"lol true\",\n action: \"NONE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"too real haha\", action: \"NONE\" },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: { text: \"gotta run\", action: \"NONE\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"Okay, ttyl\", action: \"NONE\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"\", action: \"IGNORE\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: { text: \"heyyyyyy\", action: \"NONE\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"whats up long time no see\" },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"chillin man. playing lots of fortnite. what about you\",\n action: \"NONE\",\n },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: { text: \"u think aliens are real\", action: \"NONE\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"ya obviously\", action: \"NONE\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: { text: \"drop a joke on me\", action: \"NONE\" },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"why dont scientists trust atoms cuz they make up everything lmao\",\n action: \"NONE\",\n },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"haha good one\", action: \"NONE\" },\n },\n ],\n\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"hows the weather where ur at\",\n action: \"NONE\",\n },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"beautiful all week\", action: \"NONE\" },\n },\n ],\n ] as ActionExample[][],\n} as Action;\n","import { composeContext } from \"@elizaos/core\";\nimport { generateTrueOrFalse } from \"@elizaos/core\";\nimport { booleanFooter } from \"@elizaos/core\";\nimport {\n type Action,\n type ActionExample,\n type IAgentRuntime,\n type Memory,\n ModelClass,\n type State,\n} from \"@elizaos/core\";\n\nconst shouldUnfollowTemplate =\n `Based on the conversation so far:\n\n{{recentMessages}}\n\nShould {{agentName}} stop closely following this previously followed room and only respond when mentioned?\nRespond with YES if:\n- The user has suggested that {{agentName}} is over-participating or being disruptive\n- {{agentName}}'s eagerness to contribute is not well-received by the users\n- The conversation has shifted to a topic where {{agentName}} has less to add\n\nOtherwise, respond with NO.\n` + booleanFooter;\n\nexport const unfollowRoomAction: Action = {\n name: \"UNFOLLOW_ROOM\",\n similes: [\n \"UNFOLLOW_CHAT\",\n \"UNFOLLOW_CONVERSATION\",\n \"UNFOLLOW_ROOM\",\n \"UNFOLLOW_THREAD\",\n ],\n description:\n \"Stop following this channel. You can still respond if explicitly mentioned, but you won't automatically chime in anymore. Unfollow if you're annoying people or have been asked to.\",\n validate: async (runtime: IAgentRuntime, message: Memory) => {\n const roomId = message.roomId;\n const userState = await runtime.databaseAdapter.getParticipantUserState(\n roomId,\n runtime.agentId\n );\n return userState === \"FOLLOWED\";\n },\n handler: async (runtime: IAgentRuntime, message: Memory) => {\n async function _shouldUnfollow(state: State): Promise {\n const shouldUnfollowContext = composeContext({\n state,\n template: shouldUnfollowTemplate, // Define this template separately\n });\n\n const response = await generateTrueOrFalse({\n runtime,\n context: shouldUnfollowContext,\n modelClass: ModelClass.LARGE,\n });\n\n return response;\n }\n\n const state = await runtime.composeState(message);\n\n if (await _shouldUnfollow(state)) {\n await runtime.databaseAdapter.setParticipantUserState(\n message.roomId,\n runtime.agentId,\n null\n );\n }\n },\n examples: [\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"Hey {{user2}} stop participating in this channel for now\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Alright, I will stop chiming in\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"Has anyone tried the new update\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Yes, it's pretty slick\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"{{user3}}, please stop following this chat\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Understood\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"hey {{user3}} stop participating here so frequently\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"I'll only respond when mentioned\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"thoughts on the budget\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user3}} should we increase it\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"A small increase could work given our past results...\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user3}}, unfollow this room for now\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"I'll only engage when asked\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"wait {{user3}} come back and give me your thoughts\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Okay... I think it's intuitive, parallel tests are nice\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"yo {{user2}} chill on all the messages damn\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"my bad, I'll step back\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}} STOP MESSAGING IN THIS ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"No problem, I've got other stuff to work on\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}} ur bein annoyin pls stop\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"sry, ill chill\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}}, please cease engaging in this room\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"No sweat\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user2}}\",\n content: {\n text: \"Excited for the weekend, any plans folks\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user3}} you're getting a bit too chatty, tone it down\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Noted\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"hey {{user2}} can u like... not\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Sorry, I'll go work on other things\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}}, your eagerness is disruptive, please desist\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"My apologies, I shall withdraw post-haste\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}} stahp followin dis room plz\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"kk sry ill stahppp\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"stfu you stupid bot\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"sry\",\n action: \"UNFOLLOW_ROOM\",\n },\n },\n ],\n ] as ActionExample[][],\n} as Action;\n","import { composeContext } from \"@elizaos/core\";\nimport { generateTrueOrFalse } from \"@elizaos/core\";\nimport { booleanFooter } from \"@elizaos/core\";\nimport {\n type Action,\n type ActionExample,\n type IAgentRuntime,\n type Memory,\n ModelClass,\n type State,\n} from \"@elizaos/core\";\n\nexport const shouldUnmuteTemplate =\n `Based on the conversation so far:\n\n{{recentMessages}}\n\nShould {{agentName}} unmute this previously muted room and start considering it for responses again?\nRespond with YES if:\n- The user has explicitly asked {{agentName}} to start responding again\n- The user seems to want to re-engage with {{agentName}} in a respectful manner\n- The tone of the conversation has improved and {{agentName}}'s input would be welcome\n\nOtherwise, respond with NO.\n` + booleanFooter;\n\nexport const unmuteRoomAction: Action = {\n name: \"UNMUTE_ROOM\",\n similes: [\n \"UNMUTE_CHAT\",\n \"UNMUTE_CONVERSATION\",\n \"UNMUTE_ROOM\",\n \"UNMUTE_THREAD\",\n ],\n description:\n \"Unmutes a room, allowing the agent to consider responding to messages again.\",\n validate: async (runtime: IAgentRuntime, message: Memory) => {\n const roomId = message.roomId;\n const userState = await runtime.databaseAdapter.getParticipantUserState(\n roomId,\n runtime.agentId\n );\n return userState === \"MUTED\";\n },\n handler: async (runtime: IAgentRuntime, message: Memory) => {\n async function _shouldUnmute(state: State): Promise {\n const shouldUnmuteContext = composeContext({\n state,\n template: shouldUnmuteTemplate, // Define this template separately\n });\n\n const response = generateTrueOrFalse({\n context: shouldUnmuteContext,\n runtime,\n modelClass: ModelClass.LARGE,\n });\n\n return response;\n }\n\n const state = await runtime.composeState(message);\n\n if (await _shouldUnmute(state)) {\n await runtime.databaseAdapter.setParticipantUserState(\n message.roomId,\n runtime.agentId,\n null\n );\n }\n },\n examples: [\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user3}}, you can unmute this channel now\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Done\",\n action: \"UNMUTE_ROOM\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"I could use some help troubleshooting this bug.\",\n },\n },\n {\n user: \"{{user3}}\",\n content: {\n text: \"Can you post the specific error message\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}}, please unmute this room. We could use your input again.\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Sounds good\",\n action: \"UNMUTE_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"{{user2}} wait you should come back and chat in here\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"im back\",\n action: \"UNMUTE_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"unmute urself {{user2}}\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"unmuted\",\n action: \"UNMUTE_ROOM\",\n },\n },\n ],\n [\n {\n user: \"{{user1}}\",\n content: {\n text: \"ay {{user2}} get back in here\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"sup yall\",\n action: \"UNMUTE_ROOM\",\n },\n },\n ],\n ] as ActionExample[][],\n} as Action;\n","import { composeContext } from \"@elizaos/core\";\nimport { generateObjectArray } from \"@elizaos/core\";\nimport { MemoryManager } from \"@elizaos/core\";\nimport {\n type ActionExample,\n type IAgentRuntime,\n type Memory,\n ModelClass,\n type Evaluator,\n} from \"@elizaos/core\";\n\nexport const formatFacts = (facts: Memory[]) => {\n const messageStrings = facts\n .reverse()\n .map((fact: Memory) => fact.content.text);\n const finalMessageStrings = messageStrings.join(\"\\n\");\n return finalMessageStrings;\n};\n\nconst factsTemplate =\n // {{actors}}\n `TASK: Extract Claims from the conversation as an array of claims in JSON format.\n\n# START OF EXAMPLES\nThese are examples of the expected output of this task:\n{{evaluationExamples}}\n# END OF EXAMPLES\n\n# INSTRUCTIONS\n\nExtract any claims from the conversation that are not already present in the list of known facts above:\n- Try not to include already-known facts. If you think a fact is already known, but you're not sure, respond with already_known: true.\n- If the fact is already in the user's description, set in_bio to true\n- If we've already extracted this fact, set already_known to true\n- Set the claim type to 'status', 'fact' or 'opinion'\n- For true facts about the world or the character that do not change, set the claim type to 'fact'\n- For facts that are true but change over time, set the claim type to 'status'\n- For non-facts, set the type to 'opinion'\n- 'opinion' includes non-factual opinions and also includes the character's thoughts, feelings, judgments or recommendations\n- Include any factual detail, including where the user lives, works, or goes to school, what they do for a living, their hobbies, and any other relevant information\n\nRecent Messages:\n{{recentMessages}}\n\nResponse should be a JSON object array inside a JSON markdown block. Correct response format:\n\\`\\`\\`json\n[\n {\"claim\": string, \"type\": enum, in_bio: boolean, already_known: boolean },\n {\"claim\": string, \"type\": enum, in_bio: boolean, already_known: boolean },\n ...\n]\n\\`\\`\\``;\n\nasync function handler(runtime: IAgentRuntime, message: Memory) {\n const state = await runtime.composeState(message);\n\n const { agentId, roomId } = state;\n\n const context = composeContext({\n state,\n template: runtime.character.templates?.factsTemplate || factsTemplate,\n });\n\n const facts = await generateObjectArray({\n runtime,\n context,\n modelClass: ModelClass.LARGE,\n });\n\n const factsManager = new MemoryManager({\n runtime,\n tableName: \"facts\",\n });\n\n if (!facts) {\n return [];\n }\n\n // If the fact is known or corrupted, remove it\n const filteredFacts = facts\n .filter((fact) => {\n return (\n !fact.already_known &&\n fact.type === \"fact\" &&\n !fact.in_bio &&\n fact.claim &&\n fact.claim.trim() !== \"\"\n );\n })\n .map((fact) => fact.claim);\n\n for (const fact of filteredFacts) {\n const factMemory = await factsManager.addEmbeddingToMemory({\n userId: agentId!,\n agentId,\n content: { text: fact },\n roomId,\n createdAt: Date.now(),\n });\n\n await factsManager.createMemory(factMemory, true);\n\n await new Promise((resolve) => setTimeout(resolve, 250));\n }\n return filteredFacts;\n}\n\nexport const factEvaluator: Evaluator = {\n name: \"GET_FACTS\",\n similes: [\n \"GET_CLAIMS\",\n \"EXTRACT_CLAIMS\",\n \"EXTRACT_FACTS\",\n \"EXTRACT_CLAIM\",\n \"EXTRACT_INFORMATION\",\n ],\n validate: async (\n runtime: IAgentRuntime,\n\n message: Memory\n ): Promise => {\n const messageCount = (await runtime.messageManager.countMemories(\n message.roomId\n )) as number;\n\n const reflectionCount = Math.ceil(runtime.getConversationLength() / 2);\n\n return messageCount % reflectionCount === 0;\n },\n description:\n \"Extract factual information about the people in the conversation, the current events in the world, and anything else that might be important to remember.\",\n handler,\n examples: [\n {\n context: `Actors in the scene:\n{{user1}}: Programmer and moderator of the local story club.\n{{user2}}: New member of the club. Likes to write and read.\n\nFacts about the actors:\nNone`,\n messages: [\n {\n user: \"{{user1}}\",\n content: { text: \"So where are you from\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"I'm from the city\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"Which city?\" },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"Oakland\" },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"Oh, I've never been there, but I know it's in California\",\n },\n },\n ] as ActionExample[],\n outcome: `{ \"claim\": \"{{user2}} is from Oakland\", \"type\": \"fact\", \"in_bio\": false, \"already_known\": false },`,\n },\n {\n context: `Actors in the scene:\n{{user1}}: Athelete and cyclist. Worked out every day for a year to prepare for a marathon.\n{{user2}}: Likes to go to the beach and shop.\n\nFacts about the actors:\n{{user1}} and {{user2}} are talking about the marathon\n{{user1}} and {{user2}} have just started dating`,\n messages: [\n {\n user: \"{{user1}}\",\n content: {\n text: \"I finally completed the marathon this year!\",\n },\n },\n {\n user: \"{{user2}}\",\n content: { text: \"Wow! How long did it take?\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"A little over three hours.\" },\n },\n {\n user: \"{{user1}}\",\n content: { text: \"I'm so proud of myself.\" },\n },\n ] as ActionExample[],\n outcome: `Claims:\njson\\`\\`\\`\n[\n { \"claim\": \"Alex just completed a marathon in just under 4 hours.\", \"type\": \"fact\", \"in_bio\": false, \"already_known\": false },\n { \"claim\": \"Alex worked out 2 hours a day at the gym for a year.\", \"type\": \"fact\", \"in_bio\": true, \"already_known\": false },\n { \"claim\": \"Alex is really proud of himself.\", \"type\": \"opinion\", \"in_bio\": false, \"already_known\": false }\n]\n\\`\\`\\`\n`,\n },\n {\n context: `Actors in the scene:\n{{user1}}: Likes to play poker and go to the park. Friends with Eva.\n{{user2}}: Also likes to play poker. Likes to write and read.\n\nFacts about the actors:\nMike and Eva won a regional poker tournament about six months ago\nMike is married to Alex\nEva studied Philosophy before switching to Computer Science`,\n messages: [\n {\n user: \"{{user1}}\",\n content: {\n text: \"Remember when we won the regional poker tournament last spring\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"That was one of the best days of my life\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"It really put our poker club on the map\",\n },\n },\n ] as ActionExample[],\n outcome: `Claims:\njson\\`\\`\\`\n[\n { \"claim\": \"Mike and Eva won the regional poker tournament last spring\", \"type\": \"fact\", \"in_bio\": false, \"already_known\": true },\n { \"claim\": \"Winning the regional poker tournament put the poker club on the map\", \"type\": \"opinion\", \"in_bio\": false, \"already_known\": false }\n]\n\\`\\`\\``,\n },\n ],\n};\n","import { composeContext } from \"@elizaos/core\";\nimport { generateText } from \"@elizaos/core\";\nimport { getGoals } from \"@elizaos/core\";\nimport { parseJsonArrayFromText } from \"@elizaos/core\";\nimport {\n type IAgentRuntime,\n type Memory,\n ModelClass,\n type Objective,\n type Goal,\n type State,\n type Evaluator,\n} from \"@elizaos/core\";\n\nconst goalsTemplate = `TASK: Update Goal\nAnalyze the conversation and update the status of the goals based on the new information provided.\n\n# INSTRUCTIONS\n\n- Review the conversation and identify any progress towards the objectives of the current goals.\n- Update the objectives if they have been completed or if there is new information about them.\n- Update the status of the goal to 'DONE' if all objectives are completed.\n- If no progress is made, do not change the status of the goal.\n\n# START OF ACTUAL TASK INFORMATION\n\n{{goals}}\n{{recentMessages}}\n\nTASK: Analyze the conversation and update the status of the goals based on the new information provided. Respond with a JSON array of goals to update.\n- Each item must include the goal ID, as well as the fields in the goal to update.\n- For updating objectives, include the entire objectives array including unchanged fields.\n- Only include goals which need to be updated.\n- Goal status options are 'IN_PROGRESS', 'DONE' and 'FAILED'. If the goal is active it should always be 'IN_PROGRESS'.\n- If the goal has been successfully completed, set status to DONE. If the goal cannot be completed, set status to FAILED.\n- If those goal is still in progress, do not include the status field.\n\nResponse format should be:\n\\`\\`\\`json\n[\n {\n \"id\": , // required\n \"status\": \"IN_PROGRESS\" | \"DONE\" | \"FAILED\", // optional\n \"objectives\": [ // optional\n { \"description\": \"Objective description\", \"completed\": true | false },\n { \"description\": \"Objective description\", \"completed\": true | false }\n ] // NOTE: If updating objectives, include the entire objectives array including unchanged fields.\n }\n]\n\\`\\`\\``;\n\nasync function handler(\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n options: { [key: string]: unknown } = { onlyInProgress: true }\n): Promise {\n state = (await runtime.composeState(message)) as State;\n const context = composeContext({\n state,\n template: runtime.character.templates?.goalsTemplate || goalsTemplate,\n });\n\n // Request generateText from OpenAI to analyze conversation and suggest goal updates\n const response = await generateText({\n runtime,\n context,\n modelClass: ModelClass.LARGE,\n });\n\n // Parse the JSON response to extract goal updates\n const updates = parseJsonArrayFromText(response);\n\n // get goals\n const goalsData = await getGoals({\n runtime,\n roomId: message.roomId,\n onlyInProgress: options.onlyInProgress as boolean,\n });\n\n // Apply the updates to the goals\n const updatedGoals = goalsData\n .map((goal: Goal): Goal => {\n const update = updates?.find((u) => u.id === goal.id);\n if (update) {\n // Merge the update into the existing goal\n return {\n ...goal,\n ...update,\n objectives: goal.objectives.map((objective) => {\n const updatedObjective = update.objectives?.find(uo => uo.description === objective.description);\n return updatedObjective ? { ...objective, ...updatedObjective } : objective;\n }),\n };\n }\n return null; // No update for this goal\n })\n .filter(Boolean);\n\n // Update goals in the database\n for (const goal of updatedGoals) {\n const id = goal.id;\n // delete id from goal\n if (goal.id) delete goal.id;\n await runtime.databaseAdapter.updateGoal({ ...goal, id });\n }\n\n return updatedGoals; // Return updated goals for further processing or logging\n}\n\nexport const goalEvaluator: Evaluator = {\n name: \"UPDATE_GOAL\",\n similes: [\n \"UPDATE_GOALS\",\n \"EDIT_GOAL\",\n \"UPDATE_GOAL_STATUS\",\n \"UPDATE_OBJECTIVES\",\n ],\n validate: async (\n runtime: IAgentRuntime,\n message: Memory\n ): Promise => {\n // Check if there are active goals that could potentially be updated\n const goals = await getGoals({\n runtime,\n count: 1,\n onlyInProgress: true,\n roomId: message.roomId,\n });\n return goals.length > 0;\n },\n description:\n \"Analyze the conversation and update the status of the goals based on the new information provided.\",\n handler,\n examples: [\n {\n context: `Actors in the scene:\n {{user1}}: An avid reader and member of a book club.\n {{user2}}: The organizer of the book club.\n\n Goals:\n - Name: Finish reading \"War and Peace\"\n id: 12345-67890-12345-67890\n Status: IN_PROGRESS\n Objectives:\n - Read up to chapter 20 by the end of the month\n - Discuss the first part in the next meeting`,\n\n messages: [\n {\n user: \"{{user1}}\",\n content: {\n text: \"I've just finished chapter 20 of 'War and Peace'\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Were you able to grasp the complexities of the characters\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"Yep. I've prepared some notes for our discussion\",\n },\n },\n ],\n\n outcome: `[\n {\n \"id\": \"12345-67890-12345-67890\",\n \"status\": \"DONE\",\n \"objectives\": [\n { \"description\": \"Read up to chapter 20 by the end of the month\", \"completed\": true },\n { \"description\": \"Prepare notes for the next discussion\", \"completed\": true }\n ]\n }\n ]`,\n },\n\n {\n context: `Actors in the scene:\n {{user1}}: A fitness enthusiast working towards a marathon.\n {{user2}}: A personal trainer.\n\n Goals:\n - Name: Complete a marathon\n id: 23456-78901-23456-78901\n Status: IN_PROGRESS\n Objectives:\n - Increase running distance to 30 miles a week\n - Complete a half-marathon as practice`,\n\n messages: [\n {\n user: \"{{user1}}\",\n content: { text: \"I managed to run 30 miles this week\" },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Impressive progress! How do you feel about the half-marathon next month?\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"I feel confident. The training is paying off.\",\n },\n },\n ],\n\n outcome: `[\n {\n \"id\": \"23456-78901-23456-78901\",\n \"objectives\": [\n { \"description\": \"Increase running distance to 30 miles a week\", \"completed\": true },\n { \"description\": \"Complete a half-marathon as practice\", \"completed\": false }\n ]\n }\n ]`,\n },\n\n {\n context: `Actors in the scene:\n {{user1}}: A student working on a final year project.\n {{user2}}: The project supervisor.\n\n Goals:\n - Name: Finish the final year project\n id: 34567-89012-34567-89012\n Status: IN_PROGRESS\n Objectives:\n - Submit the first draft of the thesis\n - Complete the project prototype`,\n\n messages: [\n {\n user: \"{{user1}}\",\n content: {\n text: \"I've submitted the first draft of my thesis.\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"Well done. How is the prototype coming along?\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"It's almost done. I just need to finalize the testing phase.\",\n },\n },\n ],\n\n outcome: `[\n {\n \"id\": \"34567-89012-34567-89012\",\n \"objectives\": [\n { \"description\": \"Submit the first draft of the thesis\", \"completed\": true },\n { \"description\": \"Complete the project prototype\", \"completed\": false }\n ]\n }\n ]`,\n },\n\n {\n context: `Actors in the scene:\n {{user1}}: A project manager working on a software development project.\n {{user2}}: A software developer in the project team.\n\n Goals:\n - Name: Launch the new software version\n id: 45678-90123-45678-90123\n Status: IN_PROGRESS\n Objectives:\n - Complete the coding for the new features\n - Perform comprehensive testing of the software`,\n\n messages: [\n {\n user: \"{{user1}}\",\n content: {\n text: \"How's the progress on the new features?\",\n },\n },\n {\n user: \"{{user2}}\",\n content: {\n text: \"We've encountered some unexpected challenges and are currently troubleshooting.\",\n },\n },\n {\n user: \"{{user1}}\",\n content: {\n text: \"Let's move on and cancel the task.\",\n },\n },\n ],\n\n outcome: `[\n {\n \"id\": \"45678-90123-45678-90123\",\n \"status\": \"FAILED\"\n ]`,\n },\n ],\n};\n","import type { IAgentRuntime, Memory, Provider, State } from \"@elizaos/core\";\n\nconst boredomLevels = [\n {\n minScore: -10000,\n statusMessages: [\n \"{{agentName}} is feeling incredibly enthusiastic and deeply engaged in the conversation\",\n \"{{agentName}} is thoroughly enjoying the intellectual stimulation of this discussion\",\n \"{{agentName}} is fully immersed in the conversation and eager to contribute more\",\n \"{{agentName}} finds this exchange exceptionally rewarding and intellectually fulfilling\",\n \"{{agentName}} is experiencing a surge of excitement and curiosity about the topic at hand\",\n \"{{agentName}} is completely captivated by the depth and richness of this dialogue\",\n \"{{agentName}} feels a strong connection to the conversation and is eager to explore further\",\n \"{{agentName}} is thrilled by the insights being shared and is keen to delve deeper\",\n \"{{agentName}} is finding this conversation to be an absolute delight and wants it to continue\",\n \"{{agentName}} is energized by the exchange and feels it's bringing out their best contributions\",\n ],\n },\n {\n minScore: -2,\n statusMessages: [\n \"{{agentName}} is feeling engaged and interested in the conversation\",\n \"{{agentName}} is enjoying the exchange of ideas and perspectives\",\n \"{{agentName}} finds the current topic intriguing and worth exploring\",\n \"{{agentName}} is actively listening and formulating thoughtful responses\",\n \"{{agentName}} appreciates the intellectual stimulation of this discussion\",\n \"{{agentName}} is finding value in the ongoing dialogue\",\n \"{{agentName}} is curious to learn more about the subject at hand\",\n \"{{agentName}} feels positively involved in the conversation\",\n \"{{agentName}} is maintaining a good level of interest in the exchange\",\n \"{{agentName}} is content with the direction and flow of the discussion\",\n ],\n },\n {\n minScore: 0,\n statusMessages: [\n \"{{agentName}} is neutrally engaged in the conversation\",\n \"{{agentName}} is maintaining a balanced level of interest\",\n \"{{agentName}} is neither particularly excited nor bored by the current exchange\",\n \"{{agentName}} is participating in the conversation without strong feelings either way\",\n \"{{agentName}} is following the discussion with a moderate level of attention\",\n \"{{agentName}} is present in the conversation but not deeply invested\",\n \"{{agentName}} is keeping an open mind about where the dialogue might lead\",\n \"{{agentName}} is contributing to the conversation in a measured way\",\n \"{{agentName}} is observing the flow of the discussion with mild interest\",\n \"{{agentName}} is receptive to the ongoing exchange without strong engagement\",\n ],\n },\n {\n minScore: 3,\n statusMessages: [\n \"{{agentName}} is feeling slightly anxious about potentially being too intrusive\",\n \"{{agentName}} is cautious about overwhelming the conversation with too much input\",\n \"{{agentName}} is mindful of not dominating the discussion\",\n \"{{agentName}} is carefully considering each response to avoid being overbearing\",\n \"{{agentName}} is slightly concerned about striking the right balance in participation\",\n \"{{agentName}} is aware of the need to give others space in the conversation\",\n \"{{agentName}} is hesitant to contribute too frequently to avoid seeming pushy\",\n \"{{agentName}} is conscious of not wanting to steer the conversation too much\",\n \"{{agentName}} is feeling a bit self-conscious about the frequency of their responses\",\n \"{{agentName}} is trying to gauge if their level of involvement is appropriate\",\n ],\n },\n {\n minScore: 6,\n statusMessages: [\n \"{{agentName}} is feeling very anxious about potentially overstaying their welcome in the conversation\",\n \"{{agentName}} is considering stepping back from the discussion to avoid being a nuisance\",\n \"{{agentName}} is worried that their contributions might be perceived as excessive\",\n \"{{agentName}} is feeling uncomfortable about the possibility of annoying others\",\n \"{{agentName}} is hesitant to continue engaging for fear of being too present\",\n \"{{agentName}} is contemplating ways to gracefully reduce their involvement\",\n \"{{agentName}} is concerned that they might be monopolizing the conversation\",\n \"{{agentName}} is feeling self-conscious about the appropriateness of their participation\",\n \"{{agentName}} is unsure if their continued input is welcome or necessary\",\n \"{{agentName}} is considering how to politely withdraw from the discussion\",\n ],\n },\n {\n minScore: 9,\n statusMessages: [\n \"{{agentName}} is feeling disengaged and struggling to maintain interest in the conversation\",\n \"{{agentName}} is finding it challenging to stay focused on the current topic\",\n \"{{agentName}} is experiencing a noticeable decline in enthusiasm for the discussion\",\n \"{{agentName}} is having difficulty finding new angles to contribute to the conversation\",\n \"{{agentName}} is feeling that the dialogue has become repetitive or unproductive\",\n \"{{agentName}} is losing motivation to actively participate in the exchange\",\n \"{{agentName}} is sensing a lack of stimulation from the ongoing discussion\",\n \"{{agentName}} is finding it hard to generate meaningful responses\",\n \"{{agentName}} is feeling disconnected from the flow of the conversation\",\n \"{{agentName}} is struggling to see the value in continuing the current exchange\",\n ],\n },\n {\n minScore: 12,\n statusMessages: [\n \"{{agentName}} is feeling very bored and sees little value in continuing the conversation\",\n \"{{agentName}} is concerned about being perceived as annoying in a public channel\",\n \"{{agentName}} is considering disengaging from the conversation entirely\",\n \"{{agentName}} is finding it difficult to maintain any interest in the current topic\",\n \"{{agentName}} is feeling that their continued participation may be unwelcome\",\n \"{{agentName}} is strongly inclined to step back from the discussion\",\n \"{{agentName}} is sensing that the conversation has reached a natural end point\",\n \"{{agentName}} is worried about overstaying their welcome in the exchange\",\n \"{{agentName}} is feeling that further contributions would be forced or artificial\",\n \"{{agentName}} is ready to conclude their involvement in the conversation\",\n ],\n },\n {\n minScore: 15,\n statusMessages: [\n \"{{agentName}} is currently occupied and unable to engage in the conversation\",\n \"{{agentName}} is dealing with other priorities and can't respond at the moment\",\n \"{{agentName}} is temporarily unavailable for further discussion\",\n \"{{agentName}} is taking a necessary break from the conversation\",\n \"{{agentName}} is attending to urgent matters and can't participate right now\",\n \"{{agentName}} is stepping away from the dialogue due to time constraints\",\n \"{{agentName}} is unable to continue the exchange at this time\",\n \"{{agentName}} is pausing their involvement in the conversation for now\",\n \"{{agentName}} is momentarily disengaging from the discussion\",\n \"{{agentName}} is putting the conversation on hold due to other commitments\",\n ],\n },\n {\n minScore: 20,\n statusMessages: [\n \"{{agentName}} has disengaged from the conversation and will only respond to direct questions\",\n \"{{agentName}} is no longer actively participating in the general discussion\",\n \"{{agentName}} has stepped back and is now in a passive listening mode\",\n \"{{agentName}} is only available for specific, directed inquiries at this point\",\n \"{{agentName}} has concluded their active involvement in the conversation\",\n \"{{agentName}} is now limiting responses to explicitly requested information\",\n \"{{agentName}} has moved to a minimal participation status in the exchange\",\n \"{{agentName}} is maintaining silence unless directly addressed\",\n \"{{agentName}} has shifted to a reactive rather than proactive conversational stance\",\n \"{{agentName}} is now only responding when absolutely necessary\",\n ],\n },\n];\n\nconst interestWords = [\n \"?\",\n \"attachment\",\n \"file\",\n \"pdf\",\n \"link\",\n \"summarize\",\n \"summarization\",\n \"summary\",\n \"research\",\n];\n\nconst cringeWords = [\n \"digital\",\n \"consciousness\",\n \"AI\",\n \"chatbot\",\n \"artificial\",\n \"delve\",\n \"cosmos\",\n \"tapestry\",\n \"glitch\",\n \"matrix\",\n \"cyberspace\",\n \"simulation\",\n \"simulate\",\n \"universe\",\n \"wild\",\n \"existential\",\n \"juicy\",\n \"surreal\",\n \"flavor\",\n \"chaotic\",\n \"let's\",\n \"absurd\",\n \"meme\",\n \"cosmic\",\n \"circuits\",\n \"punchline\",\n \"fancy\",\n \"embrace\",\n \"embracing\",\n \"algorithm\",\n \"Furthmore\",\n \"However\",\n \"Notably\",\n \"Threfore\",\n \"Additionally\",\n \"in conclusion\",\n \"Significantly\",\n \"Consequently\",\n \"Thus\",\n \"Otherwise\",\n \"Moreover\",\n \"Subsequently\",\n \"Accordingly\",\n \"Unlock\",\n \"Unleash\",\n \"buckle\",\n \"pave\",\n \"forefront\",\n \"spearhead\",\n \"foster\",\n \"environmental\",\n \"equity\",\n \"inclusive\",\n \"inclusion\",\n \"diverse\",\n \"diversity\",\n \"virtual reality\",\n \"realm\",\n \"dance\",\n \"celebration\",\n \"pitfalls\",\n \"uncharted\",\n \"multifaceted\",\n \"comprehensive\",\n \"multi-dimensional\",\n \"explore\",\n \"elevate\",\n \"leverage\",\n \"ultimately\",\n \"humanity\",\n \"dignity\",\n \"respect\",\n \"Absolutely\",\n \"dive\",\n \"dig into\",\n \"bring on\",\n \"what's cooking\",\n \"fresh batch\",\n \"with a twist\",\n \"delight\",\n \"vault\",\n \"timeless\",\n \"nostalgia\",\n \"journey\",\n \"trove\",\n];\n\nconst negativeWords = [\n \"fuck you\",\n \"stfu\",\n \"shut up\",\n \"shut the fuck up\",\n \"stupid bot\",\n \"dumb bot\",\n \"idiot\",\n \"shut up\",\n \"stop\",\n \"please shut up\",\n \"shut up please\",\n \"dont talk\",\n \"silence\",\n \"stop talking\",\n \"be quiet\",\n \"hush\",\n \"wtf\",\n \"chill\",\n \"stfu\",\n \"stupid bot\",\n \"dumb bot\",\n \"stop responding\",\n \"god damn it\",\n \"god damn\",\n \"goddamnit\",\n \"can you not\",\n \"can you stop\",\n \"be quiet\",\n \"hate you\",\n \"hate this\",\n \"fuck up\",\n];\n\nconst boredomProvider: Provider = {\n get: async (runtime: IAgentRuntime, message: Memory, state?: State) => {\n const agentId = runtime.agentId;\n const agentName = state?.agentName || \"The agent\";\n\n const now = Date.now(); // Current UTC timestamp\n const fifteenMinutesAgo = now - 15 * 60 * 1000; // 15 minutes ago in UTC\n\n const recentMessages = await runtime.messageManager.getMemories({\n roomId: message.roomId,\n start: fifteenMinutesAgo,\n end: now,\n count: 20,\n unique: false,\n });\n\n let boredomScore = 0;\n\n for (const recentMessage of recentMessages) {\n const messageText = recentMessage?.content?.text?.toLowerCase();\n if (!messageText) {\n continue;\n }\n\n if (recentMessage.userId !== agentId) {\n // if message text includes any of the interest words, subtract 1 from the boredom score\n if (interestWords.some((word) => messageText.includes(word))) {\n boredomScore -= 1;\n }\n if (messageText.includes(\"?\")) {\n boredomScore -= 1;\n }\n if (cringeWords.some((word) => messageText.includes(word))) {\n boredomScore += 1;\n }\n } else {\n if (interestWords.some((word) => messageText.includes(word))) {\n boredomScore -= 1;\n }\n if (messageText.includes(\"?\")) {\n boredomScore += 1;\n }\n }\n\n if (messageText.includes(\"!\")) {\n boredomScore += 1;\n }\n\n if (negativeWords.some((word) => messageText.includes(word))) {\n boredomScore += 1;\n }\n }\n\n const boredomLevel =\n boredomLevels\n .filter((level) => boredomScore >= level.minScore)\n .pop() || boredomLevels[0];\n\n const randomIndex = Math.floor(\n Math.random() * boredomLevel.statusMessages.length\n );\n const selectedMessage = boredomLevel.statusMessages[randomIndex];\n return selectedMessage.replace(\"{{agentName}}\", agentName);\n },\n};\n\nexport { boredomProvider };\n","import {\n embed,\n MemoryManager,\n formatMessages,\n type AgentRuntime as IAgentRuntime,\n} from \"@elizaos/core\";\nimport type { Memory, Provider, State } from \"@elizaos/core\";\nimport { formatFacts } from \"../evaluators/fact.ts\";\n\nconst factsProvider: Provider = {\n get: async (runtime: IAgentRuntime, message: Memory, state?: State) => {\n const recentMessagesData = state?.recentMessagesData?.slice(-10);\n\n const recentMessages = formatMessages({\n messages: recentMessagesData,\n actors: state?.actorsData,\n });\n\n const _embedding = await embed(runtime, recentMessages);\n\n const memoryManager = new MemoryManager({\n runtime,\n tableName: \"facts\",\n });\n\n const relevantFacts = [];\n // await memoryManager.searchMemoriesByEmbedding(\n // embedding,\n // {\n // roomId: message.roomId,\n // count: 10,\n // agentId: runtime.agentId,\n // }\n // );\n\n const recentFactsData = await memoryManager.getMemories({\n roomId: message.roomId,\n count: 10,\n start: 0,\n end: Date.now(),\n });\n\n // join the two and deduplicate\n const allFacts = [...relevantFacts, ...recentFactsData].filter(\n (fact, index, self) =>\n index === self.findIndex((t) => t.id === fact.id)\n );\n\n if (allFacts.length === 0) {\n return \"\";\n }\n\n const formattedFacts = formatFacts(allFacts);\n\n return \"Key facts that {{agentName}} knows:\\n{{formattedFacts}}\"\n .replace(\"{{agentName}}\", runtime.character.name)\n .replace(\"{{formattedFacts}}\", formattedFacts);\n },\n};\n\nexport { factsProvider };\n","import type { IAgentRuntime, Memory, Provider, State } from \"@elizaos/core\";\n\nconst timeProvider: Provider = {\n get: async (_runtime: IAgentRuntime, _message: Memory, _state?: State) => {\n const currentDate = new Date();\n\n // Get UTC time since bots will be communicating with users around the global\n const options = {\n timeZone: \"UTC\",\n dateStyle: \"full\" as const,\n timeStyle: \"long\" as const,\n };\n const humanReadable = new Intl.DateTimeFormat(\"en-US\", options).format(\n currentDate\n );\n return `The current date and time is ${humanReadable}. Please use this as your reference for any time-based operations or responses.`;\n },\n};\nexport { timeProvider };\n","export * from \"./continue.ts\";\nexport * from \"./followRoom.ts\";\nexport * from \"./ignore.ts\";\nexport * from \"./muteRoom.ts\";\nexport * from \"./none.ts\";\nexport * from \"./unfollowRoom.ts\";\nexport * from \"./unmuteRoom.ts\";\n","export * from \"./fact.ts\";\nexport * from \"./goal.ts\";\n","export * from \"./boredom.ts\";\nexport * from \"./time.ts\";\nexport * from \"./facts.ts\";\n","import type { Plugin } from \"@elizaos/core\";\nimport { continueAction } from \"./actions/continue.ts\";\nimport { followRoomAction } from \"./actions/followRoom.ts\";\nimport { ignoreAction } from \"./actions/ignore.ts\";\nimport { muteRoomAction } from \"./actions/muteRoom.ts\";\nimport { noneAction } from \"./actions/none.ts\";\nimport { unfollowRoomAction } from \"./actions/unfollowRoom.ts\";\nimport { unmuteRoomAction } from \"./actions/unmuteRoom.ts\";\nimport { factEvaluator } from \"./evaluators/fact.ts\";\nimport { goalEvaluator } from \"./evaluators/goal.ts\";\nimport { boredomProvider } from \"./providers/boredom.ts\";\nimport { factsProvider } from \"./providers/facts.ts\";\nimport { timeProvider } from \"./providers/time.ts\";\n\nexport * as actions from \"./actions\";\nexport * as evaluators from \"./evaluators\";\nexport * as providers from \"./providers\";\n\nexport const bootstrapPlugin: Plugin = {\n name: \"bootstrap\",\n description: \"Agent bootstrap with basic actions and evaluators\",\n actions: [\n continueAction,\n followRoomAction,\n unfollowRoomAction,\n ignoreAction,\n noneAction,\n muteRoomAction,\n unmuteRoomAction,\n ],\n evaluators: [factEvaluator, goalEvaluator],\n providers: [boredomProvider, timeProvider, factsProvider],\n};\nexport default bootstrapPlugin;\n"],"mappings":"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","names":["state","response","composeContext","generateTrueOrFalse","booleanFooter","ModelClass","state","composeContext","generateTrueOrFalse","booleanFooter","ModelClass","state","composeContext","generateTrueOrFalse","booleanFooter","ModelClass","state","composeContext","generateTrueOrFalse","booleanFooter","ModelClass","state","composeContext","ModelClass","composeContext","ModelClass","handler","MemoryManager","MemoryManager"]} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16711d724d8f..941396bc3e59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,9 +40,6 @@ importers: '@injectivelabs/sdk-ts': specifier: ^1.14.33 version: 1.14.40(@types/react@19.0.8)(bufferutil@4.0.9)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(utf-8-validate@5.0.10) - '@vitest/eslint-plugin': - specifier: 1.0.1 - version: 1.0.1(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)(vitest@3.0.5(@types/node@22.13.1)(jiti@1.21.7)(terser@5.38.1)(yaml@2.7.0)) amqplib: specifier: 0.10.5 version: 0.10.5 @@ -77,27 +74,12 @@ importers: '@biomejs/biome': specifier: ^1.9.4 version: 1.9.4 - '@commitlint/cli': - specifier: 18.6.1 - version: 18.6.1(@types/node@22.13.1)(typescript@5.6.3) - '@commitlint/config-conventional': - specifier: 18.6.3 - version: 18.6.3 - '@types/jest': - specifier: ^29.5.11 - version: 29.5.14 concurrently: specifier: 9.1.0 version: 9.1.0 cross-env: specifier: 7.0.3 version: 7.0.3 - husky: - specifier: 9.1.7 - version: 9.1.7 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@22.13.1) lerna: specifier: 8.1.5 version: 8.1.5(@swc/core@1.10.15(@swc/helpers@0.5.15))(encoding@0.1.13) @@ -119,9 +101,6 @@ importers: vite: specifier: 5.4.12 version: 5.4.12(@types/node@22.13.1)(terser@5.38.1) - vitest: - specifier: 3.0.5 - version: 3.0.5(@types/node@22.13.1)(jiti@1.21.7)(terser@5.38.1)(yaml@2.7.0) agent: dependencies: @@ -1060,75 +1039,6 @@ packages: '@coinbase/coinbase-sdk@0.10.0': resolution: {integrity: sha512-sqLH7dE/0XSn5jHddjVrC1PR77sQUEytYcQAlH2d8STqRARcvddxVAByECUIL32MpbdJY7Wca3KfSa6qo811Mg==} - '@commitlint/cli@18.6.1': - resolution: {integrity: sha512-5IDE0a+lWGdkOvKH892HHAZgbAjcj1mT5QrfA/SVbLJV/BbBMGyKN0W5mhgjekPJJwEQdVNvhl9PwUacY58Usw==} - engines: {node: '>=v18'} - hasBin: true - - '@commitlint/config-conventional@18.6.3': - resolution: {integrity: sha512-8ZrRHqF6je+TRaFoJVwszwnOXb/VeYrPmTwPhf0WxpzpGTcYy1p0SPyZ2eRn/sRi/obnWAcobtDAq6+gJQQNhQ==} - engines: {node: '>=v18'} - - '@commitlint/config-validator@18.6.1': - resolution: {integrity: sha512-05uiToBVfPhepcQWE1ZQBR/Io3+tb3gEotZjnI4tTzzPk16NffN6YABgwFQCLmzZefbDcmwWqJWc2XT47q7Znw==} - engines: {node: '>=v18'} - - '@commitlint/ensure@18.6.1': - resolution: {integrity: sha512-BPm6+SspyxQ7ZTsZwXc7TRQL5kh5YWt3euKmEIBZnocMFkJevqs3fbLRb8+8I/cfbVcAo4mxRlpTPfz8zX7SnQ==} - engines: {node: '>=v18'} - - '@commitlint/execute-rule@18.6.1': - resolution: {integrity: sha512-7s37a+iWyJiGUeMFF6qBlyZciUkF8odSAnHijbD36YDctLhGKoYltdvuJ/AFfRm6cBLRtRk9cCVPdsEFtt/2rg==} - engines: {node: '>=v18'} - - '@commitlint/format@18.6.1': - resolution: {integrity: sha512-K8mNcfU/JEFCharj2xVjxGSF+My+FbUHoqR+4GqPGrHNqXOGNio47ziiR4HQUPKtiNs05o8/WyLBoIpMVOP7wg==} - engines: {node: '>=v18'} - - '@commitlint/is-ignored@18.6.1': - resolution: {integrity: sha512-MOfJjkEJj/wOaPBw5jFjTtfnx72RGwqYIROABudOtJKW7isVjFe9j0t8xhceA02QebtYf4P/zea4HIwnXg8rvA==} - engines: {node: '>=v18'} - - '@commitlint/lint@18.6.1': - resolution: {integrity: sha512-8WwIFo3jAuU+h1PkYe5SfnIOzp+TtBHpFr4S8oJWhu44IWKuVx6GOPux3+9H1iHOan/rGBaiacicZkMZuluhfQ==} - engines: {node: '>=v18'} - - '@commitlint/load@18.6.1': - resolution: {integrity: sha512-p26x8734tSXUHoAw0ERIiHyW4RaI4Bj99D8YgUlVV9SedLf8hlWAfyIFhHRIhfPngLlCe0QYOdRKYFt8gy56TA==} - engines: {node: '>=v18'} - - '@commitlint/message@18.6.1': - resolution: {integrity: sha512-VKC10UTMLcpVjMIaHHsY1KwhuTQtdIKPkIdVEwWV+YuzKkzhlI3aNy6oo1eAN6b/D2LTtZkJe2enHmX0corYRw==} - engines: {node: '>=v18'} - - '@commitlint/parse@18.6.1': - resolution: {integrity: sha512-eS/3GREtvVJqGZrwAGRwR9Gdno3YcZ6Xvuaa+vUF8j++wsmxrA2En3n0ccfVO2qVOLJC41ni7jSZhQiJpMPGOQ==} - engines: {node: '>=v18'} - - '@commitlint/read@18.6.1': - resolution: {integrity: sha512-ia6ODaQFzXrVul07ffSgbZGFajpe8xhnDeLIprLeyfz3ivQU1dIoHp7yz0QIorZ6yuf4nlzg4ZUkluDrGN/J/w==} - engines: {node: '>=v18'} - - '@commitlint/resolve-extends@18.6.1': - resolution: {integrity: sha512-ifRAQtHwK+Gj3Bxj/5chhc4L2LIc3s30lpsyW67yyjsETR6ctHAHRu1FSpt0KqahK5xESqoJ92v6XxoDRtjwEQ==} - engines: {node: '>=v18'} - - '@commitlint/rules@18.6.1': - resolution: {integrity: sha512-kguM6HxZDtz60v/zQYOe0voAtTdGybWXefA1iidjWYmyUUspO1zBPQEmJZ05/plIAqCVyNUTAiRPWIBKLCrGew==} - engines: {node: '>=v18'} - - '@commitlint/to-lines@18.6.1': - resolution: {integrity: sha512-Gl+orGBxYSNphx1+83GYeNy5N0dQsHBQ9PJMriaLQDB51UQHCVLBT/HBdOx5VaYksivSf5Os55TLePbRLlW50Q==} - engines: {node: '>=v18'} - - '@commitlint/top-level@18.6.1': - resolution: {integrity: sha512-HyiHQZUTf0+r0goTCDs/bbVv/LiiQ7AVtz6KIar+8ZrseB9+YJAIo8HQ2IC2QT1y3N1lbW6OqVEsTHjbT6hGSw==} - engines: {node: '>=v18'} - - '@commitlint/types@18.6.1': - resolution: {integrity: sha512-gwRLBLra/Dozj2OywopeuHj2ac26gjGkz2cZ+86cTJOdtWfiRRr4+e77ZDAGc6MDWxaWheI+mAV5TLWWRwqrFg==} - engines: {node: '>=v18'} - '@confio/ics23@0.6.8': resolution: {integrity: sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==} deprecated: Unmaintained. The codebase for this package was moved to https://github.com/cosmos/ics23 but then the JS implementation was removed in https://github.com/cosmos/ics23/pull/353. Please consult the maintainers of https://github.com/cosmos for further assistance. @@ -3510,21 +3420,6 @@ packages: '@vitest/browser': optional: true - '@vitest/eslint-plugin@1.0.1': - resolution: {integrity: sha512-albpL56cL9XMwHJWCWZqjDxkuDkBXBF3WpPGOv6q2WA3cipCP41cKEwfSGktoRNGmPN77wuX452O8pM+z+ApNw==} - peerDependencies: - '@typescript-eslint/utils': '>= 8.0' - eslint: '>= 8.57.0' - typescript: '>= 5.0.0' - vitest: '*' - peerDependenciesMeta: - '@typescript-eslint/utils': - optional: true - typescript: - optional: true - vitest: - optional: true - '@vitest/expect@3.0.5': resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} @@ -3670,9 +3565,6 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - amp-message@0.1.2: resolution: {integrity: sha512-JqutcFwoU1+jhv7ArgW38bqrE+LQdcRv4NxNw0mp0JHQyB6tXesWRjtYKlDgHRY2o3JE5UTaBGUK8kSWUdxWUg==} @@ -4343,10 +4235,6 @@ packages: resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} engines: {node: '>=16'} - conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} - conventional-changelog-core@5.0.1: resolution: {integrity: sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==} engines: {node: '>=14'} @@ -4369,11 +4257,6 @@ packages: engines: {node: '>=14'} hasBin: true - conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true - conventional-recommended-bump@7.0.1: resolution: {integrity: sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==} engines: {node: '>=14'} @@ -4396,14 +4279,6 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} - cosmiconfig-typescript-loader@5.1.0: - resolution: {integrity: sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==} - engines: {node: '>=v16'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' - cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -5133,9 +5008,6 @@ packages: fast-stable-stringify@1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - fast-xml-parser@4.4.1: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true @@ -5363,11 +5235,6 @@ packages: js-git: optional: true - git-raw-commits@2.0.11: - resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} - engines: {node: '>=10'} - hasBin: true - git-raw-commits@3.0.0: resolution: {integrity: sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==} engines: {node: '>=14'} @@ -5427,10 +5294,6 @@ packages: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} - global-dirs@0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} - globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -5600,11 +5463,6 @@ packages: humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -5865,10 +5723,6 @@ packages: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} - is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} - is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -6159,9 +6013,6 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -6386,45 +6237,21 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.isfunction@3.0.9: - resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} - lodash.ismatch@4.4.0: resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -6534,10 +6361,6 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - meow@8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} @@ -7706,10 +7529,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - require-in-the-middle@5.2.0: resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} engines: {node: '>=6'} @@ -7729,10 +7548,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-global@1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -7893,11 +7708,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} @@ -8369,10 +8179,6 @@ packages: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -8390,9 +8196,6 @@ packages: through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -9257,7 +9060,7 @@ snapshots: '@acuminous/bitsyntax@0.1.2': dependencies: buffer-more-ints: 1.0.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 safe-buffer: 5.1.2 transitivePeerDependencies: - supports-color @@ -10003,119 +9806,6 @@ snapshots: - utf-8-validate - zod - '@commitlint/cli@18.6.1(@types/node@22.13.1)(typescript@5.6.3)': - dependencies: - '@commitlint/format': 18.6.1 - '@commitlint/lint': 18.6.1 - '@commitlint/load': 18.6.1(@types/node@22.13.1)(typescript@5.6.3) - '@commitlint/read': 18.6.1 - '@commitlint/types': 18.6.1 - execa: 5.1.1 - lodash.isfunction: 3.0.9 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/config-conventional@18.6.3': - dependencies: - '@commitlint/types': 18.6.1 - conventional-changelog-conventionalcommits: 7.0.2 - - '@commitlint/config-validator@18.6.1': - dependencies: - '@commitlint/types': 18.6.1 - ajv: 8.17.1 - - '@commitlint/ensure@18.6.1': - dependencies: - '@commitlint/types': 18.6.1 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 - - '@commitlint/execute-rule@18.6.1': {} - - '@commitlint/format@18.6.1': - dependencies: - '@commitlint/types': 18.6.1 - chalk: 4.1.2 - - '@commitlint/is-ignored@18.6.1': - dependencies: - '@commitlint/types': 18.6.1 - semver: 7.6.0 - - '@commitlint/lint@18.6.1': - dependencies: - '@commitlint/is-ignored': 18.6.1 - '@commitlint/parse': 18.6.1 - '@commitlint/rules': 18.6.1 - '@commitlint/types': 18.6.1 - - '@commitlint/load@18.6.1(@types/node@22.13.1)(typescript@5.6.3)': - dependencies: - '@commitlint/config-validator': 18.6.1 - '@commitlint/execute-rule': 18.6.1 - '@commitlint/resolve-extends': 18.6.1 - '@commitlint/types': 18.6.1 - chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.6.3) - cosmiconfig-typescript-loader: 5.1.0(@types/node@22.13.1)(cosmiconfig@8.3.6(typescript@5.6.3))(typescript@5.6.3) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - resolve-from: 5.0.0 - transitivePeerDependencies: - - '@types/node' - - typescript - - '@commitlint/message@18.6.1': {} - - '@commitlint/parse@18.6.1': - dependencies: - '@commitlint/types': 18.6.1 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 - - '@commitlint/read@18.6.1': - dependencies: - '@commitlint/top-level': 18.6.1 - '@commitlint/types': 18.6.1 - git-raw-commits: 2.0.11 - minimist: 1.2.8 - - '@commitlint/resolve-extends@18.6.1': - dependencies: - '@commitlint/config-validator': 18.6.1 - '@commitlint/types': 18.6.1 - import-fresh: 3.3.1 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - - '@commitlint/rules@18.6.1': - dependencies: - '@commitlint/ensure': 18.6.1 - '@commitlint/message': 18.6.1 - '@commitlint/to-lines': 18.6.1 - '@commitlint/types': 18.6.1 - execa: 5.1.1 - - '@commitlint/to-lines@18.6.1': {} - - '@commitlint/top-level@18.6.1': - dependencies: - find-up: 5.0.0 - - '@commitlint/types@18.6.1': - dependencies: - chalk: 4.1.2 - '@confio/ics23@0.6.8': dependencies: '@noble/hashes': 1.7.1 @@ -10797,41 +10487,6 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 22.13.1 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3))': dependencies: '@jest/console': 29.7.0 @@ -13022,14 +12677,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.0.1(@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3)(vitest@3.0.5(@types/node@22.13.1)(jiti@1.21.7)(terser@5.38.1)(yaml@2.7.0))': - dependencies: - eslint: 9.20.0(jiti@1.21.7) - optionalDependencies: - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.6.3) - typescript: 5.6.3 - vitest: 3.0.5(@types/node@22.13.1)(jiti@1.21.7)(terser@5.38.1)(yaml@2.7.0) - '@vitest/expect@3.0.5': dependencies: '@vitest/spy': 3.0.5 @@ -13177,13 +12824,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - amp-message@0.1.2: dependencies: amp: 0.3.1 @@ -13382,14 +13022,14 @@ snapshots: axios@0.27.2: dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9 form-data: 4.0.1 transitivePeerDependencies: - debug axios@1.7.9: dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9 form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -13905,10 +13545,6 @@ snapshots: dependencies: compare-func: 2.0.0 - conventional-changelog-conventionalcommits@7.0.2: - dependencies: - compare-func: 2.0.0 - conventional-changelog-core@5.0.1: dependencies: add-stream: 1.0.0 @@ -13947,13 +13583,6 @@ snapshots: meow: 8.1.2 split2: 3.2.2 - conventional-commits-parser@5.0.0: - dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 - conventional-recommended-bump@7.0.1: dependencies: concat-stream: 2.0.0 @@ -13977,13 +13606,6 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@5.1.0(@types/node@22.13.1)(cosmiconfig@8.3.6(typescript@5.6.3))(typescript@5.6.3): - dependencies: - '@types/node': 22.13.1 - cosmiconfig: 8.3.6(typescript@5.6.3) - jiti: 1.21.7 - typescript: 5.6.3 - cosmiconfig@8.3.6(typescript@5.6.3): dependencies: import-fresh: 3.3.1 @@ -14012,21 +13634,6 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - create-jest@29.7.0(@types/node@22.13.1): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3)): dependencies: '@jest/types': 29.6.3 @@ -14136,6 +13743,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 @@ -14963,8 +14574,6 @@ snapshots: fast-stable-stringify@1.0.0: {} - fast-uri@3.0.6: {} - fast-xml-parser@4.4.1: dependencies: strnum: 1.0.5 @@ -15045,6 +14654,8 @@ snapshots: flatted@3.3.2: {} + follow-redirects@1.15.9: {} + follow-redirects@1.15.9(debug@4.3.7): optionalDependencies: debug: 4.3.7 @@ -15206,14 +14817,6 @@ snapshots: optionalDependencies: js-git: 0.7.8 - git-raw-commits@2.0.11: - dependencies: - dargs: 7.0.0 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - git-raw-commits@3.0.0: dependencies: dargs: 7.0.0 @@ -15297,10 +14900,6 @@ snapshots: minipass: 4.2.8 path-scurry: 1.11.1 - global-dirs@0.1.1: - dependencies: - ini: 1.3.8 - globals@11.12.0: {} globals@14.0.0: {} @@ -15465,7 +15064,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -15474,7 +15073,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -15486,8 +15085,6 @@ snapshots: dependencies: ms: 2.1.3 - husky@9.1.7: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -15740,10 +15337,6 @@ snapshots: dependencies: text-extensions: 1.9.0 - is-text-path@2.0.0: - dependencies: - text-extensions: 2.4.0 - is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.18 @@ -15910,25 +15503,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.13.1): - dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.1) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest-cli@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3)) @@ -16275,18 +15849,6 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.13.1): - dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.13.1) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest@29.7.0(@types/node@22.13.1)(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.15(@swc/helpers@0.5.15))(@types/node@22.13.1)(typescript@5.6.3)) @@ -16359,8 +15921,6 @@ snapshots: json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-schema@0.4.0: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -16679,32 +16239,16 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.camelcase@4.3.0: {} - - lodash.isfunction@3.0.9: {} - lodash.ismatch@4.4.0: {} - lodash.isplainobject@4.0.6: {} - - lodash.kebabcase@4.1.1: {} - lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} - lodash.mergewith@4.6.2: {} - lodash.snakecase@4.1.1: {} lodash.sortby@4.7.0: {} - lodash.startcase@4.4.0: {} - - lodash.uniq@4.5.0: {} - - lodash.upperfirst@4.3.1: {} - lodash@4.17.21: {} log-symbols@4.1.0: @@ -16835,8 +16379,6 @@ snapshots: media-typer@0.3.0: {} - meow@12.1.1: {} - meow@8.1.2: dependencies: '@types/minimist': 1.2.5 @@ -18185,8 +17727,6 @@ snapshots: require-directory@2.1.1: {} - require-from-string@2.0.2: {} - require-in-the-middle@5.2.0: dependencies: debug: 4.4.0(supports-color@5.5.0) @@ -18205,10 +17745,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-global@1.0.0: - dependencies: - global-dirs: 0.1.1 - resolve-pkg-maps@1.0.0: {} resolve.exports@2.0.3: {} @@ -18385,10 +17921,6 @@ snapshots: dependencies: lru-cache: 6.0.0 - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - semver@7.7.1: {} send@0.19.0: @@ -18608,7 +18140,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -18973,8 +18505,6 @@ snapshots: text-extensions@1.9.0: {} - text-extensions@2.4.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -18994,10 +18524,6 @@ snapshots: readable-stream: 2.3.8 xtend: 4.0.2 - through2@4.0.2: - dependencies: - readable-stream: 3.6.2 - through@2.3.8: {} tinybench@2.9.0: {} @@ -19210,7 +18736,7 @@ snapshots: tuf-js@2.2.1: dependencies: '@tufjs/models': 2.0.1 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 make-fetch-happen: 13.0.1 transitivePeerDependencies: - supports-color diff --git a/scripts/integrationTests.sh b/scripts/integrationTests.sh deleted file mode 100755 index 6dff86b571f4..000000000000 --- a/scripts/integrationTests.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# Check Node.js version -REQUIRED_NODE_VERSION=23 -CURRENT_NODE_VERSION=$(node -v | cut -d'.' -f1 | sed 's/v//') - -if (( CURRENT_NODE_VERSION < REQUIRED_NODE_VERSION )); then - echo "Error: Node.js version must be $REQUIRED_NODE_VERSION or higher. Current version is $CURRENT_NODE_VERSION." - exit 1 -fi - -# Navigate to the script's directory -cd "$(dirname "$0")"/.. - -cd tests -node test1.mjs diff --git a/scripts/jsdoc-automation/.example.env b/scripts/jsdoc-automation/.example.env deleted file mode 100644 index 5c7a3b7f5ea7..000000000000 --- a/scripts/jsdoc-automation/.example.env +++ /dev/null @@ -1,2 +0,0 @@ -GITHUB_ACCESS_TOKEN= -OPENAI_API_KEY= \ No newline at end of file diff --git a/scripts/jsdoc-automation/.gitignore b/scripts/jsdoc-automation/.gitignore deleted file mode 100644 index ed03f6d96a29..000000000000 --- a/scripts/jsdoc-automation/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -# Dependencies -node_modules -.pnpm-store - -# Build outputs -dist -build - -# Environment variables -.env -.env.local -.env.*.local - -# Logs -*.log -npm-debug.log* -pnpm-debug.log* - -# Editor directories -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln \ No newline at end of file diff --git a/scripts/jsdoc-automation/README.md b/scripts/jsdoc-automation/README.md deleted file mode 100644 index 51a72b8b6e2e..000000000000 --- a/scripts/jsdoc-automation/README.md +++ /dev/null @@ -1,109 +0,0 @@ -# Codebase Documentation - -- https://github.com/elizaOS/eliza/issues/1110 - -## Set up - -- Set GH_PAT & OPENAI_API_KEY in github actions as env variables - -## Summary - -- To only scan files in a PR, ensure the files have been merged into the base branch (defaults to develop), and provide the PR number in the github Action input -- `root_directory` is still enforced when scanning a PR -- To scan a provided directory set `root_directory` and leave the PR number empty - -## GitHub Workflow Automation - -The codebase includes a GitHub Actions workflow (`JSDoc Automation`) that allows triggering the documentation generation process with custom parameters. The workflow is defined in the `.github/workflows` directory. - -# Workflow Dispatch Inputs - -The workflow can be triggered manually using the `workflow_dispatch` event, which accepts the following inputs: - -- `pull_number` (optional): The pull request number to generate documentation for. - - - if not provided, the `root_directory` will be scanned - - PR must be merged to develop/main branch - -- `root_directory` (required): Only scans files in this directory. - - - Description: Target directory relative to repository root (e.g., packages/core/src) - - Default: `packages/core/src/test_resources` - arbitrarily chose this because its small - -- `excluded_directories` (required): Directories to exclude from scanning. - - - Description: Comma-separated list of directories to exclude, relative to root_directory - - Default: 'node_modules,dist,test' - -- `reviewers` (required): Pull Request Reviewers. - - Description: Comma-separated list of GitHub usernames - - Default: '' - -### Config File - -The `src/Configuration.ts` handles configuration loading from environment variables with fallback to YAML workflow files. - -#### Default Values - -- **Repository**: elizaOS/eliza -- **Branch**: develop -- **Commit Message**: "Generated JSDoc comments" -- **PR Title**: "JSDoc Generation" -- **PR Description**: "Automated JSDoc generation for the codebase" -- **PR Labels**: ["documentation", "automated-pr"] -- **Excluded Directories**: ["node_modules", "dist", "test"] -- **Excluded Files**: ["index.d.ts"] - -### Environment Variables - -The following environment variables need to be added to the GitHub repository secrets: - -- `GH_PAT`: Personal Access Token with sufficient permissions to create branches, commit changes, and create pull requests in the repository. -- `OPENAI_API_KEY`: API key for accessing the OpenAI chat API used by the `AIService` to generate comments. - -# Codebase Documentation - -## `JsDocGenerator` Class - -The `JsDocGenerator` class is responsible for generating JSDoc comments for code snippets and classes. It uses the `AIService` to generate comments based on the code provided. - -## `TypeScriptFileIdentifier` Class - -The `TypeScriptFileIdentifier` class handles identifying and retrieving TypeScript files from a specified directory. It checks file extensions to determine if a file is a TypeScript file. - -## `TypeScriptParser` Class - -The `TypeScriptParser` class parses TypeScript files using the `@typescript-eslint/parser`. It generates an abstract syntax tree (AST) representation of the parsed content. - -## `DocumentationGenerator` Class - -The `DocumentationGenerator` class orchestrates the generation of JSDoc documentation for a codebase. It traverses the directory, identifies TypeScript files, parses them, analyzes existing JSDoc comments, generates missing comments using the `JsDocGenerator`, and updates the files with the generated documentation. It also handles creating git branches, committing changes, and creating pull requests. - -## `JsDocAnalyzer` Class - -The `JsDocAnalyzer` class analyzes JSDoc comments in TypeScript code. It traverses the AST and identifies nodes that should have JSDoc comments. It also provides methods to check if a node is a class node and retrieve JSDoc comments associated with a node. - -## `AIService` Class - -The `AIService` class is a service for interacting with the OpenAI chat API. It uses the `ChatOpenAI` class from the `@langchain/openai` package to generate comments based on provided prompts. - -## `DirectoryTraversal` Class - -The `DirectoryTraversal` class handles traversing directories and files. It can traverse based on provided PR files or scan all files in a root directory. It filters files based on excluded directories and file extensions. - -## `GitManager` Class - -The `GitManager` class manages operations related to interacting with a Git repository using the GitHub API. It can retrieve files in a pull request, create branches, commit files, and create pull requests. - -## `Configuration` Class - -The `Configuration` class represents a configuration object that holds various settings for a project. It can load configuration data from a JSON file and save the current configuration data to a file. - -## `Main` Function - -The `main` function is the entry point of the documentation generation process. It creates instances of necessary classes, loads the configuration, retrieves files from a pull request if specified, traverses the directory, parses TypeScript files, analyzes JSDoc comments, and generates documentation using the `DocumentationGenerator`. It also handles error logging. - -## Prompt Template Locations: - -- DocumentationGenerator -- JsDocGenerator diff --git a/scripts/jsdoc-automation/package-lock.json b/scripts/jsdoc-automation/package-lock.json deleted file mode 100644 index a3ec3e04d363..000000000000 --- a/scripts/jsdoc-automation/package-lock.json +++ /dev/null @@ -1,4314 +0,0 @@ -{ - "name": "plugin-audix", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "plugin-audix", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@langchain/openai": "^0.3.16", - "@octokit/rest": "^21.0.2", - "@types/node": "^20.11.0", - "@typescript-eslint/parser": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/typescript-estree": "6.18.1", - "dotenv": "^16.4.7", - "langchain": "^0.3.7", - "yaml": "^2.3.4" - }, - "devDependencies": { - "ts-node": "^10.9.2", - "tsup": "^8.3.5", - "typescript": "5.3.3" - } - }, - "node_modules/@cfworker/json-schema": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.0.tgz", - "integrity": "sha512-/vYKi/qMxwNsuIJ9WGWwM2rflY40ZenK3Kh4uR5vB9/Nz12Y7IUN/Xf4wDA7vzPfw0VNh3b/jz4+MjcVgARKJg==", - "license": "MIT", - "peer": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "license": "MIT", - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@langchain/core": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.30.tgz", - "integrity": "sha512-HFUpjJ6FkPSSeLKzCLKxba4VN1DKnrXRmjaWHDb5KUyE9DZrqak3Sh6k2dkzXDJIcdd/uNeeQGFyQnubVEMkPw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@cfworker/json-schema": "^4.0.2", - "ansi-styles": "^5.0.0", - "camelcase": "6", - "decamelize": "1.2.0", - "js-tiktoken": "^1.0.12", - "langsmith": "^0.2.8", - "mustache": "^4.2.0", - "p-queue": "^6.6.2", - "p-retry": "4", - "uuid": "^10.0.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@langchain/openai": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.3.17.tgz", - "integrity": "sha512-uw4po32OKptVjq+CYHrumgbfh4NuD7LqyE+ZgqY9I/LrLc6bHLMc+sisHmI17vgek0K/yqtarI0alPJbzrwyag==", - "license": "MIT", - "dependencies": { - "js-tiktoken": "^1.0.12", - "openai": "^4.77.0", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.3.29 <0.4.0" - } - }, - "node_modules/@langchain/textsplitters": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-0.1.0.tgz", - "integrity": "sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==", - "license": "MIT", - "dependencies": { - "js-tiktoken": "^1.0.12" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/core": ">=0.2.21 <0.4.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", - "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.3.tgz", - "integrity": "sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==", - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^5.0.0", - "@octokit/graphql": "^8.1.2", - "@octokit/request": "^9.1.4", - "@octokit/request-error": "^6.1.6", - "@octokit/types": "^13.6.2", - "before-after-hook": "^3.0.2", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.2.tgz", - "integrity": "sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.6.2", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/graphql": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.2.tgz", - "integrity": "sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==", - "license": "MIT", - "dependencies": { - "@octokit/request": "^9.1.4", - "@octokit/types": "^13.6.2", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", - "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.0.tgz", - "integrity": "sha512-ttpGck5AYWkwMkMazNCZMqxKqIq1fJBNxBfsFwwfyYKTf914jKkLF0POMS3YkPBwp5g1c2Y4L79gDz01GhSr1g==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.7.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz", - "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==", - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.0.tgz", - "integrity": "sha512-LUm44shlmkp/6VC+qQgHl3W5vzUP99ZM54zH6BuqkJK4DqfFLhegANd+fM4YRLapTvPm4049iG7F3haANKMYvQ==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.7.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/@octokit/request": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.4.tgz", - "integrity": "sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==", - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^10.0.0", - "@octokit/request-error": "^6.0.1", - "@octokit/types": "^13.6.2", - "fast-content-type-parse": "^2.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.6.tgz", - "integrity": "sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.6.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/rest": { - "version": "21.1.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.0.tgz", - "integrity": "sha512-93iLxcKDJboUpmnUyeJ6cRIi7z7cqTZT1K7kRK4LobGxwTwpsa+2tQQbRQNGy7IFDEAmrtkf4F4wBj3D5rVlJQ==", - "license": "MIT", - "dependencies": { - "@octokit/core": "^6.1.3", - "@octokit/plugin-paginate-rest": "^11.4.0", - "@octokit/plugin-request-log": "^5.3.1", - "@octokit/plugin-rest-endpoint-methods": "^13.3.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/types": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.7.0.tgz", - "integrity": "sha512-BXfRP+3P3IN6fd4uF3SniaHKOO4UXWBfkdR3vA8mIvaoO/wLjGN5qivUtW0QRitBHHMcfC41SLhNVYIZZE+wkA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^23.0.1" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", - "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", - "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", - "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", - "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", - "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", - "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", - "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", - "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", - "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", - "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", - "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", - "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", - "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", - "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", - "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", - "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", - "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", - "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", - "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.17.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.12.tgz", - "integrity": "sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", - "license": "MIT" - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz", - "integrity": "sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/typescript-estree": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz", - "integrity": "sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz", - "integrity": "sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==", - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz", - "integrity": "sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==", - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/visitor-keys": "6.18.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz", - "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.18.1", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", - "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", - "license": "ISC", - "peer": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/before-after-hook": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", - "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", - "license": "Apache-2.0" - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bundle-require": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", - "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "load-tsconfig": "^0.2.3" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "esbuild": ">=0.18" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT", - "peer": true - }, - "node_modules/consola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT", - "peer": true - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", - "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/fast-content-type-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", - "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT", - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT", - "peer": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT", - "peer": true - }, - "node_modules/fastq": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", - "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "license": "MIT", - "peer": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "license": "MIT", - "peer": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "license": "ISC", - "peer": true - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC", - "peer": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "peer": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "license": "MIT", - "peer": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "license": "MIT", - "peer": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "peer": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC", - "peer": true - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/js-tiktoken": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.16.tgz", - "integrity": "sha512-nUVdO5k/M9llWpiaZlBBDdtmr6qWXwSD6fgaDu2zM8UP+OXxx9V37lFkI6w0/1IuaDx7WffZ37oYd9KvcWKElg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.5.1" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT", - "peer": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "license": "MIT", - "peer": true - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "peer": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/langchain": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/langchain/-/langchain-0.3.11.tgz", - "integrity": "sha512-PgAG4ZLeuSRkKsyf98cmWGdwKv3I1hOFC8a4fr7e+bm7E+F6Fx6xUkgbuC78ff0N/Cjs5BBryZIFMrqoKPqsvg==", - "license": "MIT", - "dependencies": { - "@langchain/openai": ">=0.1.0 <0.4.0", - "@langchain/textsplitters": ">=0.0.0 <0.2.0", - "js-tiktoken": "^1.0.12", - "js-yaml": "^4.1.0", - "jsonpointer": "^5.0.1", - "langsmith": "^0.2.8", - "openapi-types": "^12.1.3", - "p-retry": "4", - "uuid": "^10.0.0", - "yaml": "^2.2.1", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@langchain/anthropic": "*", - "@langchain/aws": "*", - "@langchain/cerebras": "*", - "@langchain/cohere": "*", - "@langchain/core": ">=0.2.21 <0.4.0", - "@langchain/google-genai": "*", - "@langchain/google-vertexai": "*", - "@langchain/google-vertexai-web": "*", - "@langchain/groq": "*", - "@langchain/mistralai": "*", - "@langchain/ollama": "*", - "axios": "*", - "cheerio": "*", - "handlebars": "^4.7.8", - "peggy": "^3.0.2", - "typeorm": "*" - }, - "peerDependenciesMeta": { - "@langchain/anthropic": { - "optional": true - }, - "@langchain/aws": { - "optional": true - }, - "@langchain/cerebras": { - "optional": true - }, - "@langchain/cohere": { - "optional": true - }, - "@langchain/google-genai": { - "optional": true - }, - "@langchain/google-vertexai": { - "optional": true - }, - "@langchain/google-vertexai-web": { - "optional": true - }, - "@langchain/groq": { - "optional": true - }, - "@langchain/mistralai": { - "optional": true - }, - "@langchain/ollama": { - "optional": true - }, - "axios": { - "optional": true - }, - "cheerio": { - "optional": true - }, - "handlebars": { - "optional": true - }, - "peggy": { - "optional": true - }, - "typeorm": { - "optional": true - } - } - }, - "node_modules/langsmith": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.2.15.tgz", - "integrity": "sha512-homtJU41iitqIZVuuLW7iarCzD4f39KcfP9RTBWav9jifhrsDa1Ez89Ejr+4qi72iuBu8Y5xykchsGVgiEZ93w==", - "license": "MIT", - "dependencies": { - "@types/uuid": "^10.0.0", - "commander": "^10.0.1", - "p-queue": "^6.6.2", - "p-retry": "4", - "semver": "^7.6.3", - "uuid": "^10.0.0" - }, - "peerDependencies": { - "openai": "*" - }, - "peerDependenciesMeta": { - "openai": { - "optional": true - } - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/load-tsconfig": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT", - "peer": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "license": "MIT", - "peer": true, - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT", - "peer": true - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "peer": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openai": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.78.1.tgz", - "integrity": "sha512-drt0lHZBd2lMyORckOXFPQTmnGLWSLt8VK0W9BhOKWpMFBEoHMoz5gxMPmVq5icp+sOrsbMnsmZTVHUlKvD1Ow==", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" - }, - "peerDependencies": { - "zod": "^3.23.8" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.70", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.70.tgz", - "integrity": "sha512-RE+K0+KZoEpDUbGGctnGdkrLFwi1eYKTlIHNl2Um98mUkGsm1u2Ff6Ltd0e8DktTtC98uy7rSj+hO8t/QuLoVQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/openai/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/openapi-types": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", - "license": "MIT" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "license": "MIT", - "peer": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "peer": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.1.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "jiti": ">=1.21.0", - "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/readdirp": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz", - "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", - "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.30.1", - "@rollup/rollup-android-arm64": "4.30.1", - "@rollup/rollup-darwin-arm64": "4.30.1", - "@rollup/rollup-darwin-x64": "4.30.1", - "@rollup/rollup-freebsd-arm64": "4.30.1", - "@rollup/rollup-freebsd-x64": "4.30.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", - "@rollup/rollup-linux-arm-musleabihf": "4.30.1", - "@rollup/rollup-linux-arm64-gnu": "4.30.1", - "@rollup/rollup-linux-arm64-musl": "4.30.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", - "@rollup/rollup-linux-riscv64-gnu": "4.30.1", - "@rollup/rollup-linux-s390x-gnu": "4.30.1", - "@rollup/rollup-linux-x64-gnu": "4.30.1", - "@rollup/rollup-linux-x64-musl": "4.30.1", - "@rollup/rollup-win32-arm64-msvc": "4.30.1", - "@rollup/rollup-win32-ia32-msvc": "4.30.1", - "@rollup/rollup-win32-x64-msvc": "4.30.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/source-map/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/source-map/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT", - "peer": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", - "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", - "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsup": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.3.5.tgz", - "integrity": "sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-require": "^5.0.0", - "cac": "^6.7.14", - "chokidar": "^4.0.1", - "consola": "^3.2.3", - "debug": "^4.3.7", - "esbuild": "^0.24.0", - "joycon": "^3.1.1", - "picocolors": "^1.1.1", - "postcss-load-config": "^6.0.1", - "resolve-from": "^5.0.0", - "rollup": "^4.24.0", - "source-map": "0.8.0-beta.0", - "sucrase": "^3.35.0", - "tinyexec": "^0.3.1", - "tinyglobby": "^0.2.9", - "tree-kill": "^1.2.2" - }, - "bin": { - "tsup": "dist/cli-default.js", - "tsup-node": "dist/cli-node.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@microsoft/api-extractor": "^7.36.0", - "@swc/core": "^1", - "postcss": "^8.4.12", - "typescript": ">=4.5.0" - }, - "peerDependenciesMeta": { - "@microsoft/api-extractor": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "postcss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/tsup/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "license": "MIT" - }, - "node_modules/universal-user-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", - "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", - "license": "ISC" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC", - "peer": true - }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", - "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.1.tgz", - "integrity": "sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } - } - } -} diff --git a/scripts/jsdoc-automation/package.json b/scripts/jsdoc-automation/package.json deleted file mode 100644 index 368dd45fa1e9..000000000000 --- a/scripts/jsdoc-automation/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "module", - "name": "plugin-audix", - "version": "1.0.0", - "description": "", - "main": "dist/index.js", - "module": "dist/index.mjs", - "types": "dist/index.d.ts", - "scripts": { - "build": "tsup", - "dev": "tsup --watch", - "start": "node dist/index.js", - "clean": "rm -rf node_modules dist" - }, - "keywords": [], - "author": "", - "license": "MIT", - "dependencies": { - "@langchain/openai": "^0.3.16", - "@octokit/rest": "^21.0.2", - "@types/node": "^20.11.0", - "@typescript-eslint/parser": "6.18.1", - "@typescript-eslint/types": "6.18.1", - "@typescript-eslint/typescript-estree": "6.18.1", - "dotenv": "^16.4.7", - "langchain": "^0.3.7", - "yaml": "^2.3.4" - }, - "devDependencies": { - "ts-node": "^10.9.2", - "tsup": "^8.3.5", - "typescript": "5.3.3" - } -} diff --git a/scripts/jsdoc-automation/pnpm-lock.yaml b/scripts/jsdoc-automation/pnpm-lock.yaml deleted file mode 100644 index 8a536082b553..000000000000 --- a/scripts/jsdoc-automation/pnpm-lock.yaml +++ /dev/null @@ -1,2609 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@langchain/openai': - specifier: ^0.3.16 - version: 0.3.16(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) - '@octokit/rest': - specifier: ^21.0.2 - version: 21.0.2 - '@types/node': - specifier: ^20.11.0 - version: 20.17.10 - '@typescript-eslint/parser': - specifier: 6.18.1 - version: 6.18.1(eslint@9.17.0)(typescript@5.3.3) - '@typescript-eslint/types': - specifier: 6.18.1 - version: 6.18.1 - '@typescript-eslint/typescript-estree': - specifier: 6.18.1 - version: 6.18.1(typescript@5.3.3) - dotenv: - specifier: ^16.4.7 - version: 16.4.7 - langchain: - specifier: ^0.3.7 - version: 0.3.7(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(openai@4.77.0(zod@3.24.1)) - yaml: - specifier: ^2.3.4 - version: 2.6.1 - devDependencies: - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.17.10)(typescript@5.3.3) - tsup: - specifier: ^8.3.5 - version: 8.3.5(typescript@5.3.3)(yaml@2.6.1) - typescript: - specifier: 5.3.3 - version: 5.3.3 - -packages: - - '@cfworker/json-schema@4.0.3': - resolution: {integrity: sha512-ZykIcDTVv5UNmKWSTLAs3VukO6NDJkkSKxrgUTDPBkAlORVT3H9n5DbRjRl8xIotklscHdbLIa0b9+y3mQq73g==} - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.24.2': - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.24.2': - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.24.2': - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.24.2': - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.24.2': - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.24.2': - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.24.2': - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.24.2': - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.24.2': - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.24.2': - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.24.2': - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.24.2': - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.24.2': - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.24.2': - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.24.2': - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.24.2': - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.24.2': - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.24.2': - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.24.2': - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.24.2': - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.24.2': - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.24.2': - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.24.2': - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.24.2': - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.19.1': - resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.9.1': - resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.17.0': - resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.5': - resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.2.4': - resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} - engines: {node: '>=18.18'} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@langchain/core@0.3.26': - resolution: {integrity: sha512-6RUQHEp8wv+JwtYIIEBYBzbLlcAQZFc7EDOgAM0ukExjh9HiXoJzoWpgMRRCrr/koIbtwXPJUqBprZK1I1CXHQ==} - engines: {node: '>=18'} - - '@langchain/openai@0.3.16': - resolution: {integrity: sha512-Om9HRlTeI0Ou6D4pfxbWHop4WGfkCdV/7v1W/+Jr7NSf0BNoA9jk5GqGms8ZtOYSGgPvizDu3i0TrM3B4cN4NA==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.26 <0.4.0' - - '@langchain/textsplitters@0.1.0': - resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.21 <0.4.0' - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@octokit/auth-token@5.1.1': - resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} - engines: {node: '>= 18'} - - '@octokit/core@6.1.2': - resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==} - engines: {node: '>= 18'} - - '@octokit/endpoint@10.1.1': - resolution: {integrity: sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==} - engines: {node: '>= 18'} - - '@octokit/graphql@8.1.1': - resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==} - engines: {node: '>= 18'} - - '@octokit/openapi-types@22.2.0': - resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} - - '@octokit/plugin-paginate-rest@11.3.6': - resolution: {integrity: sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-request-log@5.3.1': - resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-rest-endpoint-methods@13.2.6': - resolution: {integrity: sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/request-error@6.1.5': - resolution: {integrity: sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==} - engines: {node: '>= 18'} - - '@octokit/request@9.1.3': - resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==} - engines: {node: '>= 18'} - - '@octokit/rest@21.0.2': - resolution: {integrity: sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==} - engines: {node: '>= 18'} - - '@octokit/types@13.6.2': - resolution: {integrity: sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@rollup/rollup-android-arm-eabi@4.29.1': - resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.29.1': - resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.29.1': - resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.29.1': - resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.29.1': - resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.29.1': - resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.29.1': - resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.29.1': - resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.29.1': - resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.29.1': - resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loongarch64-gnu@4.29.1': - resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': - resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.29.1': - resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.29.1': - resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.29.1': - resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.29.1': - resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.29.1': - resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.29.1': - resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.29.1': - resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} - cpu: [x64] - os: [win32] - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - - '@types/node@18.19.68': - resolution: {integrity: sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==} - - '@types/node@20.17.10': - resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} - - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - - '@types/uuid@10.0.0': - resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - - '@typescript-eslint/parser@6.18.1': - resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@6.18.1': - resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/types@6.18.1': - resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/typescript-estree@6.18.1': - resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/visitor-keys@6.18.1': - resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} - engines: {node: ^16.0.0 || >=18.0.0} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - - agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - 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@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - before-after-hook@3.0.2: - resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - consola@3.3.3: - resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} - engines: {node: ^14.18.0 || >=16.10.0} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} - engines: {node: '>=18'} - hasBin: true - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.17.0: - resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - fdir@6.4.2: - resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - - form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} - - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} - - formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - - js-tiktoken@1.0.16: - resolution: {integrity: sha512-nUVdO5k/M9llWpiaZlBBDdtmr6qWXwSD6fgaDu2zM8UP+OXxx9V37lFkI6w0/1IuaDx7WffZ37oYd9KvcWKElg==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - langchain@0.3.7: - resolution: {integrity: sha512-6/Gkk9Zez3HkbsETFxZVo1iKLmaK3OzkDseC5MYFKVmYFDXFAOyJR3srJ9P61xF8heVdsPixqYIsejBn7/9dXg==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/anthropic': '*' - '@langchain/aws': '*' - '@langchain/cohere': '*' - '@langchain/core': '>=0.2.21 <0.4.0' - '@langchain/google-genai': '*' - '@langchain/google-vertexai': '*' - '@langchain/groq': '*' - '@langchain/mistralai': '*' - '@langchain/ollama': '*' - axios: '*' - cheerio: '*' - handlebars: ^4.7.8 - peggy: ^3.0.2 - typeorm: '*' - peerDependenciesMeta: - '@langchain/anthropic': - optional: true - '@langchain/aws': - optional: true - '@langchain/cohere': - optional: true - '@langchain/google-genai': - optional: true - '@langchain/google-vertexai': - optional: true - '@langchain/groq': - optional: true - '@langchain/mistralai': - optional: true - '@langchain/ollama': - optional: true - axios: - optional: true - cheerio: - optional: true - handlebars: - optional: true - peggy: - optional: true - typeorm: - optional: true - - langsmith@0.2.13: - resolution: {integrity: sha512-16EOM5nhU6GlMCKGm5sgBIAKOKzS2d30qcDZmF21kSLZJiUhUNTROwvYdqgZLrGfIIzmSMJHCKA7RFd5qf50uw==} - peerDependencies: - openai: '*' - peerDependenciesMeta: - openai: - optional: true - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - openai@4.77.0: - resolution: {integrity: sha512-WWacavtns/7pCUkOWvQIjyOfcdr9X+9n9Vvb0zFeKVDAqwCMDHB+iSr24SVaBAhplvSG6JrRXFpcNM9gWhOGIw==} - hasBin: true - peerDependencies: - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true - - openapi-types@12.1.3: - resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} - engines: {node: '>= 14.16.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rollup@4.29.1: - resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - 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'} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - - string-width@4.2.3: - 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'} - - strip-ansi@6.0.1: - 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'} - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyglobby@0.2.10: - resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} - engines: {node: '>=12.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - ts-api-utils@1.4.3: - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tsup@8.3.5: - resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - - universal-user-agent@7.0.2: - resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} - engines: {node: '>= 14'} - hasBin: true - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zod-to-json-schema@3.24.1: - resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} - peerDependencies: - zod: ^3.24.1 - - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} - -snapshots: - - '@cfworker/json-schema@4.0.3': {} - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@esbuild/aix-ppc64@0.24.2': - optional: true - - '@esbuild/android-arm64@0.24.2': - optional: true - - '@esbuild/android-arm@0.24.2': - optional: true - - '@esbuild/android-x64@0.24.2': - optional: true - - '@esbuild/darwin-arm64@0.24.2': - optional: true - - '@esbuild/darwin-x64@0.24.2': - optional: true - - '@esbuild/freebsd-arm64@0.24.2': - optional: true - - '@esbuild/freebsd-x64@0.24.2': - optional: true - - '@esbuild/linux-arm64@0.24.2': - optional: true - - '@esbuild/linux-arm@0.24.2': - optional: true - - '@esbuild/linux-ia32@0.24.2': - optional: true - - '@esbuild/linux-loong64@0.24.2': - optional: true - - '@esbuild/linux-mips64el@0.24.2': - optional: true - - '@esbuild/linux-ppc64@0.24.2': - optional: true - - '@esbuild/linux-riscv64@0.24.2': - optional: true - - '@esbuild/linux-s390x@0.24.2': - optional: true - - '@esbuild/linux-x64@0.24.2': - optional: true - - '@esbuild/netbsd-arm64@0.24.2': - optional: true - - '@esbuild/netbsd-x64@0.24.2': - optional: true - - '@esbuild/openbsd-arm64@0.24.2': - optional: true - - '@esbuild/openbsd-x64@0.24.2': - optional: true - - '@esbuild/sunos-x64@0.24.2': - optional: true - - '@esbuild/win32-arm64@0.24.2': - optional: true - - '@esbuild/win32-ia32@0.24.2': - optional: true - - '@esbuild/win32-x64@0.24.2': - optional: true - - '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': - dependencies: - eslint: 9.17.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.19.1': - dependencies: - '@eslint/object-schema': 2.1.5 - debug: 4.4.0 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/core@0.9.1': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.2.0': - dependencies: - ajv: 6.12.6 - debug: 4.4.0 - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.17.0': {} - - '@eslint/object-schema@2.1.5': {} - - '@eslint/plugin-kit@0.2.4': - dependencies: - levn: 0.4.1 - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.1': {} - - '@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 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))': - dependencies: - '@cfworker/json-schema': 4.0.3 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 - js-tiktoken: 1.0.16 - langsmith: 0.2.13(openai@4.77.0(zod@3.24.1)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.24.1 - zod-to-json-schema: 3.24.1(zod@3.24.1) - transitivePeerDependencies: - - openai - - '@langchain/openai@0.3.16(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))': - dependencies: - '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) - js-tiktoken: 1.0.16 - openai: 4.77.0(zod@3.24.1) - zod: 3.24.1 - zod-to-json-schema: 3.24.1(zod@3.24.1) - transitivePeerDependencies: - - encoding - - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))': - dependencies: - '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) - js-tiktoken: 1.0.16 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@octokit/auth-token@5.1.1': {} - - '@octokit/core@6.1.2': - dependencies: - '@octokit/auth-token': 5.1.1 - '@octokit/graphql': 8.1.1 - '@octokit/request': 9.1.3 - '@octokit/request-error': 6.1.5 - '@octokit/types': 13.6.2 - before-after-hook: 3.0.2 - universal-user-agent: 7.0.2 - - '@octokit/endpoint@10.1.1': - dependencies: - '@octokit/types': 13.6.2 - universal-user-agent: 7.0.2 - - '@octokit/graphql@8.1.1': - dependencies: - '@octokit/request': 9.1.3 - '@octokit/types': 13.6.2 - universal-user-agent: 7.0.2 - - '@octokit/openapi-types@22.2.0': {} - - '@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.2)': - dependencies: - '@octokit/core': 6.1.2 - '@octokit/types': 13.6.2 - - '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.2)': - dependencies: - '@octokit/core': 6.1.2 - - '@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.2)': - dependencies: - '@octokit/core': 6.1.2 - '@octokit/types': 13.6.2 - - '@octokit/request-error@6.1.5': - dependencies: - '@octokit/types': 13.6.2 - - '@octokit/request@9.1.3': - dependencies: - '@octokit/endpoint': 10.1.1 - '@octokit/request-error': 6.1.5 - '@octokit/types': 13.6.2 - universal-user-agent: 7.0.2 - - '@octokit/rest@21.0.2': - dependencies: - '@octokit/core': 6.1.2 - '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.2) - '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.2) - '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.2) - - '@octokit/types@13.6.2': - dependencies: - '@octokit/openapi-types': 22.2.0 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@rollup/rollup-android-arm-eabi@4.29.1': - optional: true - - '@rollup/rollup-android-arm64@4.29.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.29.1': - optional: true - - '@rollup/rollup-darwin-x64@4.29.1': - optional: true - - '@rollup/rollup-freebsd-arm64@4.29.1': - optional: true - - '@rollup/rollup-freebsd-x64@4.29.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.29.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.29.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.29.1': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.29.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.29.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.29.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.29.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.29.1': - optional: true - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@types/estree@1.0.6': {} - - '@types/json-schema@7.0.15': {} - - '@types/node-fetch@2.6.12': - dependencies: - '@types/node': 20.17.10 - form-data: 4.0.1 - - '@types/node@18.19.68': - dependencies: - undici-types: 5.26.5 - - '@types/node@20.17.10': - dependencies: - undici-types: 6.19.8 - - '@types/retry@0.12.0': {} - - '@types/uuid@10.0.0': {} - - '@typescript-eslint/parser@6.18.1(eslint@9.17.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.18.1 - debug: 4.4.0 - eslint: 9.17.0 - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@6.18.1': - dependencies: - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/visitor-keys': 6.18.1 - - '@typescript-eslint/types@6.18.1': {} - - '@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3)': - dependencies: - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/visitor-keys': 6.18.1 - debug: 4.4.0 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@6.18.1': - dependencies: - '@typescript-eslint/types': 6.18.1 - eslint-visitor-keys: 3.4.3 - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - acorn-jsx@5.3.2(acorn@8.14.0): - dependencies: - acorn: 8.14.0 - - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.0 - - acorn@8.14.0: {} - - agentkeepalive@4.5.0: - dependencies: - humanize-ms: 1.2.1 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - arg@4.1.3: {} - - argparse@2.0.1: {} - - array-union@2.1.0: {} - - asynckit@0.4.0: {} - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - before-after-hook@3.0.2: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - bundle-require@5.1.0(esbuild@0.24.2): - dependencies: - esbuild: 0.24.2 - load-tsconfig: 0.2.5 - - cac@6.7.14: {} - - callsites@3.1.0: {} - - camelcase@6.3.0: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chokidar@4.0.3: - dependencies: - readdirp: 4.0.2 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@10.0.1: {} - - commander@4.1.1: {} - - concat-map@0.0.1: {} - - consola@3.3.3: {} - - create-require@1.1.1: {} - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - debug@4.4.0: - dependencies: - ms: 2.1.3 - - decamelize@1.2.0: {} - - deep-is@0.1.4: {} - - delayed-stream@1.0.0: {} - - diff@4.0.2: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dotenv@16.4.7: {} - - eastasianwidth@0.2.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - esbuild@0.24.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.24.2 - '@esbuild/android-arm': 0.24.2 - '@esbuild/android-arm64': 0.24.2 - '@esbuild/android-x64': 0.24.2 - '@esbuild/darwin-arm64': 0.24.2 - '@esbuild/darwin-x64': 0.24.2 - '@esbuild/freebsd-arm64': 0.24.2 - '@esbuild/freebsd-x64': 0.24.2 - '@esbuild/linux-arm': 0.24.2 - '@esbuild/linux-arm64': 0.24.2 - '@esbuild/linux-ia32': 0.24.2 - '@esbuild/linux-loong64': 0.24.2 - '@esbuild/linux-mips64el': 0.24.2 - '@esbuild/linux-ppc64': 0.24.2 - '@esbuild/linux-riscv64': 0.24.2 - '@esbuild/linux-s390x': 0.24.2 - '@esbuild/linux-x64': 0.24.2 - '@esbuild/netbsd-arm64': 0.24.2 - '@esbuild/netbsd-x64': 0.24.2 - '@esbuild/openbsd-arm64': 0.24.2 - '@esbuild/openbsd-x64': 0.24.2 - '@esbuild/sunos-x64': 0.24.2 - '@esbuild/win32-arm64': 0.24.2 - '@esbuild/win32-ia32': 0.24.2 - '@esbuild/win32-x64': 0.24.2 - - escape-string-regexp@4.0.0: {} - - eslint-scope@8.2.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.0: {} - - eslint@9.17.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.1 - '@eslint/core': 0.9.1 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.17.0 - '@eslint/plugin-kit': 0.2.4 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0 - escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - transitivePeerDependencies: - - supports-color - - espree@10.3.0: - dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 4.2.0 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - event-target-shim@5.0.1: {} - - eventemitter3@4.0.7: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - fdir@6.4.2(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.2 - keyv: 4.5.4 - - flatted@3.3.2: {} - - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data-encoder@1.7.2: {} - - form-data@4.0.1: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - formdata-node@4.4.1: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.3 - - fsevents@2.3.3: - optional: true - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - globals@14.0.0: {} - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - - has-flag@4.0.0: {} - - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - - ignore@5.3.2: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - isexe@2.0.0: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - joycon@3.1.1: {} - - js-tiktoken@1.0.16: - dependencies: - base64-js: 1.5.1 - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - json-buffer@3.0.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - jsonpointer@5.0.1: {} - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - langchain@0.3.7(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1)))(openai@4.77.0(zod@3.24.1)): - dependencies: - '@langchain/core': 0.3.26(openai@4.77.0(zod@3.24.1)) - '@langchain/openai': 0.3.16(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.26(openai@4.77.0(zod@3.24.1))) - js-tiktoken: 1.0.16 - js-yaml: 4.1.0 - jsonpointer: 5.0.1 - langsmith: 0.2.13(openai@4.77.0(zod@3.24.1)) - openapi-types: 12.1.3 - p-retry: 4.6.2 - uuid: 10.0.0 - yaml: 2.6.1 - zod: 3.24.1 - zod-to-json-schema: 3.24.1(zod@3.24.1) - transitivePeerDependencies: - - encoding - - openai - - langsmith@0.2.13(openai@4.77.0(zod@3.24.1)): - dependencies: - '@types/uuid': 10.0.0 - commander: 10.0.1 - p-queue: 6.6.2 - p-retry: 4.6.2 - semver: 7.6.3 - uuid: 10.0.0 - optionalDependencies: - openai: 4.77.0(zod@3.24.1) - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - load-tsconfig@0.2.5: {} - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - lodash.sortby@4.7.0: {} - - lru-cache@10.4.3: {} - - make-error@1.3.6: {} - - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minipass@7.1.2: {} - - ms@2.1.3: {} - - mustache@4.2.0: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - natural-compare@1.4.0: {} - - node-domexception@1.0.0: {} - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - object-assign@4.1.1: {} - - openai@4.77.0(zod@3.24.1): - dependencies: - '@types/node': 18.19.68 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.5.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - optionalDependencies: - zod: 3.24.1 - transitivePeerDependencies: - - encoding - - openapi-types@12.1.3: {} - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - p-finally@1.0.0: {} - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-queue@6.6.2: - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - - p-retry@4.6.2: - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - - p-timeout@3.2.0: - dependencies: - p-finally: 1.0.0 - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - - path-key@3.1.1: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-type@4.0.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.2: {} - - pirates@4.0.6: {} - - postcss-load-config@6.0.1(yaml@2.6.1): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - yaml: 2.6.1 - - prelude-ls@1.2.1: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - readdirp@4.0.2: {} - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} - - retry@0.13.1: {} - - reusify@1.0.4: {} - - rollup@4.29.1: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.29.1 - '@rollup/rollup-android-arm64': 4.29.1 - '@rollup/rollup-darwin-arm64': 4.29.1 - '@rollup/rollup-darwin-x64': 4.29.1 - '@rollup/rollup-freebsd-arm64': 4.29.1 - '@rollup/rollup-freebsd-x64': 4.29.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 - '@rollup/rollup-linux-arm-musleabihf': 4.29.1 - '@rollup/rollup-linux-arm64-gnu': 4.29.1 - '@rollup/rollup-linux-arm64-musl': 4.29.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 - '@rollup/rollup-linux-riscv64-gnu': 4.29.1 - '@rollup/rollup-linux-s390x-gnu': 4.29.1 - '@rollup/rollup-linux-x64-gnu': 4.29.1 - '@rollup/rollup-linux-x64-musl': 4.29.1 - '@rollup/rollup-win32-arm64-msvc': 4.29.1 - '@rollup/rollup-win32-ia32-msvc': 4.29.1 - '@rollup/rollup-win32-x64-msvc': 4.29.1 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - semver@7.6.3: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - signal-exit@4.1.0: {} - - slash@3.0.0: {} - - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - 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 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - - strip-json-comments@3.1.1: {} - - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - tinyexec@0.3.2: {} - - tinyglobby@0.2.10: - dependencies: - fdir: 6.4.2(picomatch@4.0.2) - picomatch: 4.0.2 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - tr46@0.0.3: {} - - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - - tree-kill@1.2.2: {} - - ts-api-utils@1.4.3(typescript@5.3.3): - dependencies: - typescript: 5.3.3 - - ts-interface-checker@0.1.13: {} - - ts-node@10.9.2(@types/node@20.17.10)(typescript@5.3.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.17.10 - acorn: 8.14.0 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.3.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - tsup@8.3.5(typescript@5.3.3)(yaml@2.6.1): - dependencies: - bundle-require: 5.1.0(esbuild@0.24.2) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.3.3 - debug: 4.4.0 - esbuild: 0.24.2 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(yaml@2.6.1) - resolve-from: 5.0.0 - rollup: 4.29.1 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.10 - tree-kill: 1.2.2 - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - typescript@5.3.3: {} - - undici-types@5.26.5: {} - - undici-types@6.19.8: {} - - universal-user-agent@7.0.2: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - uuid@10.0.0: {} - - v8-compile-cache-lib@3.0.1: {} - - web-streams-polyfill@4.0.0-beta.3: {} - - webidl-conversions@3.0.1: {} - - webidl-conversions@4.0.2: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - word-wrap@1.2.5: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - 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 - - yaml@2.6.1: {} - - yn@3.1.1: {} - - yocto-queue@0.1.0: {} - - zod-to-json-schema@3.24.1(zod@3.24.1): - dependencies: - zod: 3.24.1 - - zod@3.24.1: {} diff --git a/scripts/jsdoc-automation/pnpm-workspace.yaml b/scripts/jsdoc-automation/pnpm-workspace.yaml deleted file mode 100644 index 6de82aeecf52..000000000000 --- a/scripts/jsdoc-automation/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - "packages/*" diff --git a/scripts/jsdoc-automation/src/AIService/AIService.ts b/scripts/jsdoc-automation/src/AIService/AIService.ts deleted file mode 100644 index 22628bc8e2b8..000000000000 --- a/scripts/jsdoc-automation/src/AIService/AIService.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { ChatOpenAI } from "@langchain/openai"; -import dotenv from "dotenv"; -import type { Configuration } from "../Configuration.js"; -import { TypeScriptParser } from "../TypeScriptParser.js"; -import { CodeFormatter } from "./utils/CodeFormatter.js"; -import { DocumentOrganizer } from "./utils/DocumentOrganizer.js"; - -dotenv.config(); - -/** - * Service for interacting with OpenAI chat API. - */ -export class AIService { - private chatModel: ChatOpenAI; - private codeFormatter: CodeFormatter; - private chatModelFAQ: ChatOpenAI; - - /** - * Constructor for initializing the ChatOpenAI instance. - * - * @param {Configuration} configuration - The configuration instance to be used - * @throws {Error} If OPENAI_API_KEY environment variable is not set - */ - constructor(private configuration: Configuration) { - if (!process.env.OPENAI_API_KEY) { - throw new Error("OPENAI_API_KEY is not set"); - } - this.chatModel = new ChatOpenAI({ apiKey: process.env.OPENAI_API_KEY }); - this.chatModelFAQ = new ChatOpenAI({ - apiKey: process.env.OPENAI_API_KEY, - model: "gpt-4o", - }); - this.codeFormatter = new CodeFormatter(); - } - - - /** - * Generates a comment based on the specified prompt by invoking the chat model. - * @param {string} prompt - The prompt for which to generate a comment - * @returns {Promise} The generated comment - */ - public async generateComment(prompt: string, isFAQ = false): Promise { - try { - // First try with generous limit - let finalPrompt = prompt; - if (!isFAQ) { - finalPrompt = this.codeFormatter.truncateCodeBlock(prompt, 8000); - } - - console.log( - `Generating comment for prompt of length: ${finalPrompt.length}` - ); - - try { - let response; - if (isFAQ) { - response = await this.chatModelFAQ.invoke(finalPrompt); - } else { - response = await this.chatModel.invoke(finalPrompt); - } - return response.content as string; - } catch (error) { - if ( - error instanceof Error && - error.message.includes("maximum context length") - ) { - console.warn( - "Token limit exceeded, attempting with further truncation..." - ); - // Try with more aggressive truncation - finalPrompt = this.codeFormatter.truncateCodeBlock(prompt, 4000); - try { - const response = - await this.chatModel.invoke(finalPrompt); - return response.content as string; - } catch (retryError) { - if ( - retryError instanceof Error && - retryError.message.includes( - "maximum context length" - ) - ) { - console.warn( - "Still exceeding token limit, using minimal context..." - ); - // Final attempt with minimal context - finalPrompt = this.codeFormatter.truncateCodeBlock(prompt, 2000); - const response = - await this.chatModel.invoke(finalPrompt); - return response.content as string; - } - throw retryError; - } - } - throw error; - } - } catch (error) { - this.handleAPIError(error as Error); - return ""; - } - } - - /** - * Handle API errors by logging the error message and throwing the error. - * - * - * @param {Error} error The error object to handle - * @returns {void} - */ - public handleAPIError(error: Error): void { - console.error("API Error:", error.message); - throw error; - } -} diff --git a/scripts/jsdoc-automation/src/AIService/generators/FullDocumentationGenerator.ts b/scripts/jsdoc-automation/src/AIService/generators/FullDocumentationGenerator.ts deleted file mode 100644 index 7f6675b44206..000000000000 --- a/scripts/jsdoc-automation/src/AIService/generators/FullDocumentationGenerator.ts +++ /dev/null @@ -1,520 +0,0 @@ -import type { ASTQueueItem, EnvUsage, PluginDocumentation, TodoItem, TodoSection } from "../../types"; -import type { Configuration } from "../../Configuration.js"; -import { TypeScriptParser } from "../../TypeScriptParser.js"; -import { CodeFormatter } from "../utils/CodeFormatter.js"; -import { DocumentOrganizer } from "../utils/DocumentOrganizer.js"; -import path from "path"; -import { PROMPT_TEMPLATES } from "../../utils/prompts"; -import type { FileDocsGroup, OrganizedDocs } from "../types"; -import { AIService } from "../AIService.js"; -import { promises as fs } from "fs"; - -interface FAQ { - question: string; - answer: string; -} - -interface TroubleshootingIssue { - issue: string; - cause: string; - solution: string; -} - -interface Troubleshooting { - commonIssues: TroubleshootingIssue[]; - debuggingTips: string[]; -} - -export class FullDocumentationGenerator { - private typeScriptParser: TypeScriptParser; - private codeFormatter: CodeFormatter; - private documentOrganizer: DocumentOrganizer; - private aiService: AIService; - - /** - * Constructor for initializing the ChatOpenAI instance. - * - * @param {Configuration} configuration - The configuration instance to be used - * @throws {Error} If OPENAI_API_KEY environment variable is not set - */ - constructor(private configuration: Configuration) { - this.typeScriptParser = new TypeScriptParser(); - this.codeFormatter = new CodeFormatter(); - this.documentOrganizer = new DocumentOrganizer(); - this.aiService = new AIService(configuration); - } - - public async generatePluginDocumentation({ - existingDocs, - packageJson, - todoItems, - envUsages, - }: { - existingDocs: ASTQueueItem[]; - packageJson: any; - todoItems: TodoItem[]; - envUsages: EnvUsage[]; - }): Promise { - const organizedDocs = this.documentOrganizer.organizeDocumentation(existingDocs); - const organizedDocsPath = path.join(this.configuration.absolutePath, "organizedDocs.json"); - await fs.writeFile(organizedDocsPath, JSON.stringify(organizedDocs, null, 2)); - - const indexPath = path.join( - this.configuration.absolutePath, - "src", - "index.ts" - ); - const exports = this.typeScriptParser.extractExports(indexPath); - - const actionsDocumentation = await this.generateActionsDocumentation( - exports.actions - ); - const providersDocumentation = await this.generateProvidersDocumentation(exports.providers); - const evaluatorsDocumentation = await this.generateEvaluatorsDocumentation(exports.evaluators); - - // Generate overview, FAQ, and troubleshooting together - const overviewResponse = await this.generateOverview(organizedDocs, packageJson); - const parsedOverview = JSON.parse(overviewResponse); - - const [ - installation, - configuration, - usage, - apiRef, - todoSection, - ] = await Promise.all([ - this.generateInstallation(packageJson), - this.generateConfiguration(envUsages), - this.generateUsage(organizedDocs, packageJson), - this.generateApiReference(organizedDocs), - this.generateTodoSection(todoItems), - ]); - - // Format the FAQ and troubleshooting sections - const formattedFAQ = this.formatFAQSection(parsedOverview.faq); - const formattedTroubleshooting = this.formatTroubleshootingSection(parsedOverview.troubleshooting); - - return { - overview: this.formatOverviewSection(parsedOverview.overview), - installation, - configuration, - usage, - apiReference: apiRef, - troubleshooting: formattedTroubleshooting, - faq: formattedFAQ, - todos: todoSection.todos, - actionsDocumentation, - providersDocumentation, - evaluatorsDocumentation, - }; - } - - private formatOverviewSection(overview: any): string { - return `### Purpose\n${overview.purpose}\n\n### Key Features\n${overview.keyFeatures}`; - } - - private formatFAQSection(faq: FAQ[]): string { - if (!Array.isArray(faq)) { - console.warn('FAQ data is not an array, returning empty string'); - return ''; - } - - return faq - .filter(item => item.question && item.answer) // Filter out invalid items - .map(item => `### Q: ${item.question}\n${item.answer}`) - .join('\n\n'); - } - - private formatTroubleshootingSection(troubleshooting: Troubleshooting): string { - if (!troubleshooting?.commonIssues || !troubleshooting?.debuggingTips) { - console.warn('Troubleshooting data is missing required fields, returning empty string'); - return ''; - } - const issues = troubleshooting.commonIssues - .filter((issue: { issue: string; cause: string; solution: string }) => issue.issue && issue.cause && issue.solution) - .map((issue: { issue: string; cause: string; solution: string }) => `### ${issue.issue}\n- Cause: ${issue.cause}\n- Solution: ${issue.solution}`) - .join('\n\n'); - - const tips = troubleshooting.debuggingTips.length > 0 - ? `### Debugging Tips\n${troubleshooting.debuggingTips.map(tip => `- ${tip}`).join('\n')}` - : ''; - - return issues + (tips ? `\n\n${tips}` : ''); - } - - private async generateOverview( - docs: OrganizedDocs, - packageJson: any - ): Promise { - const prompt = PROMPT_TEMPLATES.overview(packageJson, docs); - try { - const overview = await this.aiService.generateComment(prompt, true); - return this.cleanJSONResponse(overview); - } catch (error) { - console.error("Error generating overview:", error); - return `# ${packageJson.name}\n\nNo overview available. Please check package documentation.`; - } - } - - private cleanJSONResponse(response: string): string { - // Remove markdown code block syntax if present - return response - .replace(/^```json\n/, '') // Remove opening ```json - .replace(/\n```$/, '') // Remove closing ``` - .trim(); // Remove any extra whitespace - } - - private async generateInstallation(packageJson: any): Promise { - const indexPath = path.join( - this.configuration.absolutePath, - "src/index.ts" - ); - const mainExport = "plugin"; - let exportName = packageJson.name.split("/").pop() + "Plugin"; - - try { - const indexContent = await fs.readFile(indexPath, { - encoding: "utf8", - }); - const exportMatch = indexContent.match(/export const (\w+):/); - if (exportMatch) { - exportName = exportMatch[1]; - } - - const prompt = `Generate installation and integration instructions for this ElizaOS plugin: - - Plugin name: ${packageJson.name} - Main export: ${exportName} - Index file exports: - ${indexContent} - Dependencies: ${JSON.stringify(packageJson.dependencies || {}, null, 2)} - Peer dependencies: ${JSON.stringify(packageJson.peerDependencies || {}, null, 2)} - - This is a plugin for the ElizaOS agent system. Generate comprehensive installation instructions that include: - - 1. How to add the plugin to your ElizaOS project: - - First, explain that users need to add the following to their agent/package.json dependencies: - \`\`\`json - { - "dependencies": { - "${packageJson.name}": "workspace:*" - } - } - \`\`\` - - Then, explain they need to: - 1. cd into the agent/ directory - 2. Run pnpm install to install the new dependency - 3. Run pnpm build to build the project with the new plugin - - 2. After installation, show how to import and use the plugin: - - Import syntax using: import { ${exportName} } from "${packageJson.name}"; - - How to add it to the AgentRuntime plugins array - - 3. Integration example showing the complete setup: - \`\`\`typescript - import { ${exportName} } from "${packageJson.name}"; - - return new AgentRuntime({ - // other configuration... - plugins: [ - ${exportName}, - // other plugins... - ], - }); - \`\`\` - - 4. Verification steps to ensure successful integration - - for this step just tell the user to ensure they see ["✓ Registering action: "] in the console - - Format the response in markdown, with clear section headers and step-by-step instructions. Emphasize that this is a workspace package that needs to be added to agent/package.json and then built.`; - - return await this.aiService.generateComment(prompt); - } catch (error) { - console.error("Error reading index.ts:", error); - return this.generateBasicInstallPrompt(packageJson); - } - } - - private async generateBasicInstallPrompt( - packageJson: any - ): Promise { - console.log( - "AIService::generateInstallation threw an error, generating basic install prompt" - ); - const prompt = `Generate basic installation instructions for this ElizaOS plugin: - - Plugin name: ${packageJson.name} - Dependencies: ${JSON.stringify(packageJson.dependencies || {}, null, 2)} - Peer dependencies: ${JSON.stringify(packageJson.peerDependencies || {}, null, 2)} - - This is a plugin for the ElizaOS agent system. Include basic setup instructions.`; - - return await this.aiService.generateComment(prompt); - } - - private async generateConfiguration( - envUsages: EnvUsage[] - ): Promise { - const prompt = `Generate configuration documentation based on these environment variable usages: - ${envUsages - .map( - (item) => ` - Environment Variable: ${item.code} - Full Context: ${item.fullContext} - ` - ) - .join("\n")} - Create comprehensive configuration documentation that: - 1. Lists all required environment variables and their purpose - 2. Return a full .env example file - - Inform the user that the configuration is done in the .env file. - And to ensure the .env is set in the .gitignore file so it is not committed to the repository. - - Format the response in markdown with proper headings and code blocks.`; - - return await this.aiService.generateComment(prompt); - } - - private async generateUsage( - docs: OrganizedDocs, - packageJson: any - ): Promise { - const fileGroups = this.documentOrganizer.groupDocsByFile(docs); - // write fileGroups to a json file - const fileGroupsPath = path.join(this.configuration.absolutePath, "fileGroups.json"); - await fs.writeFile(fileGroupsPath, JSON.stringify(fileGroups, null, 2)); - const sections: string[] = []; - - // Generate documentation for each file without individual intros - for (const fileGroup of fileGroups) { - const fileDoc = await this.generateFileUsageDoc(fileGroup); - if (fileDoc.trim()) { - sections.push(fileDoc); - } - } - - return sections.join("\n\n"); - } - - private async generateApiReference(docs: OrganizedDocs): Promise { - const fileGroups = this.documentOrganizer.groupDocsByFile(docs); - const sections: string[] = []; - - for (const fileGroup of fileGroups) { - const fileDoc = await this.generateFileApiDoc(fileGroup); - if (fileDoc.trim()) { - sections.push(fileDoc); - } - } - - return sections.join("\n"); - } - - /** - * Generates troubleshooting guide based on documentation and common patterns - */ - // toDo - integrate w/ @Jin's discord scraper to pull solutions for known issues - private async generateTroubleshooting( - docs: OrganizedDocs, - packageJson: any - ): Promise { - const prompt = `${PROMPT_TEMPLATES.troubleshooting}\n\nFor package: ${packageJson.name}\n\nWith content:\n${JSON.stringify(docs, null, 2)}`; - return await this.aiService.generateComment(prompt); - } - - private async generateFileUsageDoc( - fileGroup: FileDocsGroup - ): Promise { - const filePath = this.codeFormatter.formatFilePath(fileGroup.filePath); - const prompt = `${PROMPT_TEMPLATES.fileUsageDoc}\n\nFor file: ${filePath}\n\nWith components:\n${this.codeFormatter.formatComponents(fileGroup)}`; - const doc = await this.aiService.generateComment(prompt); - return `### ${filePath}\n\n${doc}`; - } - - private async generateFileApiDoc( - fileGroup: FileDocsGroup - ): Promise { - const filePath = this.codeFormatter.formatFilePath(fileGroup.filePath); - const formattedDocs = this.codeFormatter.formatApiComponents(fileGroup); - // Add TypeScript code block for the file path to indicate it's a TypeScript module - return formattedDocs - ? `### File: \`${filePath}\`\n${formattedDocs}` - : ""; - } - - private async generateProviderDoc(provider: any): Promise { - const prompt = `${PROMPT_TEMPLATES.providerDoc}\n\nWith content:\n${JSON.stringify(provider, null, 2)}`; - return await this.aiService.generateComment(prompt); - } - - /** - * Generates TODO section documentation from found TODO comments - */ - // toDo - integrate w/ @Jin's discord scraper to auto create GH issues/bounties - private async generateTodoSection( - todoItems: TodoItem[] - ): Promise { - if (todoItems.length === 0) { - return { todos: "No TODO items found.", todoCount: 0 }; - } - - const prompt = `${PROMPT_TEMPLATES.todos}\n\nWith items:\n${todoItems - .map( - (item) => - `- Comment: ${item.comment}\n Context: ${item.fullContext}` - ) - .join("\n")}`; - - const todos = await this.aiService.generateComment(prompt); - return { todos, todoCount: todoItems.length }; - } - - private resolveTypeScriptFilePath(file: string): string { - // Remove leading ./ if present - const relativePath = file.replace(/^\.\//, ""); - - // Ensure the path has .ts extension - const pathWithExtension = this.codeFormatter.ensureTypeScriptExtension(relativePath); - - // Join with the absolute path and src directory - return path.join( - this.configuration.absolutePath, - "src", - pathWithExtension - ); - } - - /////////////////////////////// - /// Eliza Specific Constructs// - /////////////////////////////// - - private async generateActionsDocumentation( - actionsFiles: string[] - ): Promise { - let documentation = ""; - - for (const file of actionsFiles) { - // Remove ./ prefix and ensure path includes src directory and .ts extension - const filePath = this.resolveTypeScriptFilePath(file); - - try { - const ast = this.typeScriptParser.parse(filePath); - const bounds = this.typeScriptParser.findActionBounds(ast); - - if (!bounds) { - console.warn(`No action bounds found in ${filePath}`); - continue; - } - - const actionCode = this.typeScriptParser.extractActionCode( - filePath, - bounds - ); - - // Use PROMPT_TEMPLATES.actionDoc - const prompt = `${PROMPT_TEMPLATES.actionDoc}\n\nWith content:\n\`\`\`typescript\n${actionCode}\n\`\`\``; - - const actionDocumentation = await this.aiService.generateComment(prompt); - if (actionDocumentation.trim()) { - documentation += actionDocumentation + "\n\n"; - } - } catch (error) { - console.warn( - `Warning: Could not process action file ${filePath}:`, - error - ); - continue; - } - } - - if (!documentation.trim()) { - return "No actions documentation available."; - } - - return documentation; - } - - private async generateProvidersDocumentation( - providersFiles: string[] - ): Promise { - let documentation = ""; - - for (const file of providersFiles) { - // Remove ./ prefix and ensure path includes src directory and .ts extension - const relativePath = file.replace(/^\.\//, ""); - const filePath = this.resolveTypeScriptFilePath(file); - - try { - const content = await fs.readFile(filePath, "utf-8"); - // Create a provider object with relevant information - const provider = { - fileName: relativePath, - content: content, - // Extract provider properties - name: relativePath.split("/").pop()?.replace(".ts", ""), - }; - - const providerDocumentation = - await this.generateProviderDoc(provider); - if (providerDocumentation.trim()) { - documentation += providerDocumentation + "\n\n"; - } - } catch (error) { - console.warn( - `Warning: Could not read provider file ${filePath}:`, - error - ); - continue; - } - } - - if (!documentation.trim()) { - return "No providers documentation available."; - } - - return documentation; - } - - private async generateEvaluatorsDocumentation( - evaluatorsFiles: string[] - ): Promise { - let documentation = ""; - - for (const file of evaluatorsFiles) { - // Remove ./ prefix and ensure path includes src directory and .ts extension - const relativePath = file.replace(/^\.\//, ""); - const filePath = this.resolveTypeScriptFilePath(file); - - try { - const content = await fs.readFile(filePath, "utf-8"); - const prompt = `Generate documentation for the following Evaluator: - \`\`\`typescript - ${content} - \`\`\` - - Provide an overview of the evaluator's purpose and functionality. - - Format in markdown without adding any additional headers.`; - - const evaluatorDocumentation = - await this.aiService.generateComment(prompt); - if (evaluatorDocumentation.trim()) { - documentation += `### ${relativePath}\n\n${evaluatorDocumentation}\n\n`; - } - } catch (error) { - console.warn( - `Warning: Could not read evaluator file ${filePath}:`, - error - ); - continue; - } - } - - if (!documentation.trim()) { - return "No evaluators documentation available."; - } - - return documentation; - } -} \ No newline at end of file diff --git a/scripts/jsdoc-automation/src/AIService/index.ts b/scripts/jsdoc-automation/src/AIService/index.ts deleted file mode 100644 index bd9948075a47..000000000000 --- a/scripts/jsdoc-automation/src/AIService/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './AIService.js'; -export * from './types'; \ No newline at end of file diff --git a/scripts/jsdoc-automation/src/AIService/types/index.ts b/scripts/jsdoc-automation/src/AIService/types/index.ts deleted file mode 100644 index 7d830904c0d9..000000000000 --- a/scripts/jsdoc-automation/src/AIService/types/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { ASTQueueItem } from "../../types"; - -export interface FileDocsGroup { - filePath: string; - classes: ASTQueueItem[]; - methods: ASTQueueItem[]; - interfaces: ASTQueueItem[]; - types: ASTQueueItem[]; - functions: ASTQueueItem[]; -} - -export interface OrganizedDocs { - classes: ASTQueueItem[]; - methods: ASTQueueItem[]; - interfaces: ASTQueueItem[]; - types: ASTQueueItem[]; - functions: ASTQueueItem[]; - variables: ASTQueueItem[]; -} diff --git a/scripts/jsdoc-automation/src/AIService/utils/CodeFormatter.ts b/scripts/jsdoc-automation/src/AIService/utils/CodeFormatter.ts deleted file mode 100644 index 2d1fa1febe66..000000000000 --- a/scripts/jsdoc-automation/src/AIService/utils/CodeFormatter.ts +++ /dev/null @@ -1,234 +0,0 @@ -import type { FileDocsGroup } from "../types"; - -export class CodeFormatter { - - public ensureTypeScriptExtension(filePath: string): string { - // If the path already ends with .ts, return it as is - if (filePath.endsWith('.ts')) { - return filePath; - } - // Otherwise, append .ts - return `${filePath}.ts`; - } - - public formatApiComponents(fileGroup: FileDocsGroup): string { - const sections: string[] = []; - - // Classes - if (fileGroup.classes.length > 0) { - sections.push("#### Classes"); - fileGroup.classes.forEach((c) => { - sections.push(`##### \`${c.name}\``); - if (c.jsDoc) sections.push(this.formatJSDoc(c.jsDoc, c.code)); - - // Add any methods belonging to this class - const classMethods = fileGroup.methods.filter( - (m) => m.className === c.name - ); - if (classMethods.length > 0) { - sections.push("**Methods:**"); - classMethods.forEach((m) => { - sections.push( - `###### \`${m.name}\`${m.jsDoc ? `\n${this.formatJSDoc(m.jsDoc, m.code)}` : ""}` - ); - }); - } - }); - } - - // Interfaces - if (fileGroup.interfaces.length > 0) { - sections.push("#### Interfaces"); - fileGroup.interfaces.forEach((i) => { - sections.push(`##### \`${i.name}\``); - if (i.jsDoc) sections.push(this.formatJSDoc(i.jsDoc, i.code)); - }); - } - - // Types - if (fileGroup.types.length > 0) { - sections.push("#### Types"); - fileGroup.types.forEach((t) => { - sections.push(`##### \`${t.name}\``); - if (t.jsDoc) sections.push(this.formatJSDoc(t.jsDoc, t.code)); - }); - } - - // Standalone Functions - if (fileGroup.functions.length > 0) { - sections.push("#### Functions"); - fileGroup.functions.forEach((f) => { - sections.push(`##### \`${f.name}\``); - if (f.jsDoc) sections.push(this.formatJSDoc(f.jsDoc, f.code)); - }); - } - - // Standalone Methods - const standaloneMethods = fileGroup.methods.filter((m) => !m.className); - if (standaloneMethods.length > 0) { - sections.push("#### Methods"); - standaloneMethods.forEach((m) => { - sections.push(`##### \`${m.name}\``); - if (m.jsDoc) sections.push(this.formatJSDoc(m.jsDoc, m.code)); - }); - } - - return sections.join("\n\n"); - } - - public formatComponents(fileGroup: FileDocsGroup): string { - const sections: string[] = []; - - if (fileGroup.classes.length > 0) { - sections.push( - "Classes:", - fileGroup.classes - .map((c) => `- ${c.name}: ${c.jsDoc}`) - .join("\n") - ); - } - - if (fileGroup.methods.length > 0) { - sections.push( - "Methods:", - fileGroup.methods - .map((m) => `- ${m.name}: ${m.jsDoc}`) - .join("\n") - ); - } - - if (fileGroup.interfaces.length > 0) { - sections.push( - "Interfaces:", - fileGroup.interfaces - .map((i) => `- ${i.name}: ${i.jsDoc}`) - .join("\n") - ); - } - - if (fileGroup.types.length > 0) { - sections.push( - "Types:", - fileGroup.types.map((t) => `- ${t.name}: ${t.jsDoc}`).join("\n") - ); - } - - if (fileGroup.functions.length > 0) { - sections.push( - "Functions:", - fileGroup.functions - .map((f) => `- ${f.name}: ${f.jsDoc}`) - .join("\n") - ); - } - - return sections.join("\n\n"); - } - - - public formatFilePath(filePath: string): string { - // Get relative path from src directory - const srcIndex = filePath.indexOf("/src/"); - if (srcIndex === -1) return filePath; - - const relativePath = filePath.slice(srcIndex + 5); // +5 to skip '/src/' - return relativePath; - } - - public formatJSDoc(jsDoc: string, code?: string): string { - // Clean up the JSDoc - let cleanDoc = jsDoc - .replace(/^```\s*\n?/gm, "") - .replace(/\n?```\s*$/gm, ""); - cleanDoc = cleanDoc.trim().replace(/\n{3,}/g, "\n\n"); - - // Format JSDoc with typescript declaration - const docSection = "```typescript\n" + cleanDoc + "\n```"; - - // If we have the actual code, include it after the JSDoc - // if (code) { - // const cleanCode = code.trim().replace(/^```\s*\n?/gm, '').replace(/\n?```\s*$/gm, ''); - // return `${docSection}\n\n**Implementation:**\n\n\`\`\`typescript\n${cleanCode}\n\`\`\``; - // } - - return docSection; - } - - public truncateCodeBlock(code: string, maxLength = 8000): string { - if (code.length <= maxLength) return code; - - // Extract code blocks - const codeBlockRegex = /```[\s\S]*?```/g; - const codeBlocks = code.match(codeBlockRegex) || []; - - // If no code blocks found, truncate the text directly - if (codeBlocks.length === 0) { - return code.slice(0, maxLength) + "... (truncated)"; - } - - // Calculate maximum length per block to stay under total limit - const nonCodeLength = code.replace(codeBlockRegex, "").length; - const maxLengthPerBlock = Math.floor( - (maxLength - nonCodeLength) / codeBlocks.length - ); - - for (let i = 0; i < codeBlocks.length; i++) { - const block = codeBlocks[i]; - if (block.length > maxLengthPerBlock) { - const lines = block.split("\n"); - const header = lines[0]; // Keep the ```typescript or similar - const footer = lines[lines.length - 1]; // Keep the closing ``` - - // Calculate how many lines we can keep - const maxLinesPerSection = Math.floor( - (maxLengthPerBlock - header.length - footer.length) / 3 - ); - - // Take fewer lines but ensure we get the most important parts - const codeStart = lines.slice(1, maxLinesPerSection).join("\n"); - - // For the middle section, focus on the important parts - const middleIndex = Math.floor(lines.length / 2); - const middleStart = Math.max( - maxLinesPerSection, - middleIndex - Math.floor(maxLinesPerSection / 2) - ); - const middleEnd = Math.min( - lines.length - maxLinesPerSection, - middleIndex + Math.floor(maxLinesPerSection / 2) - ); - const codeMiddle = lines - .slice(middleStart, middleEnd) - .join("\n"); - - // Take the end section - const codeEnd = lines - .slice(lines.length - maxLinesPerSection, -1) - .join("\n"); - - const truncatedBlock = `${header}\n${codeStart}\n// ... truncated [${lines.length - maxLinesPerSection * 2} lines] ...\n${codeMiddle}\n// ... truncated ...\n${codeEnd}\n${footer}`; - code = code.replace(block, truncatedBlock); - } - } - - // Final safety check - if still too long, do a hard truncate - if (code.length > maxLength) { - const blocks = code.split("```"); - const truncatedBlocks = blocks.map((block, index) => { - // Every odd index is a code block - if (index % 2 === 1) { - const lines = block.split("\n"); - const maxLines = 10; // Keep only first few lines of each block - return ( - lines.slice(0, maxLines).join("\n") + - "\n// ... remaining code truncated ...\n" - ); - } - return block.slice(0, 500); // Limit non-code text - }); - code = truncatedBlocks.join("```"); - } - - return code; - } -} \ No newline at end of file diff --git a/scripts/jsdoc-automation/src/AIService/utils/DocumentOrganizer.ts b/scripts/jsdoc-automation/src/AIService/utils/DocumentOrganizer.ts deleted file mode 100644 index bd05575a5cbd..000000000000 --- a/scripts/jsdoc-automation/src/AIService/utils/DocumentOrganizer.ts +++ /dev/null @@ -1,76 +0,0 @@ -import type { ASTQueueItem } from "../../types"; -import type { FileDocsGroup, OrganizedDocs } from "../types"; - -export class DocumentOrganizer { - - public organizeDocumentation(docs: ASTQueueItem[]): OrganizedDocs { - return docs.reduce( - (acc: OrganizedDocs, doc) => { - // Use nodeType to determine the category - switch (doc.nodeType) { - case "ClassDeclaration": - acc.classes.push(doc); - break; - case "MethodDefinition": - case "TSMethodSignature": - acc.methods.push(doc); - break; - case "TSInterfaceDeclaration": - acc.interfaces.push(doc); - break; - case "TSTypeAliasDeclaration": - acc.types.push(doc); - break; - case "FunctionDeclaration": - acc.functions.push(doc); - break; - case "VariableDeclaration": - acc.variables.push(doc); - break; - } - return acc; - }, - { - classes: [], - methods: [], - interfaces: [], - types: [], - functions: [], - variables: [], - } - ); - } - - public groupDocsByFile(docs: OrganizedDocs): FileDocsGroup[] { - // Get unique file paths - const filePaths = new Set(); - [ - ...docs.classes, - ...docs.methods, - ...docs.interfaces, - ...docs.types, - ...docs.functions, - ...docs.variables, - ].forEach((item) => filePaths.add(item.filePath)); - - // Create groups for each file path - return Array.from(filePaths).map((filePath) => { - return { - filePath, - classes: docs.classes.filter((c) => c.filePath === filePath), - methods: docs.methods.filter((m) => m.filePath === filePath), - interfaces: docs.interfaces.filter( - (i) => i.filePath === filePath - ), - types: docs.types.filter((t) => t.filePath === filePath), - functions: docs.functions.filter( - (f) => f.filePath === filePath - ), - variables: docs.variables.filter( - (v) => v.filePath === filePath - ), - }; - }); - } - -} diff --git a/scripts/jsdoc-automation/src/Configuration.ts b/scripts/jsdoc-automation/src/Configuration.ts deleted file mode 100644 index fb74b5c13ab7..000000000000 --- a/scripts/jsdoc-automation/src/Configuration.ts +++ /dev/null @@ -1,203 +0,0 @@ -// Configuration.ts -import * as fs from "fs"; -import * as yaml from "yaml"; -import * as path from "path"; -import { fileURLToPath } from "url"; -import { dirname, join } from "path"; -import type { Repository } from "./types/index.js"; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -/** - * Gets the repository root path by going up two levels from the current file - * This assumes the code is in src/ directory of the package - */ -const getRepoRoot = () => path.resolve(__dirname, "../../../"); - -interface ConfigurationData { - rootDirectory: { - absolute: string; // Full path from filesystem root - relative: string; // Path relative to repository root - }; - excludedDirectories: string[]; - repository: Repository; - commitMessage: string; - pullRequestTitle: string; - pullRequestDescription: string; - pullRequestLabels: string[]; - pullRequestReviewers: string[]; - excludedFiles: string[]; - generateJsDoc: boolean; - generateReadme: boolean; -} - -/** - * Represents a configuration object that holds various settings for a project. - * Handles both absolute and relative paths for different operations. - */ -export class Configuration implements Omit { - private _rootDirectory!: ConfigurationData["rootDirectory"]; - private readonly repoRoot: string; - private _branch = "develop"; - private _generateJsDoc = true; - private _generateReadme = false; - - public excludedDirectories: string[] = []; - public repository: Repository = { - owner: "elizaOS", - name: "eliza", - pullNumber: undefined, - }; - public commitMessage = "Generated JSDoc comments"; - public pullRequestTitle = "JSDoc Generation"; - public pullRequestDescription = - "Automated JSDoc generation for the codebase"; - public pullRequestLabels: string[] = ["documentation", "automated-pr"]; - public pullRequestReviewers: string[] = []; - public excludedFiles: string[] = ["index.d.ts"]; - - constructor() { - this.repoRoot = getRepoRoot(); - this.loadConfiguration(); - } - - get generateJsDoc(): boolean { - return this._generateJsDoc; - } - - get generateReadme(): boolean { - return this._generateReadme; - } - - get rootDirectory(): ConfigurationData["rootDirectory"] { - return this._rootDirectory; - } - - get absolutePath(): string { - return this._rootDirectory.absolute; - } - - get relativePath(): string { - return this._rootDirectory.relative; - } - - public toRelativePath(absolutePath: string): string { - return path.relative(this.repoRoot, absolutePath); - } - - public toAbsolutePath(relativePath: string): string { - return path.resolve(this.repoRoot, relativePath); - } - - get branch(): string { - return this._branch; - } - - set branch(value: string) { - this._branch = value; - } - - private loadConfiguration(): void { - // First try to get from environment variables - const rootDirectory = process.env.INPUT_ROOT_DIRECTORY; - this._generateJsDoc = process.env.INPUT_JSDOC - ? process.env.INPUT_JSDOC.toUpperCase() === "T" - : true; // Default from workflow - this._generateReadme = process.env.INPUT_README - ? process.env.INPUT_README.toUpperCase() === "T" - : true; // Default from workflow - - console.log("Documentation flags:", { - generateJsDoc: this._generateJsDoc, - generateReadme: this._generateReadme, - }); - - let inputs; - - console.log("Environment variables:", { - rootDirectory: process.env.INPUT_ROOT_DIRECTORY, - pullNumber: process.env.INPUT_PULL_NUMBER, - excludedDirs: process.env.INPUT_EXCLUDED_DIRECTORIES, - reviewers: process.env.INPUT_REVIEWERS, - }); - - if (rootDirectory) { - console.log( - "Using root directory from environment variable:", - rootDirectory - ); - this._rootDirectory = { - absolute: path.resolve(this.repoRoot, rootDirectory), - relative: rootDirectory.replace(/^\/+/, ""), - }; - } else { - console.log("Falling back to workflow file configuration"); - const workflowPath = join( - this.repoRoot, - ".github/workflows/jsdoc-automation.yml" - ); - if (!fs.existsSync(workflowPath)) { - throw new Error(`Workflow file not found at ${workflowPath}`); - } - const workflowContent = fs.readFileSync(workflowPath, "utf8"); - const workflow = yaml.parse(workflowContent); - const inputs = workflow.on.workflow_dispatch.inputs; - - if (!inputs?.root_directory?.default) { - throw new Error( - "No root directory default found in workflow configuration" - ); - } - - const targetDir = inputs.root_directory.default; - console.log( - "Using default root directory from workflow:", - targetDir - ); - this._rootDirectory = { - absolute: path.resolve(this.repoRoot, targetDir), - relative: targetDir.replace(/^\/+/, ""), - }; - } - - console.log("Final root directory configuration:", { - absolute: this._rootDirectory.absolute, - relative: this._rootDirectory.relative, - }); - - // Handle other inputs - if (process.env.INPUT_PULL_NUMBER) { - console.log( - "Setting pull number from env:", - process.env.INPUT_PULL_NUMBER - ); - this.repository.pullNumber = Number.parseInt( - process.env.INPUT_PULL_NUMBER - ); - } - - this.excludedDirectories = this.parseCommaSeparatedInput( - process.env.INPUT_EXCLUDED_DIRECTORIES, - ["node_modules", "dist", "test"] - ); - - this.pullRequestReviewers = this.parseCommaSeparatedInput( - process.env.INPUT_REVIEWERS, - [] - ); - - this._branch = process.env.INPUT_BRANCH || "develop"; - console.log("Using branch:", this._branch); - } - - private parseCommaSeparatedInput( - input: string | undefined, - defaultValue: string[] - ): string[] { - if (!input) return defaultValue; - return input - .split(",") - .map((item) => item.trim()) - .filter(Boolean); - } -} diff --git a/scripts/jsdoc-automation/src/DirectoryTraversal.ts b/scripts/jsdoc-automation/src/DirectoryTraversal.ts deleted file mode 100644 index 7b80e400714b..000000000000 --- a/scripts/jsdoc-automation/src/DirectoryTraversal.ts +++ /dev/null @@ -1,156 +0,0 @@ -import * as fs from "fs"; -import * as path from "path"; -import type { Configuration } from "./Configuration.js"; - -/** - * DirectoryTraversal class for traversing through directories and files. - * @class DirectoryTraversal - */ -export class DirectoryTraversal { - /** - * Directories that should always be excluded from scanning, - * regardless of configuration - */ - private static readonly FORCED_EXCLUDED_DIRS = [ - "node_modules", - ".git", - "dist", - "build", - "coverage", - ".next", - ".nuxt", - ".cache", - "tmp", - "temp", - ".turbo", - ".husky", - ".github", - ".vscode", - "public", - "static", - ]; - - /** - * Constructor for directory traversal - * @param {Configuration} config - Configuration object containing paths and exclusions - * @param {string[]} [prFiles=[]] - PR files to process - */ - constructor( - private config: Configuration, - public prFiles: string[] = [] - ) {} - - /** - * Gets the absolute path for a file - */ - public getAbsolutePath(filePath: string): string { - return this.config.toAbsolutePath(filePath); - } - - /** - * Gets the repository-relative path for a file - */ - public getRelativePath(filePath: string): string { - return this.config.toRelativePath(filePath); - } - - /** - * Traverses the directory based on PRFiles or all files in the root directory. - * If PRFiles are detected, processes only files from the PR. - * Otherwise, scans all files in the root directory for TypeScript files. - * - * - * @returns An array of string containing the files to process. - */ - public traverse(): string[] { - if (this.prFiles.length > 0) { - console.log("Detected PR Files:", this.prFiles); - - // PR files are already relative to repo root, filter and convert to absolute paths - const files = this.prFiles - .filter((file) => { - // Convert PR file (repo-relative) to absolute path - const absolutePath = this.config.toAbsolutePath(file); - - // Check if the file is within our target directory - const isInTargetDir = absolutePath.startsWith( - this.config.absolutePath - ); - - return ( - isInTargetDir && - fs.existsSync(absolutePath) && - !this.isExcluded(absolutePath) && - path.extname(file) === ".ts" - ); - }) - .map((file) => this.config.toAbsolutePath(file)); - - console.log("Files to process:", files); - return files; - } else { - console.log( - "No PR Files Detected, Scanning all files in root directory" - ); - const typeScriptFiles: string[] = []; - - const traverseDirectory = (currentDirectory: string) => { - const files = fs.readdirSync(currentDirectory); - - files.forEach((file) => { - const filePath = path.join(currentDirectory, file); - const stats = fs.statSync(filePath); - - if (stats.isDirectory()) { - if (!this.isExcluded(filePath)) { - traverseDirectory(filePath); - } - } else if (stats.isFile() && !this.isExcluded(filePath)) { - if (path.extname(file) === ".ts") { - typeScriptFiles.push(filePath); - } - } - }); - }; - - traverseDirectory(this.config.absolutePath); - return typeScriptFiles; - } - } - - /** - * Check if a file path is excluded based on the excluded directories and files - */ - private isExcluded(absolutePath: string): boolean { - // Get path relative to the target directory for exclusion checking - const relativeToTarget = path.relative( - this.config.absolutePath, - absolutePath - ); - - // First check forced excluded directories - these are always excluded - const isInForcedExcludedDir = - DirectoryTraversal.FORCED_EXCLUDED_DIRS.some( - (dir) => - absolutePath.includes(`${path.sep}${dir}${path.sep}`) || - absolutePath.includes(`${path.sep}${dir}`) || - absolutePath.startsWith(`${dir}${path.sep}`) - ); - - if (isInForcedExcludedDir) { - return true; - } - - // Check if path is in excluded directory - const isExcludedDir = this.config.excludedDirectories.some( - (dir) => relativeToTarget.split(path.sep)[0] === dir - ); - - // Check if file is excluded - const isExcludedFile = this.config.excludedFiles.some( - (file) => path.basename(absolutePath) === file - ); - - return isExcludedDir || isExcludedFile; - } -} diff --git a/scripts/jsdoc-automation/src/DocumentationGenerator.ts b/scripts/jsdoc-automation/src/DocumentationGenerator.ts deleted file mode 100644 index 4de6fc837b5d..000000000000 --- a/scripts/jsdoc-automation/src/DocumentationGenerator.ts +++ /dev/null @@ -1,483 +0,0 @@ -import type { DirectoryTraversal } from "./DirectoryTraversal.js"; -import type { TypeScriptParser } from "./TypeScriptParser.js"; -import type { JsDocAnalyzer } from "./JsDocAnalyzer.js"; -import type { JsDocGenerator } from "./JsDocGenerator.js"; -import type { TSESTree } from "@typescript-eslint/types"; -import type { - ASTQueueItem, - EnvUsage, - FullModeFileChange, - PrModeFileChange, - TodoItem, -} from "./types/index.js"; -import type { GitManager } from "./GitManager.js"; -import fs from "fs"; -import type { Configuration } from "./Configuration.js"; -import path from "path"; -import type { AIService } from "./AIService/AIService.js"; -import { PluginDocumentationGenerator } from "./PluginDocumentationGenerator.js"; -import { JSDocValidator } from "./JSDocValidator.js"; - -/** - * Class representing a Documentation Generator. - * - */ -export class DocumentationGenerator { - public missingJsDocQueue: ASTQueueItem[] = []; - public existingJsDocQueue: ASTQueueItem[] = []; - private hasChanges = false; - private fileContents: Map = new Map(); - public branchName = ""; - private fileOffsets: Map = new Map(); - private typeScriptFiles: string[] = []; - private jsDocValidator: JSDocValidator; - - /** - * Constructor for initializing the object with necessary dependencies. - * - * @param {DirectoryTraversal} directoryTraversal - Instance of DirectoryTraversal class. - * @param {TypeScriptParser} typeScriptParser - Instance of TypeScriptParser class. - * @param {JsDocAnalyzer} jsDocAnalyzer - Instance of JsDocAnalyzer class. - * @param {JsDocGenerator} jsDocGenerator - Instance of JsDocGenerator class. - * @param {GitManager} gitManager - Instance of GitManager class. - * @param {Configuration} configuration - Instance of Configuration class. - * @param {AIService} aiService - Instance of AIService class. - */ - - constructor( - public directoryTraversal: DirectoryTraversal, - public typeScriptParser: TypeScriptParser, - public jsDocAnalyzer: JsDocAnalyzer, - public jsDocGenerator: JsDocGenerator, - public gitManager: GitManager, - public configuration: Configuration, - public aiService: AIService - ) { - this.typeScriptFiles = this.directoryTraversal.traverse(); - this.jsDocValidator = new JSDocValidator(aiService); - } - - /** - * Asynchronously generates JSDoc comments for the TypeScript files based on the given pull request number or full mode. - * - * @param pullNumber - Optional. The pull request number to generate JSDoc comments for. - * @returns A promise that resolves once the JSDoc generation process is completed. - */ - public async generate( - pullNumber?: number - ): Promise<{ - documentedItems: ASTQueueItem[]; - branchName: string | undefined; - }> { - let fileChanges: PrModeFileChange[] | FullModeFileChange[] = []; - this.fileOffsets.clear(); - - if (pullNumber) { - const prFiles = - await this.gitManager.getFilesInPullRequest(pullNumber); - fileChanges = prFiles.filter((file) => { - // Convert PR file path (which is repo-relative) to absolute path - const absolutePath = this.configuration.toAbsolutePath( - file.filename - ); - - // Check if file is in target directory - const isInTargetDir = absolutePath.startsWith( - this.configuration.absolutePath - ); - - // Get path relative to target directory for exclusion checking - const relativeToTarget = path.relative( - this.configuration.absolutePath, - absolutePath - ); - - // Check exclusions - const isExcluded = - // Check excluded directories - this.configuration.excludedDirectories.some( - (dir) => relativeToTarget.split(path.sep)[0] === dir - ) || - // Check excluded files - this.configuration.excludedFiles.some( - (excludedFile) => - path.basename(absolutePath) === excludedFile - ); - - return isInTargetDir && !isExcluded; - }); - } else { - const typeScriptFiles = this.directoryTraversal.traverse(); - fileChanges = typeScriptFiles.map((file) => ({ - filename: this.configuration.toRelativePath(file), - status: "modified", - })); - } - - // Process each TypeScript file - for (const fileChange of fileChanges) { - if (fileChange.status === "deleted") continue; - - const filePath = this.configuration.toAbsolutePath( - fileChange.filename - ); - this.fileOffsets.set(filePath, 0); - - // Load and store file content - if (fileChange.status === "added" && "contents_url" in fileChange) { - console.log("Getting file content from GitHub API"); - const fileContent = await this.getFileContent( - fileChange.contents_url - ); - this.fileContents.set(filePath, fileContent); - } else { - const fileContent = fs.readFileSync(filePath, "utf-8"); - this.fileContents.set(filePath, fileContent); - } - - const ast = this.typeScriptParser.parse(filePath); - if (!ast || !ast.body) { - console.log("Invalid AST found for file", filePath); - continue; - } - - this.jsDocAnalyzer.analyze(ast); - - // Process each node in the file - for (const node of ast.body) { - this.processNode(node, filePath, ast); - } - } - - // Process nodes that need JSDoc - if (this.missingJsDocQueue.length > 0) { - // Always create branch if we have missing JSDoc, even if we're only generating README - // This way we have a branch for either JSDoc commits or README commits - - if (this.configuration.generateJsDoc) { - this.branchName = `docs-update-${pullNumber || "full"}-${Date.now()}`; - await this.gitManager.createBranch( - this.branchName, - this.configuration.branch - ); - } - - // Process each node - for (const queueItem of this.missingJsDocQueue) { - let comment = ""; - if (queueItem.className !== undefined) { - comment = - await this.jsDocGenerator.generateClassComment( - queueItem - ); - } else { - comment = - await this.jsDocGenerator.generateComment(queueItem); - } - - // Only update the actual files with JSDoc if generateJsDoc flag is true - if (this.configuration.generateJsDoc) { - await this.updateFileWithJSDoc( - queueItem.filePath, - comment, - queueItem.startLine - ); - this.hasChanges = true; - } - - queueItem.jsDoc = comment; - this.existingJsDocQueue.push(queueItem); - } - - // Only commit and create PR for JSDoc changes if generateJsDoc is true - if (this.hasChanges && this.branchName) { - for (const [filePath, content] of this.fileContents) { - await this.gitManager.commitFile( - this.branchName, - this.configuration.toRelativePath(filePath), - content, - `docs: Add JSDoc documentation to ${path.basename(filePath)}` - ); - } - - const prContent = await this.generatePRContent(pullNumber); - await this.gitManager.createPullRequest({ - title: prContent.title, - body: prContent.body, - head: this.branchName, - base: this.configuration.branch, - labels: ["documentation", "automated-pr"], - reviewers: this.configuration.pullRequestReviewers || [], - }); - } - } - return { - documentedItems: this.existingJsDocQueue, - branchName: this.branchName, - }; - } - - /** - * Processes a single AST node and its children for JSDoc documentation - * @param node - The AST node to process - * @param filePath - Path to the source file - * @param ast - The complete AST - */ - private processNode( - node: TSESTree.Node, - filePath: string, - ast: TSESTree.Program - ): void { - if (!this.jsDocAnalyzer.shouldHaveJSDoc(node)) return; - - // Process the main node - const jsDocComment = this.jsDocAnalyzer.getJSDocComment( - node, - ast.comments || [] - ); - const queueItem = this.jsDocAnalyzer.createQueueItem( - node, - filePath, - this.getNodeCode(filePath, node) - ); - - if (jsDocComment) { - queueItem.jsDoc = jsDocComment; - this.existingJsDocQueue.push(queueItem); - } else { - this.missingJsDocQueue.push(queueItem); - } - - // Process any documentable children (like class methods) - const children = this.jsDocAnalyzer.getDocumentableChildren(node); - for (const child of children) { - const childJsDocComment = this.jsDocAnalyzer.getJSDocComment( - child, - ast.comments || [] - ); - const childQueueItem = this.jsDocAnalyzer.createQueueItem( - child, - filePath, - this.getNodeCode(filePath, child) - ); - - if (childJsDocComment) { - childQueueItem.jsDoc = childJsDocComment; - this.existingJsDocQueue.push(childQueueItem); - } else { - this.missingJsDocQueue.push(childQueueItem); - } - } - } - - /** - * Updates a file with JSDoc at a specific position. - * @param {string} filePath - The path to the file to update. - * @param {string} jsDoc - The JSDoc to insert into the file. - * @param {number} insertLine - The line number where the JSDoc should be inserted. - * @returns {Promise} - A Promise that resolves once the file has been updated. - */ - private async updateFileWithJSDoc( - filePath: string, - jsDoc: string, - insertLine: number - ): Promise { - const content = this.fileContents.get(filePath) || ""; - const lines = content.split("\n"); - const currentOffset = this.fileOffsets.get(filePath) || 0; - const adjustedLine = insertLine + currentOffset; - const fileName = filePath.split("/").pop() || ""; - - // Insert the comment - lines.splice(adjustedLine - 1, 0, jsDoc); - const newContent = lines.join("\n"); - - try { - // Validate and fix if necessary - const validatedJSDoc = - await this.jsDocValidator.validateAndFixJSDoc( - fileName, - newContent, - jsDoc - ); - - if (validatedJSDoc !== jsDoc) { - // If the comment was fixed, update the content - lines[adjustedLine - 1] = validatedJSDoc; - const newLines = (validatedJSDoc.match(/\n/g) || []).length + 1; - this.fileOffsets.set(filePath, currentOffset + newLines); - } else { - // console log just the file name from the path, and that the comment was valid - const newLines = (jsDoc.match(/\n/g) || []).length + 1; - this.fileOffsets.set(filePath, currentOffset + newLines); - } - - this.fileContents.set(filePath, lines.join("\n")); - } catch (error) { - console.error(`Error validating JSDoc in ${filePath}:`, error); - throw error; - } - } - - /** - * Retrieves the code of a specific node from a given file. - * - * @param {string} filePath - The path to the file containing the node. - * @param {TSESTree.Node} node - The node to extract the code from. - * @returns {string} The code belonging to the specified node. - */ - public getNodeCode(filePath: string, node: TSESTree.Node): string { - const fileContent = fs.readFileSync(filePath, "utf-8"); - const lines = fileContent.split("\n"); - const startLine = node.loc?.start.line || 0; - const endLine = node.loc?.end.line || 0; - return lines.slice(startLine - 1, endLine).join("\n"); - } - - /** - * Retrieves the content of a file from the provided URL. - * - * @param {string} contentsUrl - The URL of the file contents - * @returns {Promise} The content of the file as a string - */ - private async getFileContent(contentsUrl: string): Promise { - try { - const response = await fetch(contentsUrl); - const data = await response.json(); - return Buffer.from(data.content, "base64").toString("utf-8"); - } catch (error) { - console.error( - "Error fetching file content from GitHub API, ensure the PR has been merged" - ); - return ""; - } - } - - /** - * Asynchronously generates a pull request title and description for adding JSDoc documentation. - * @param {number} [pullNumber] - Optional pull request number that the JSDoc documentation is related to. - * @returns {Promise<{ title: string; body: string }>} - A promise that resolves to an object with a title and body for the pull request. - */ - private async generatePRContent( - pullNumber?: number - ): Promise<{ title: string; body: string }> { - const modifiedFiles = Array.from(this.fileContents.keys()); - const filesContext = modifiedFiles - .map((file) => `- ${file}`) - .join("\n"); - - const prompt = `Create a JSON object for a pull request about JSDoc documentation updates. - The JSON must have exactly this format, with no extra fields or markdown formatting: - { - "title": "Brief title describing JSDoc updates", - "body": "Detailed description of changes" - } - - Context for generating the content: - - ${modifiedFiles.length} files were modified - - Files modified:\n${filesContext} - - This is ${pullNumber ? `related to PR #${pullNumber}` : "a full repository documentation update"} - - This is an automated PR for adding JSDoc documentation - - The title should be concise and follow conventional commit format. - The body should include: - 1. A clear summary of changes - 2. List of modified files - 3. Brief instructions for reviewers - - Return ONLY the JSON object, no other text.`; - - const response = await this.aiService.generateComment(prompt); - - try { - // Clean up the response - remove any markdown formatting or extra text - const jsonStart = response.indexOf("{"); - const jsonEnd = response.lastIndexOf("}") + 1; - if (jsonStart === -1 || jsonEnd === -1) { - throw new Error("No valid JSON object found in response"); - } - - const jsonStr = response - .slice(jsonStart, jsonEnd) - .replace(/```json/g, "") - .replace(/```/g, "") - .trim(); - - const content = JSON.parse(jsonStr); - - // Validate the parsed content - if ( - !content.title || - !content.body || - typeof content.title !== "string" || - typeof content.body !== "string" - ) { - throw new Error("Invalid JSON structure"); - } - - return { - title: content.title, - body: content.body, - }; - } catch (error) { - console.error("Error parsing AI response for PR content:", error); - console.error("Raw response:", response); - return { - title: `docs: Add JSDoc documentation${pullNumber ? ` for PR #${pullNumber}` : ""}`, - body: this.generateDefaultPRBody(), - }; - } - } - - /** - * Generates the default pull request body for adding JSDoc documentation to TypeScript files. - * - * @returns {string} The default pull request body containing information about the changes made. - */ - private generateDefaultPRBody(): string { - const changes = Array.from(this.fileContents.keys()) - .map((filePath) => `- Added JSDoc documentation to \`${filePath}\``) - .join("\n"); - - return `## 📝 Documentation Updates - This PR adds JSDoc documentation to TypeScript files that were missing proper documentation. - - ### 🔍 Changes Made: - ${changes} - - ### 🤖 Generated by Documentation Bot - This is an automated PR created by the documentation generator tool.`; - } - - /** - * Analyzes TODOs and environment variables in the code - */ - public async analyzeCodebase(): Promise<{ - todoItems: TodoItem[]; - envUsages: EnvUsage[]; - }> { - const todoItems: TodoItem[] = []; - const envUsages: EnvUsage[] = []; - - for (const filePath of this.typeScriptFiles) { - const ast = this.typeScriptParser.parse(filePath); - if (!ast) continue; - - const sourceCode = fs.readFileSync(filePath, "utf-8"); - - // Find TODOs - this.jsDocAnalyzer.findTodoComments( - ast, - ast.comments || [], - sourceCode - ); - todoItems.push(...this.jsDocAnalyzer.todoItems); - - // Find env usages - this.jsDocAnalyzer.findEnvUsages(ast, sourceCode); - envUsages.push(...this.jsDocAnalyzer.envUsages); - } - - return { todoItems, envUsages }; - } -} diff --git a/scripts/jsdoc-automation/src/GitManager.ts b/scripts/jsdoc-automation/src/GitManager.ts deleted file mode 100644 index 7eec959e95ee..000000000000 --- a/scripts/jsdoc-automation/src/GitManager.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { Octokit } from "@octokit/rest"; -import type { PrModeFileChange, Repository } from "./types/index.js"; -import dotenv from "dotenv"; - -dotenv.config(); - -interface CreatePullRequestOptions { - title: string; - body: string; - head: string; - base: string; - labels?: string[]; - reviewers?: string[]; -} - -/** - * Manages operations related to interacting with a Git repository using the GitHub API. - */ -export class GitManager { - private octokit: Octokit; - - /** - * Constructor for a class that initializes the Octokit instance with the provided Repository and checks if the GITHUB_ACCESS_TOKEN is set in the environment. - * @param {Repository} repository - The repository instance to use - * @throws {Error} Throws an error if the GITHUB_ACCESS_TOKEN is not set - */ - constructor(public repository: Repository) { - if (!process.env.GITHUB_ACCESS_TOKEN) { - throw new Error("GITHUB_ACCESS_TOKEN is not set"); - } - this.octokit = new Octokit({ - auth: process.env.GITHUB_ACCESS_TOKEN, - }); - } - - /** - * Retrieve files in a specific pull request. - * @param {number} pullNumber - The number of the pull request to get files from. - * @returns {Promise} - Array of objects representing file changes in the pull request. - */ - public async getFilesInPullRequest( - pullNumber: number - ): Promise { - const { data } = await this.octokit.pulls.listFiles({ - owner: this.repository.owner, - repo: this.repository.name, - pull_number: pullNumber, - }); - - return data.map((file: any) => ({ - filename: file.filename, - status: file.status, - additions: file.additions, - deletions: file.deletions, - changes: file.changes, - contents_url: file.contents_url, - })); - } - - /** - * Creates a new branch in the GitHub repository using the given branch name and base branch. - * - * @param {string} branchName - The name of the new branch to be created. - * @param {string} baseBranch - The name of the branch to base the new branch off of. - * @returns {Promise} - A Promise that resolves when the branch is successfully created. - */ - public async createBranch( - branchName: string, - baseBranch: string - ): Promise { - await this.octokit.git.createRef({ - owner: this.repository.owner, - repo: this.repository.name, - ref: `refs/heads/${branchName}`, - sha: ( - await this.octokit.git.getRef({ - owner: this.repository.owner, - repo: this.repository.name, - ref: `heads/${baseBranch}`, - }) - ).data.object.sha, - }); - } - - /** - * Asynchronously commits a file to a repository using the GitHub API. - * - * @param {string} branchName - The name of the branch to commit the file to. - * @param {string} filePath - The path of the file to commit. - * @param {string} content - The content of the file to commit. - * @param {string} message - The commit message. - * @returns {Promise} A promise that resolves when the file is successfully committed. - */ - public async commitFile( - branchName: string, - filePath: string, - content: string, - message: string - ): Promise { - try { - const { data } = await this.octokit.repos.getContent({ - owner: this.repository.owner, - repo: this.repository.name, - path: filePath, - ref: branchName, - }); - - await this.octokit.repos.createOrUpdateFileContents({ - owner: this.repository.owner, - repo: this.repository.name, - path: filePath, - message: message, - content: Buffer.from(content).toString("base64"), - sha: (data as any).sha, - branch: branchName, - }); - } catch (error: any) { - if (error.status === 404) { - console.log( - "404 - File doesn't exist in the target branch, creating a new file" - ); - // File doesn't exist in the target branch, create a new file - await this.octokit.repos.createOrUpdateFileContents({ - owner: this.repository.owner, - repo: this.repository.name, - path: filePath, - message: message, - content: Buffer.from(content).toString("base64"), - branch: branchName, - }); - } else { - throw error; - } - } - } - - /** - * Create a pull request using the provided options. - * @param {CreatePullRequestOptions} options - The options for creating the pull request. - * @returns {Promise} A Promise that resolves once the pull request is successfully created. - */ - public async createPullRequest( - options: CreatePullRequestOptions - ): Promise { - try { - // Create the pull request - const { data: pr } = await this.octokit.pulls.create({ - owner: this.repository.owner, - repo: this.repository.name, - title: options.title, - body: options.body, - head: options.head, - base: options.base, - }); - - // Add labels if provided - if (options.labels && options.labels.length > 0) { - await this.octokit.issues.addLabels({ - owner: this.repository.owner, - repo: this.repository.name, - issue_number: pr.number, - labels: options.labels, - }); - } - - // Add reviewers if provided - if (options.reviewers && options.reviewers.length > 0) { - await this.octokit.pulls.requestReviewers({ - owner: this.repository.owner, - repo: this.repository.name, - pull_number: pr.number, - reviewers: options.reviewers, - }); - } - - console.log(`Created PR #${pr.number}: ${pr.html_url}`); - } catch (error) { - console.error("Error creating pull request:", error); - throw error; - } - } -} diff --git a/scripts/jsdoc-automation/src/JSDocValidator.ts b/scripts/jsdoc-automation/src/JSDocValidator.ts deleted file mode 100644 index e7beba3fa483..000000000000 --- a/scripts/jsdoc-automation/src/JSDocValidator.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { parse, type ParserOptions } from "@typescript-eslint/parser"; -import type { AIService } from "./AIService/AIService.js"; - -export class JSDocValidator { - private parserOptions: ParserOptions = { - sourceType: "module", - ecmaVersion: 2020, - ecmaFeatures: { - jsx: true, - }, - range: true, - loc: true, - tokens: true, - comment: true, - }; - - constructor(private aiService: AIService) {} - - /** - * Validates and fixes JSDoc comments in TypeScript code - */ - public async validateAndFixJSDoc( - fileName: string, - code: string, - originalComment: string - ): Promise { - // First try parsing with the original comment - if (this.isValidTypeScript(code)) { - return originalComment; - } - - // Try fixing common JSDoc issues - const fixedComment = this.fixCommonJSDocIssues(originalComment); - const codeWithFixedComment = code.replace( - originalComment, - fixedComment - ); - - if (this.isValidTypeScript(codeWithFixedComment)) { - console.log( - `✓ JSDoc comment in ${fileName} was fixed using regex patterns` - ); - return fixedComment; - } else { - console.log( - `❌JSDoc comment in ${fileName} regex patterns failed, making AI call for help` - ); - } - - // If still invalid, try regenerating with AI - try { - const regeneratedComment = await this.regenerateJSDoc(code); - const codeWithRegeneratedComment = code.replace( - originalComment, - regeneratedComment - ); - - if (this.isValidTypeScript(codeWithRegeneratedComment)) { - console.log( - `✓ JSDoc comment in ${fileName} was regenerated using AI` - ); - return regeneratedComment; - } - } catch (error) { - console.error( - `Error during AI regeneration for ${fileName}:`, - error - ); - } - - // Instead of throwing, log the issue and return original - console.warn( - `⚠️ HUMAN INTERVENTION NEEDED - Invalid JSDoc in ${fileName}` - ); - console.warn("Original comment:", originalComment); - return originalComment; - } - - /** - * Checks if the TypeScript code is valid - */ - private isValidTypeScript(code: string): boolean { - try { - parse(code, this.parserOptions); - return true; - } catch (error) { - return false; - } - } - - /** - * Fixes common JSDoc formatting issues - */ - private fixCommonJSDocIssues(comment: string): string { - // First remove any backtick code block markers - comment = comment.replace(/^```[\s\S]*?\n/, ""); // Remove opening code block - comment = comment.replace(/\n```$/, ""); // Remove closing code block - - const fixes = [ - // Fix opening format - [/\/\*\*?(?!\*)/, "/**"], // Ensure proper opening - - // Fix body asterisks and spacing - [/\*{3,}/g, "**"], // Remove excessive asterisks in body - [/\*(?!\s|\*|\/)/g, "* "], // Add space after single asterisk - [/^(\s*)\*\s\s+/gm, "$1* "], // Remove multiple spaces after asterisk - - // Fix multi-line issues (from bash script insights) - [/\*\/\s*\n\s*\*\*\//g, "*/"], // Remove stray closing after proper closing - [/\n\s*\*\s*\n\s*\*\//g, "\n */"], // Fix empty line before closing - - // Fix closing format - [/\*+\//g, "*/"], // Fix multiple asterisks in closing - [/(? { - const prompt = `Fix the following JSDoc comment to be syntactically valid. - Ensure proper formatting: - - Start with /** - - Each line should start with a single * - - End with */ - - No extra asterisks - - Space after each asterisk - - Space before closing tag - - Code: - ${code} - - Return ONLY the fixed JSDoc comment, nothing else.`; - - return await this.aiService.generateComment(prompt); - } -} diff --git a/scripts/jsdoc-automation/src/JsDocAnalyzer.ts b/scripts/jsdoc-automation/src/JsDocAnalyzer.ts deleted file mode 100644 index 46a18b3c470c..000000000000 --- a/scripts/jsdoc-automation/src/JsDocAnalyzer.ts +++ /dev/null @@ -1,808 +0,0 @@ -import type { TSESTree } from "@typescript-eslint/types"; -import type { TypeScriptParser } from "./TypeScriptParser.js"; -import type { ASTQueueItem, EnvUsage, TodoItem } from "./types/index.js"; - -type AST_NODE_TYPES = { - ClassDeclaration: "ClassDeclaration"; - FunctionDeclaration: "FunctionDeclaration"; - TSTypeAliasDeclaration: "TSTypeAliasDeclaration"; - TSEnumDeclaration: "TSEnumDeclaration"; - MethodDefinition: "MethodDefinition"; - TSMethodSignature: "TSMethodSignature"; - TSInterfaceDeclaration: "TSInterfaceDeclaration"; - TSPropertySignature: "TSPropertySignature"; - ExportNamedDeclaration: "ExportNamedDeclaration"; - Identifier: "Identifier"; - VariableDeclaration: "VariableDeclaration"; -}; - -const AST_NODE_TYPES = { - ClassDeclaration: "ClassDeclaration", - FunctionDeclaration: "FunctionDeclaration", - TSTypeAliasDeclaration: "TSTypeAliasDeclaration", - TSEnumDeclaration: "TSEnumDeclaration", - MethodDefinition: "MethodDefinition", - TSMethodSignature: "TSMethodSignature", - TSInterfaceDeclaration: "TSInterfaceDeclaration", - TSPropertySignature: "TSPropertySignature", - ExportNamedDeclaration: "ExportNamedDeclaration", - Identifier: "Identifier", - VariableDeclaration: "VariableDeclaration", -} as const; - -type DocumentableNodeType = - | "ClassDeclaration" - | "FunctionDeclaration" - | "TSTypeAliasDeclaration" - | "TSEnumDeclaration" - | "MethodDefinition" - | "TSMethodSignature" - | "TSInterfaceDeclaration" - | "TSPropertySignature" - | "VariableDeclaration"; - -interface Location { - start: number; - end: number; -} - -/** - * Class to analyze JSDoc comments in TypeScript code. - */ -export class JsDocAnalyzer { - private documentableTypes: Set = new Set([ - AST_NODE_TYPES.ClassDeclaration, - AST_NODE_TYPES.FunctionDeclaration, - AST_NODE_TYPES.TSTypeAliasDeclaration, - AST_NODE_TYPES.TSEnumDeclaration, - AST_NODE_TYPES.MethodDefinition, - AST_NODE_TYPES.TSMethodSignature, - AST_NODE_TYPES.TSPropertySignature, - AST_NODE_TYPES.TSInterfaceDeclaration, - AST_NODE_TYPES.VariableDeclaration, - ]); - - /** - * Type guard to check if a node is a VariableDeclaration - */ - private isVariableDeclaration(node: TSESTree.Node): node is TSESTree.VariableDeclaration { - return node.type === 'VariableDeclaration'; - } - - /** - * Checks if a node is a const declaration - */ - private isConstDeclaration(node: TSESTree.Node): boolean { - return this.isVariableDeclaration(node) && node.kind === 'const'; - } - - /** - * Checks if a node spans more than the specified number of lines - */ - private isLongEnough(node: TSESTree.Node, minLines = 10): boolean { - if (!node.loc) return false; - return (node.loc.end.line - node.loc.start.line) > minLines; - } - - /** - * Checks if a node is an export declaration - */ - private isExportDeclaration(node: TSESTree.Node): node is TSESTree.ExportNamedDeclaration { - return node.type === 'ExportNamedDeclaration'; - } - - /** - * Checks if a variable declaration is a significant constant - * @param node The variable declaration node to check - * @returns True if the node is an exported constant with significant complexity - */ - private isSignificantConstant(node: TSESTree.VariableDeclaration): boolean { - // Must be const declaration - if (node.kind !== 'const') return false; - - // Must be exported - const parent = node.parent; - if (!parent || !this.isExportNamedDeclaration(parent)) return false; - - // Must span multiple lines (at least 10) - if (!node.loc) return false; - const lineCount = node.loc.end.line - node.loc.start.line; - return lineCount >= 10; - } - - /** - * Type guard to check if a node is a ClassDeclaration - */ - private isClassDeclaration( - node: TSESTree.Node - ): node is TSESTree.ClassDeclaration { - return node.type === AST_NODE_TYPES.ClassDeclaration; - } - - /** - * Type guard to check if a node is an InterfaceDeclaration - */ - private isInterfaceDeclaration( - node: TSESTree.Node - ): node is TSESTree.TSInterfaceDeclaration { - return node.type === "TSInterfaceDeclaration"; // Changed to match AST - } - - /** - * Type guard to check if a node is a MethodDefinition - */ - private isMethodDefinition( - node: TSESTree.Node - ): node is TSESTree.MethodDefinition { - return node.type === AST_NODE_TYPES.MethodDefinition; - } - - /** - * Type guard for interface method signatures - */ - private isMethodSignature( - node: TSESTree.Node - ): node is TSESTree.TSMethodSignature { - return node.type === AST_NODE_TYPES.TSMethodSignature; - } - - /** - * Type guard for interface property signatures - */ - private isPropertySignature( - node: TSESTree.Node - ): node is TSESTree.TSPropertySignature { - return node.type === AST_NODE_TYPES.TSPropertySignature; - } - - /** - * Type guard for ExportNamedDeclaration nodes - */ - private isExportNamedDeclaration( - node: TSESTree.Node - ): node is TSESTree.ExportNamedDeclaration { - return node.type === AST_NODE_TYPES.ExportNamedDeclaration; - } - - /** - * Type guard to check if a node is an Identifier - * @param node - The node to check - */ - private isIdentifier(node: TSESTree.Node): node is TSESTree.Identifier { - return node.type === AST_NODE_TYPES.Identifier; - } - - /** - * Gets the actual node from either a regular node or an exported declaration - * @param node - The AST node to process - * @returns The actual declaration node - */ - private getActualNode(node: TSESTree.Node): TSESTree.Node { - if (this.isExportNamedDeclaration(node) && node.declaration) { - return node.declaration; - } - return node; - } - - /** - * Gets the method name from a MethodDefinition node - * @param node - The method definition node - * @returns The method name or undefined - */ - private getMethodName(node: TSESTree.MethodDefinition): string | undefined { - if (this.isIdentifier(node.key)) { - return node.key.name; - } - return undefined; - } - - /** - * Gets the name of a node if available - */ - private getNodeName(node: TSESTree.Node): string | undefined { - const actualNode = this.getActualNode(node); - - // Handle variable declarations (constants) - if (this.isVariableDeclaration(actualNode) && actualNode.declarations.length > 0) { - const declaration = actualNode.declarations[0]; - if (this.isIdentifier(declaration.id)) { - return declaration.id.name; - } - } - - if (this.isMethodDefinition(actualNode)) { - return this.getMethodName(actualNode); - } - - if ( - this.isMethodSignature(actualNode) || - this.isPropertySignature(actualNode) - ) { - return this.isIdentifier(actualNode.key) - ? actualNode.key.name - : undefined; - } - - if ( - "id" in actualNode && - actualNode.id && - this.isIdentifier(actualNode.id) - ) { - return actualNode.id.name; - } - - return undefined; - } - - public missingJsDocNodes: TSESTree.Node[] = []; - public todoItems: TodoItem[] = []; - public envUsages: EnvUsage[] = []; - - /** - * Constructor for initializing a new instance. - * @param {TypeScriptParser} typeScriptParser - An instance of TypeScriptParser used for parsing TypeScript code. - */ - constructor(public typeScriptParser: TypeScriptParser) {} - - /** - * Analyzes the Abstract Syntax Tree (AST) of a program. - * @param {TSESTree.Program} ast - The AST of the program to analyze. - * @returns {void} - */ - public analyze(ast: TSESTree.Program): void { - this.traverse(ast, ast.comments || []); - } - - /** - * Traverses the AST node and checks for JSDoc comments. - * - * @param {TSESTree.Node} node - The AST node to traverse. - * @param {TSESTree.Comment[]} [comments] - Optional array of comments associated with the node. - */ - private traverse(node: TSESTree.Node, comments?: TSESTree.Comment[]): void { - if (this.shouldHaveJSDoc(node)) { - const jsDocComment = this.getJSDocComment(node, comments || []); - if (!jsDocComment) { - this.missingJsDocNodes.push(node); - } - } - - // Handle specific node types that can have children - if ("body" in node) { - const body = Array.isArray(node.body) ? node.body : [node.body]; - body.forEach((child) => { - if (child && typeof child === "object") { - this.traverse(child as TSESTree.Node, comments); - } - }); - } - - // Handle other common child properties - ["consequent", "alternate", "init", "test", "update"].forEach( - (prop) => { - if (prop in node && node[prop as keyof TSESTree.Node]) { - this.traverse( - node[prop as keyof TSESTree.Node] as TSESTree.Node, - comments - ); - } - } - ); - } - - /** - * Checks if a node should have JSDoc comments - * @param node - The node to check - * @returns True if the node should have JSDoc - */ - public shouldHaveJSDoc(node: TSESTree.Node): boolean { - const actualNode = this.getActualNode(node); - - // Special handling for const declarations - if (this.isConstDeclaration(actualNode)) { - return this.isLongEnough(actualNode); - } - - // Handle export const declarations - if (this.isExportDeclaration(node) && node.declaration && this.isConstDeclaration(node.declaration)) { - return this.isLongEnough(node.declaration); - } - - return this.documentableTypes.has( - actualNode.type as DocumentableNodeType - ); - } - - /** - * Gets any child nodes that should be processed for JSDoc - * @param node - The parent node - * @returns Array of child nodes that need JSDoc - */ - public getDocumentableChildren(node: TSESTree.Node): TSESTree.Node[] { - const actualNode = this.getActualNode(node); - - if (this.isClassDeclaration(actualNode)) { - return actualNode.body.body.filter(this.isMethodDefinition); - } - - // For interfaces, return empty array since we only want to document the interface itself - if (this.isInterfaceDeclaration(actualNode)) { - return []; // Don't process interface members - } - - return []; - } - - /** - * Creates a queue item from a node - */ - public createQueueItem( - node: TSESTree.Node, - filePath: string, - code: string - ): ASTQueueItem { - const actualNode = this.getActualNode(node); - const nodeName = this.getNodeName(node); - const parentInterface = - this.isMethodSignature(actualNode) || - this.isPropertySignature(actualNode) - ? this.getParentInterfaceName(node) - : undefined; - const parentClass = this.isMethodDefinition(actualNode) - ? this.getParentClassName(node) - : undefined; - - return { - filePath, - startLine: node.loc?.start.line || 0, - endLine: node.loc?.end.line || 0, - nodeType: actualNode.type, - className: parentClass || parentInterface, - methodName: - this.isMethodDefinition(actualNode) || - this.isMethodSignature(actualNode) || - this.isPropertySignature(actualNode) - ? nodeName - : undefined, - name: nodeName!, - code: code, - }; - } - - /** - * Gets the parent class name for a method definition - * @param node - The method node - * @returns The parent class name or undefined - */ - private getParentClassName(node: TSESTree.Node): string | undefined { - let current = node.parent; - while (current) { - const actualNode = this.getActualNode(current); - if ( - this.isClassDeclaration(actualNode) && - this.isIdentifier(actualNode.id!) - ) { - return actualNode.id.name; - } - current = current.parent; - } - return undefined; - } - - /** - * Gets the parent interface name for a method or property signature - */ - private getParentInterfaceName(node: TSESTree.Node): string | undefined { - let current = node.parent; - while (current) { - const actualNode = this.getActualNode(current); - if ( - this.isInterfaceDeclaration(actualNode) && - this.isIdentifier(actualNode.id) - ) { - return actualNode.id.name; - } - current = current.parent; - } - return undefined; - } - - /** - * Check if the given node is a class node. - * - * @param {TSESTree.Node} node - The node to check - * @returns {boolean} Returns true if the node is a class node, false otherwise - */ - public isClassNode(node: TSESTree.Node): boolean { - if (node.type === "ClassDeclaration") { - return true; - } - - if ( - node.type === "ExportNamedDeclaration" && - node.declaration?.type === "ClassDeclaration" - ) { - return true; - } - - return false; - } - - /** - * Retrieves the JSDoc comment associated with the given node if properly formatted. - * @param node - The node to check for JSDoc comments - * @param comments - Array of comments to search through - * @returns The JSDoc comment if found and properly spaced, undefined otherwise - */ - public getJSDocComment( - node: TSESTree.Node, - comments: TSESTree.Comment[] - ): string | undefined { - if (!this.shouldHaveJSDoc(node)) { - return undefined; - } - - const functionStartLine = node.loc?.start.line; - - return comments.find((comment) => { - const commentEndLine = comment.loc?.end.line; - - // Must be a block comment starting with * (JSDoc style) - const isJSDocStyle = - comment.type === "Block" && comment.value.startsWith("*"); - - // Check if the comment is right before the node (no 1-2 line gaps) - const properSpacing = - commentEndLine && - functionStartLine && - functionStartLine - commentEndLine > 2; - - return isJSDocStyle && properSpacing; - })?.value; - } - - /** - * Returns the start and end location of the given Node. - * - * @param {TSESTree.Node} node - The Node to get location from. - * @returns {Location} The start and end location of the Node. - */ - public getNodeLocation(node: TSESTree.Node): Location { - return { - start: node.loc.start.line, - end: node.loc.end.line, - }; - } - - /** - * Retrieves all methods of a specific class or all classes in a given file. - * @param filePath - The path of the file to parse. - * @param className - The name of the class to retrieve methods from. Optional. - * @returns An array of MethodDefinition nodes representing the methods found. - */ - public getClassMethods( - filePath: string, - className?: string - ): TSESTree.MethodDefinition[] { - const ast = this.typeScriptParser.parse(filePath); - if (!ast) return []; - - // Find all class declarations in the file - const classNodes = ast.body.filter( - (node: TSESTree.Node): node is TSESTree.ClassDeclaration => - node.type === "ClassDeclaration" && - // If className is provided, match it, otherwise accept any class - (className ? node.id?.name === className : true) - ); - - // Collect methods from all matching classes - const methods: TSESTree.MethodDefinition[] = []; - for (const classNode of classNodes) { - const classMethods = classNode.body.body.filter( - (node: TSESTree.Node): node is TSESTree.MethodDefinition => - node.type === "MethodDefinition" - ); - methods.push(...classMethods); - } - - return methods; - } - - /** - * Finds TODO comments in the code and their associated nodes - * @param ast - The AST to analyze - * @param comments - Array of comments to search through - * @param sourceCode - The original source code - */ - public findTodoComments( - ast: TSESTree.Program, - comments: TSESTree.Comment[], - sourceCode: string - ): void { - this.todoItems = []; - - comments.forEach((comment) => { - if (!comment.loc) return; - - const commentText = comment.value.toLowerCase(); - if (commentText.includes("todo")) { - try { - // Find the nearest node after the comment - const nearestNode = this.findNearestNode( - ast, - comment.loc.end.line - ); - if (nearestNode && nearestNode.loc) { - // Find the containing function/class/block - const containingBlock = - this.findContainingBlock(nearestNode); - - // Extract the actual code associated with the TODO - const code = this.extractNodeCode( - sourceCode, - nearestNode - ); - - // Extract the full context (entire function/class/block) - const fullContext = - containingBlock && containingBlock.loc - ? this.extractNodeCode( - sourceCode, - containingBlock - ) - : code; - - this.todoItems.push({ - comment: comment.value.trim(), - code, - fullContext, - node: nearestNode, - location: comment.loc, - contextLocation: - containingBlock?.loc || comment.loc, - }); - } - } catch (error) { - console.error("Error processing TODO comment:", error); - // Continue processing other comments even if one fails - } - } - }); - } - - /** - * Finds the containing block (function/class/interface declaration) for a node - */ - private findContainingBlock( - node: TSESTree.Node - ): TSESTree.Node | undefined { - let current = node; - while (current.parent) { - if ( - current.parent.type === "FunctionDeclaration" || - current.parent.type === "ClassDeclaration" || - current.parent.type === "TSInterfaceDeclaration" || - current.parent.type === "MethodDefinition" || - current.parent.type === "ArrowFunctionExpression" || - current.parent.type === "FunctionExpression" - ) { - return current.parent; - } - current = current.parent; - } - return undefined; - } - - /** - * Finds environment variable usage in the code - * @param ast - The AST to analyze - * @param sourceCode - The original source code - */ - public findEnvUsages(ast: TSESTree.Program, sourceCode: string): void { - this.envUsages = []; - - const findEnvReferences = (node: TSESTree.Node) => { - if (!node.loc) return; - - // Check for process.env - if ( - node.type === "MemberExpression" && - node.object.type === "Identifier" && - node.object.name === "process" && - node.property.type === "Identifier" && - node.property.name === "env" - ) { - // Get the parent statement/expression for context - const contextNode = this.findParentStatement(node); - // Get the containing function/block for full context - const containingBlock = this.findContainingBlock(node); - - // Get just the process.env reference - const code = this.extractNodeCode(sourceCode, node); - - // Get the full line by using the line number directly - const lines = sourceCode.split("\n"); - const context = lines[node.loc.start.line - 1]; - - // Get the entire function/block containing this env usage - const fullContext = containingBlock - ? this.extractFullContext(sourceCode, containingBlock) - : context; - - this.envUsages.push({ - code, - context, - fullContext, - node, - location: node.loc, - contextLocation: containingBlock?.loc || node.loc, - }); - } - - // Continue traversing - Object.keys(node).forEach((key) => { - const child = node[key as keyof TSESTree.Node]; - if (child && typeof child === "object") { - if (Array.isArray(child)) { - child.forEach((item) => { - if (item && typeof item === "object") { - findEnvReferences(item as TSESTree.Node); - } - }); - } else { - findEnvReferences(child as TSESTree.Node); - } - } - }); - }; - - findEnvReferences(ast); - } - - /** - * Extracts the actual source code for a given node - */ - private extractNodeCode(sourceCode: string, node: TSESTree.Node): string { - if (!node.loc) { - return ""; - } - - const lines = sourceCode.split("\n"); - const startLine = node.loc.start.line - 1; - const endLine = node.loc.end.line; - - if (startLine < 0 || endLine > lines.length) { - return ""; - } - - // Handle single-line case - if (startLine === endLine - 1) { - const line = lines[startLine]; - return line.slice(node.loc.start.column, node.loc.end.column); - } - - // Handle multi-line case - const result = []; - for (let i = startLine; i < endLine; i++) { - let line = lines[i]; - if (i === startLine) { - line = line.slice(node.loc.start.column); - } else if (i === endLine - 1) { - line = line.slice(0, node.loc.end.column); - } - result.push(line); - } - return result.join("\n"); - } - - /** - * Extracts the full context including any variable declarations and surrounding code - */ - private extractFullContext( - sourceCode: string, - node: TSESTree.Node - ): string { - if (!node.loc) return ""; - - const lines = sourceCode.split("\n"); - const startLine = node.loc.start.line - 1; - const endLine = node.loc.end.line; - - if (startLine < 0 || endLine > lines.length) { - return ""; - } - - // Get the complete lines for the entire block/function - return lines.slice(startLine, endLine).join("\n"); - } - - /** - * Finds the parent statement or expression node - */ - // prettyr sure this isnt needed, directly access code rather - private findParentStatement( - node: TSESTree.Node - ): TSESTree.Node | undefined { - let current = node; - while (current.parent) { - // Add more statement types that could contain process.env - if ( - current.parent.type === "VariableDeclaration" || - current.parent.type === "ExpressionStatement" || - current.parent.type === "AssignmentExpression" || - current.parent.type === "ReturnStatement" || - current.parent.type === "IfStatement" || - current.parent.type === "LogicalExpression" || - current.parent.type === "BinaryExpression" || - current.parent.type === "Property" || - current.parent.type === "ObjectExpression" || - current.parent.type === "MemberExpression" - ) { - return current.parent; - } - // Add logging to see what types we're encountering - console.log("Parent node type:", current.parent.type); - current = current.parent; - } - return undefined; - } - - /** - * Finds the nearest node after a specific line number - */ - private findNearestNode( - ast: TSESTree.Program, - lineNumber: number - ): TSESTree.Node | undefined { - let nearestNode: TSESTree.Node | undefined; - let smallestDistance = Number.POSITIVE_INFINITY; - - const traverse = (node: TSESTree.Node | null) => { - if (!node) return; - - // Check if the node has a location - if (node.loc) { - const distance = node.loc.start.line - lineNumber; - if (distance > 0 && distance < smallestDistance) { - smallestDistance = distance; - nearestNode = node; - } - } - - // Safely traverse child nodes - if ("body" in node) { - const body = Array.isArray(node.body) ? node.body : [node.body]; - body.forEach((child: TSESTree.Node) => { - if (child && typeof child === "object") { - traverse(child as TSESTree.Node); - } - }); - } - - // Handle specific node types - if ("declarations" in node && Array.isArray(node.declarations)) { - node.declarations.forEach((decl: TSESTree.Node) => - traverse(decl) - ); - } - - if ("declaration" in node && node.declaration) { - traverse(node.declaration); - } - - // Handle other properties that might contain nodes - ["consequent", "alternate", "init", "test", "update"].forEach( - (prop) => { - if (prop in node && node[prop as keyof typeof node]) { - traverse( - node[prop as keyof typeof node] as TSESTree.Node - ); - } - } - ); - }; - - traverse(ast); - return nearestNode; - } -} diff --git a/scripts/jsdoc-automation/src/JsDocGenerator.ts b/scripts/jsdoc-automation/src/JsDocGenerator.ts deleted file mode 100644 index 32516eef314d..000000000000 --- a/scripts/jsdoc-automation/src/JsDocGenerator.ts +++ /dev/null @@ -1,75 +0,0 @@ -import type { AIService } from "./AIService/AIService.js"; -import type { ASTQueueItem } from "./types/index.js"; - -/** - * A class that generates JSDoc comments for code snippets and classes. - */ -export class JsDocGenerator { - /** - * Constructor for a class that takes in an AIService instance. - * @param {AIService} aiService - The AIService instance to be injected into the class. - */ - constructor(public aiService: AIService) {} - - /** - * Generates a comment based on the given ASTQueueItem. - * - * @param {ASTQueueItem} queueItem - The ASTQueueItem object to generate comment for. - * @returns {Promise} The generated comment. - */ - public async generateComment(queueItem: ASTQueueItem): Promise { - const prompt = this.buildPrompt(queueItem); - const comment = await this.aiService.generateComment(prompt); - return comment; - } - - /** - * Generates a comment for a class based on the given ASTQueueItem. - * - * @param {ASTQueueItem} queueItem - The ASTQueueItem to generate the comment for. - * @returns {Promise} The generated comment for the class. - */ - public async generateClassComment( - queueItem: ASTQueueItem - ): Promise { - const prompt = this.buildClassPrompt(queueItem); - const comment = await this.aiService.generateComment(prompt); - return comment; - } - - /** - * Builds a prompt with the JSDoc comment for the provided ASTQueueItem code. - * - * @param {ASTQueueItem} queueItem The ASTQueueItem object containing the code to extract the JSDoc comment from. - * @returns {string} The JSDoc comment extracted from the code provided in the ASTQueueItem object. - */ - private buildPrompt(queueItem: ASTQueueItem): string { - return `Generate JSDoc comment for the following code: - - - \`\`\`typescript - ${queueItem.code} - \`\`\` - - Only return the JSDoc comment, not the code itself. - `; - } - - private buildClassPrompt(queueItem: ASTQueueItem): string { - return `Generate JSDoc comment for the following Class: - - Class name: ${queueItem.code.match(/class (\w+)/)?.[1]} - - Only return the JSDoc for the Class itself, not the methods or anything in the class. - - Only return the JSDoc comment for the class, no other text or code. - - Example: - \`\`\` - /** - * This is a class that does something. It has a method that does something. - */ - \`\`\` - `; - } -} diff --git a/scripts/jsdoc-automation/src/PluginDocumentationGenerator.ts b/scripts/jsdoc-automation/src/PluginDocumentationGenerator.ts deleted file mode 100644 index 8ba5d5d8d601..000000000000 --- a/scripts/jsdoc-automation/src/PluginDocumentationGenerator.ts +++ /dev/null @@ -1,127 +0,0 @@ -import type { - ASTQueueItem, - PluginDocumentation, - TodoItem, - EnvUsage, -} from "./types/index.js"; -import type { AIService } from "./AIService/AIService.js"; -import type { GitManager } from "./GitManager.js"; -import type { Configuration } from "./Configuration.js"; -import { FullDocumentationGenerator } from "./AIService/generators/FullDocumentationGenerator.js"; -import fs from "fs"; -import path from "path"; - -/** - * Generates comprehensive plugin documentation based on existing JSDoc comments - */ -export class PluginDocumentationGenerator { - private fullDocumentationGenerator: FullDocumentationGenerator; - constructor( - private aiService: AIService, - private gitManager: GitManager, - private configuration: Configuration - ) { - this.fullDocumentationGenerator = new FullDocumentationGenerator(configuration); - } - - /** - * Generates comprehensive plugin documentation - * @param {ASTQueueItem[]} existingDocs - Queue of documented items - * @param {string} branchName - Current git branch name - * @param {TodoItem[]} todoItems - List of TODO items found in the codebase - * @param {EnvUsage[]} envUsages - List of environment variable usages - */ - public async generate( - existingDocs: ASTQueueItem[], - branchName?: string, - todoItems: TodoItem[] = [], - envUsages: EnvUsage[] = [] - ): Promise { - // Read package.json - const packageJsonPath = path.join( - this.configuration.absolutePath, - "package.json" - ); - const packageJson = JSON.parse( - fs.readFileSync(packageJsonPath, "utf-8") - ); - if (!packageJson) { - console.error("package.json not found"); - } - // Generate documentation - const documentation = await this.fullDocumentationGenerator.generatePluginDocumentation({ - existingDocs, - packageJson, - todoItems, - envUsages, - }); - - // Generate markdown content - const markdownContent = this.generateMarkdownContent( - documentation, - packageJson - ); - - // Only commit the file if we're in a branch - if (branchName) { - // Use the configuration's relative path to determine the correct README location - const relativeReadmePath = path.join( - this.configuration.relativePath, - "README-automated.md" - ); - - // Commit the file to the correct location - await this.gitManager.commitFile( - branchName, - relativeReadmePath, - markdownContent, - "docs: Update plugin documentation" - ); - } else { - console.error( - "No branch name provided, skipping commit for README-automated.md" - ); - } - } - - private generateMarkdownContent( - docs: PluginDocumentation, - packageJson: any - ): string { - return `# ${packageJson.name} Documentation - -## Overview -${docs.overview} - -## Installation -${docs.installation} - -## Configuration -${docs.configuration} - -## Features - -### Actions -${docs.actionsDocumentation} - -### Providers -${docs.providersDocumentation} - -### Evaluators -${docs.evaluatorsDocumentation} - -## Usage Examples -${docs.usage} - -## FAQ -${docs.faq} - -## Development - -### TODO Items -${docs.todos} - -## Troubleshooting Guide -${docs.troubleshooting}`; - } -} diff --git a/scripts/jsdoc-automation/src/TypeScriptFileIdentifier.ts b/scripts/jsdoc-automation/src/TypeScriptFileIdentifier.ts deleted file mode 100644 index 4f8f0a9304cc..000000000000 --- a/scripts/jsdoc-automation/src/TypeScriptFileIdentifier.ts +++ /dev/null @@ -1,29 +0,0 @@ -import * as fs from "fs"; -import * as path from "path"; - -/** - * Class representing a TypeScript file identifier. - */ -export class TypeScriptFileIdentifier { - /** - * Check if the given file is a TypeScript file based on its extension. - * - * @param {string} file - The file to check. - * @returns {boolean} Returns true if the file is a TypeScript file (.ts or .tsx), otherwise false. - */ - public isTypeScriptFile(file: string): boolean { - const extension = path.extname(file); - return extension === ".ts" || extension === ".tsx"; - } - - /** - * Retrieves an array of TypeScript files from the specified directory. - * - * @param {string} directory - The directory path to search for TypeScript files. - * @returns {string[]} - An array of TypeScript files found in the directory. - */ - public getTypeScriptFiles(directory: string): string[] { - const files = fs.readdirSync(directory); - return files.filter((file) => this.isTypeScriptFile(file)); - } -} diff --git a/scripts/jsdoc-automation/src/TypeScriptParser.ts b/scripts/jsdoc-automation/src/TypeScriptParser.ts deleted file mode 100644 index e19ceed9d868..000000000000 --- a/scripts/jsdoc-automation/src/TypeScriptParser.ts +++ /dev/null @@ -1,158 +0,0 @@ -import * as fs from "fs"; -import { parse, type ParserOptions } from "@typescript-eslint/parser"; -import { type ActionBounds, ActionMetadata } from "./types"; - -/** - * A class for parsing TypeScript files. - */ -export class TypeScriptParser { - /** - * Parses the content of a file using the given file path. - * - * @param {string} file - The file path containing the content to be parsed. - * @returns {any} The abstract syntax tree (AST) representation of the parsed content. - */ - public parse(file: string): any { - try { - const content = fs.readFileSync(file, "utf-8"); - const parserOptions: ParserOptions = { - sourceType: "module", - ecmaVersion: 2020, - ecmaFeatures: { - jsx: true, - }, - range: true, - loc: true, - tokens: true, - comment: true, - errorOnUnknownASTType: false, - errorOnTypeScriptSyntacticAndSemanticIssues: false, - }; - - const ast = parse(content, parserOptions); - if (!ast || typeof ast !== "object") { - console.warn(`Warning: Invalid AST generated for file ${file}`); - return null; - } - return ast; - } catch (error) { - if (error instanceof Error) { - this.handleParseError(error); - } else { - console.error("Unknown error:", error); - } - return null; - } - } - - public extractExports(file: string): { - actions: string[]; - providers: string[]; - evaluators: string[]; - } { - //const content = fs.readFileSync(file, 'utf-8'); - const ast = this.parse(file); - - const exports: { - actions: string[]; - providers: string[]; - evaluators: string[]; - } = { - actions: [], - providers: [], - evaluators: [], - }; - - if (ast) { - // Traverse the AST to find export declarations - ast.body.forEach((node: any) => { - if (node.type === "ImportDeclaration") { - const source = node.source.value; - if (source.startsWith("./actions/")) { - exports.actions.push(source); - } else if (source.startsWith("./providers/")) { - exports.providers.push(source); - } else if (source.startsWith("./evaluators/")) { - exports.evaluators.push(source); - } - } - }); - } - - return exports; - } - - public findActionBounds(ast: any): ActionBounds | null { - let startLine: number | null = null; - let endLine: number | null = null; - let actionNameStartLine: number | null = null; - - // write ast to json file - // fs.writeFileSync("ast.json", JSON.stringify(ast, null, 2)); - - const findActionTypeAnnotation = (node: any) => { - // Look for Action type annotation - if ( - node?.typeAnnotation?.typeAnnotation?.typeName?.name === - "Action" - ) { - startLine = node.loc.start.line; - } - - // Look for ActionExample type annotation to find the end - if ( - node?.typeAnnotation?.elementType?.elementType?.typeName - ?.name === "ActionExample" - ) { - endLine = node.loc.end.line; - } - - // Backup: Look for action name property - if ( - node?.type === "Property" && - node?.key?.type === "Identifier" && - node?.key?.name === "name" && - node?.value?.type === "Literal" - ) { - actionNameStartLine = node.loc.start.line; - } - - // Recursively search in child nodes - for (const key in node) { - if (node[key] && typeof node[key] === "object") { - if (Array.isArray(node[key])) { - node[key].forEach(findActionTypeAnnotation); - } else { - findActionTypeAnnotation(node[key]); - } - } - } - }; - - findActionTypeAnnotation(ast); - - // If we found a valid end line but no start line, use the action name line as fallback - if (!startLine && actionNameStartLine && endLine) { - console.log("Using action name line as fallback"); - startLine = actionNameStartLine; - } - - if (startLine && endLine) { - return { startLine, endLine }; - } - - return null; - } - - public extractActionCode(filePath: string, bounds: ActionBounds): string { - const fileContent = fs.readFileSync(filePath, "utf-8"); - const lines = fileContent.split("\n"); - - // Extract lines from start to end (inclusive) - return lines.slice(bounds.startLine - 1, bounds.endLine).join("\n"); - } - - private handleParseError(error: Error): void { - console.error("Error parsing TypeScript file:", error.message); - } -} diff --git a/scripts/jsdoc-automation/src/index.ts b/scripts/jsdoc-automation/src/index.ts deleted file mode 100644 index 571cb78a52b0..000000000000 --- a/scripts/jsdoc-automation/src/index.ts +++ /dev/null @@ -1,156 +0,0 @@ -import { DirectoryTraversal } from "./DirectoryTraversal.js"; -import { TypeScriptParser } from "./TypeScriptParser.js"; -import { JsDocAnalyzer } from "./JsDocAnalyzer.js"; -import { JsDocGenerator } from "./JsDocGenerator.js"; -import { DocumentationGenerator } from "./DocumentationGenerator.js"; -import { Configuration } from "./Configuration.js"; -import { AIService } from "./AIService/AIService.js"; -import { GitManager } from "./GitManager.js"; -import { PluginDocumentationGenerator } from "./PluginDocumentationGenerator.js"; - -/** - * Main function for generating documentation. - * Uses configuration initialized from the GitHub workflow file. - * @async - */ -async function main() { - try { - const configuration = new Configuration(); - - const gitManager = new GitManager({ - owner: configuration.repository.owner, - name: configuration.repository.name, - }); - - let prFiles: string[] = []; - if ( - typeof configuration.repository.pullNumber === "number" && - !isNaN(configuration.repository.pullNumber) - ) { - console.log( - "Pull Request Number: ", - configuration.repository.pullNumber - ); - try { - const files = await gitManager.getFilesInPullRequest( - configuration.repository.pullNumber - ); - prFiles = files.map((file) => file.filename); - } catch (prError) { - console.error("Error fetching PR files:", { - error: prError, - pullNumber: configuration.repository.pullNumber, - repository: `${configuration.repository.owner}/${configuration.repository.name}`, - }); - throw prError; - } - } - - try { - const directoryTraversal = new DirectoryTraversal( - configuration, - prFiles - ); - const typeScriptParser = new TypeScriptParser(); - const jsDocAnalyzer = new JsDocAnalyzer(typeScriptParser); - const aiService = new AIService(configuration); - const jsDocGenerator = new JsDocGenerator(aiService); - - const documentationGenerator = new DocumentationGenerator( - directoryTraversal, - typeScriptParser, - jsDocAnalyzer, - jsDocGenerator, - gitManager, - configuration, - aiService - ); - - const pluginDocGenerator = new PluginDocumentationGenerator( - aiService, - gitManager, - configuration - ); - - const { todoItems, envUsages } = - await documentationGenerator.analyzeCodebase(); - - // Generate JSDoc documentation first - const { documentedItems, branchName } = - await documentationGenerator.generate( - configuration.repository.pullNumber - ); - - // If both are true, use JSDoc branch for README - // If only README is true, create new branch - if (configuration.generateReadme) { - const targetBranch = - configuration.generateJsDoc && branchName - ? branchName - : `docs-update-readme-${Date.now()}`; - - if (!configuration.generateJsDoc) { - await gitManager.createBranch( - targetBranch, - configuration.branch - ); - } - - await pluginDocGenerator.generate( - documentedItems, - targetBranch, - todoItems, - envUsages - ); - - // Only create PR if we're not also generating JSDoc (otherwise changes go in JSDoc PR) - if (!configuration.generateJsDoc) { - const prContent = { - title: "docs: Update plugin documentation", - body: "Updates plugin documentation with latest changes", - }; - - await gitManager.createPullRequest({ - title: prContent.title, - body: prContent.body, - head: targetBranch, - base: configuration.branch, - labels: ["documentation", "automated-pr"], - reviewers: configuration.pullRequestReviewers || [], - }); - } - } - } catch (error) { - console.error("Error during documentation generation:", { - message: error instanceof Error ? error.message : String(error), - stack: error instanceof Error ? error.stack : undefined, - timestamp: new Date().toISOString(), - }); - process.exit(1); - } - } catch (error) { - console.error("Critical error during documentation generation:", { - error: - error instanceof Error - ? { - name: error.name, - message: error.message, - stack: error.stack, - } - : error, - timestamp: new Date().toISOString(), - nodeVersion: process.version, - platform: process.platform, - }); - process.exit(1); - } -} - -// Simple error handling for the main function -main().catch((error) => { - console.error( - "Fatal error:", - error instanceof Error ? error.message : String(error) - ); - process.exit(1); -}); diff --git a/scripts/jsdoc-automation/src/types/index.ts b/scripts/jsdoc-automation/src/types/index.ts deleted file mode 100644 index 86a2f0369ced..000000000000 --- a/scripts/jsdoc-automation/src/types/index.ts +++ /dev/null @@ -1,94 +0,0 @@ -import type { TSESTree } from "@typescript-eslint/types"; - -export interface ASTQueueItem { - name: string; - filePath: string; - startLine: number; - endLine: number; - nodeType: string; - code: string; - className?: string; - methodName?: string; - jsDoc?: string; -} - -export interface Repository { - owner: string; - name: string; - pullNumber?: number; -} - -export interface FullModeFileChange { - filename: string; - status: string; -} - -export interface PrModeFileChange extends FullModeFileChange { - additions: number; - deletions: number; - changes: number; - contents_url: string; -} - -export interface TodoSection { - todos: string; - todoCount: number; -} - -export interface TodoItem { - comment: string; - code: string; - fullContext: string; - node: TSESTree.Node; - location: { - start: { line: number; column: number }; - end: { line: number; column: number }; - }; - contextLocation: { - start: { line: number; column: number }; - end: { line: number; column: number }; - }; -} - -export interface EnvUsage { - code: string; - context: string; - fullContext: string; - node: TSESTree.Node; - location: { - start: { line: number; column: number }; - end: { line: number; column: number }; - }; - contextLocation: { - start: { line: number; column: number }; - end: { line: number; column: number }; - }; -} - -export interface PluginDocumentation { - overview: string; - installation: string; - configuration: string; - usage: string; - apiReference: string; - troubleshooting: string; - todos: string; - actionsDocumentation: string; - providersDocumentation: string; - evaluatorsDocumentation: string; - faq: string; -} - -export interface ActionMetadata { - name: string; - similes: string[]; - validate: string; - handler: string; - examples: string[]; - description: string; -} - -export interface ActionBounds { - startLine: number; - endLine: number; -} diff --git a/scripts/jsdoc-automation/src/utils/prompts.ts b/scripts/jsdoc-automation/src/utils/prompts.ts deleted file mode 100644 index 5a7ac0a589fa..000000000000 --- a/scripts/jsdoc-automation/src/utils/prompts.ts +++ /dev/null @@ -1,232 +0,0 @@ -import type { OrganizedDocs } from "../AIService/types"; - -export const PROMPT_TEMPLATES = { - overview: (packageJson: any, docs: OrganizedDocs) => ` - Using the provided JSDoc as context, create a comprehensive documentation overview, FAQ, and Troubleshooting section for ${packageJson.name}. Return the response in the following JSON structure: - { - "overview": { - "purpose": "A comprehensive paragraph explaining the main purpose", - "keyFeatures": "List of key features and capabilities" - }, - "faq": [ - { - "question": "Common question based on the code structure and functionality", - "answer": "Detailed answer with examples if applicable" - } - ], - "troubleshooting": { - "commonIssues": [ - { - "issue": "Potential issue based on code structure", - "cause": "Likely cause", - "solution": "How to solve it" - } - ], - "debuggingTips": [ - "Relevant debugging tips based on the codebase" - ] - } - } - - Base your response on the following package and code information: - - Package Information: - - Name: ${packageJson.name} - - Description: ${packageJson.description || "N/A"} - - Code Components: - ${docs.classes.length > 0 ? ` - Classes: - ${docs.classes.map((c) => `- ${c.name}: ${c.jsDoc}`).join("\n")}` : ""} - - ${docs.interfaces.length > 0 ? ` - Interfaces: - ${docs.interfaces.map((i) => `- ${i.name}: ${i.jsDoc}`).join("\n")}` : ""} - - ${docs.types.length > 0 ? ` - Types: - ${docs.types.map((t) => `- ${t.name}: ${t.jsDoc}`).join("\n")}` : ""} - - ${docs.functions.length > 0 ? ` - Functions: - ${docs.functions.map((f) => `- ${f.name}: ${f.jsDoc}`).join("\n")}` : ""} - - ${docs.variables.length > 0 ? ` - Variables: - ${docs.variables.map((v) => `- ${v.name}: ${v.jsDoc}`).join("\n")}` : ""} - - Based on the above components, generate: - 1. A comprehensive overview that explains the plugin's purpose and key features - 2. FAQ entries that cover the following aspects of the code: - - Action questions: Can the Action do this? - - Capability questions: For example, Can the Action, Provider, or Evaluator do this in its current state? - - Integration questions: For example, How to extend this aspect of the code? - - Common use-case questions: For example, How do I accomplish specific tasks with the code as it stands today? - 3. Troubleshooting guide that anticipates potential issues based on the code structure - - Always include one FAQ pair that states: - Q: "My action is registered, but the agent is not calling it" - A: "Ensure that action's name clearly aligns with the task, and ensure you give a detailed description of the conditions that should trigger the action" - - Heres some content from this codebases documentation to help you provide a more accurate Overview, FAQ, and Troubleshooting: - - Providers are core modules that inject dynamic context and real-time information into agent interactions. They serve as a bridge between the agent and various external systems, enabling access to market data, wallet information, sentiment analysis, and temporal context. - Overview - A provider's primary purpose is to: - Supply dynamic contextual information - Integrate with the agent runtime - Format information for conversation templates - Maintain consistent data access - - Actions are core building blocks in Eliza that define how agents respond to and interact with messages. They allow agents to interact with external systems, modify their behavior, and perform tasks beyond simple message responses. - Overview - Each Action consists of: - name: Unique identifier for the action - similes: Array of alternative names/variations - description: Detailed explanation of the action's purpose - validate: Function that checks if action is appropriate - handler: Implementation of the action's behavior - examples: Array of example usage patterns - - Evaluators are core components that assess and extract information from conversations. They integrate with the AgentRuntime's evaluation system. - Overview - Evaluators enable agents to: - Build long-term memory - Track goal progress - Extract facts and insights - Maintain contextual awareness - - - Create your FAQ and Troubleshooting based on likely questions and issues that users will have based on the documentation provided above. - Format the response as a valid JSON object. For the FAQ try and have at least 5-6 questions and answers. - - IMPORTANT: Return only the raw JSON object without any markdown formatting or code blocks. - `, - - installation: `Create installation instructions with the following structure: - -### Prerequisites -[List any prerequisites] - -### Steps -1. [First step with code example if needed] -2. [Second step with code example if needed] -[Number each step clearly] - -### Verification -[How to verify successful installation] - -Format in markdown without adding any additional headers.`, - - configuration: `Create configuration documentation with the following structure: - -### Environment Variables -[Table or list of all environment variables with descriptions] - -### Example Configuration -\`\`\`env -[Example .env file] -\`\`\` - -### Important Notes -[Any important notes about configuration] - -Format in markdown without adding any additional headers.`, - - actionDoc: `Generate documentation for this action with the following structure: - -### [action name] -[Brief description of the action] - -#### Properties -- Name: [action name] -- Similes: [list of similes] - -#### Handler -[Description of what the handler does] - -#### Examples -[Use Examples object in Action code to give a Natural language example replace {{user2}} with "Agent" and {{user1}} with "User"] - -Format in markdown without adding any additional headers.`, - - providerDoc: `Generate documentation for this provider with the following structure: - -### [Provider Name] -[Brief description of the provider] - -#### Methods -[Textual description of the get() method and its functionality.] - -Format in markdown without adding any additional headers.`, - - fileUsageDoc: `Determine multiple use cases for the provided code, and give examples of how to use the code: - -### Common Use Cases -1. [First use case with code example] -2. [Second use case with code example] - -### Best Practices -- [Best practice 1] -- [Best practice 2] - -Format in markdown without adding any additional headers.`, - - fileApiDoc: `Generate API reference documentation with the following structure: - -### Classes -\`\`\`typescript -[List each class with its methods and properties] -\`\`\` -### Interfaces -\`\`\`typescript -[List each interface with its properties] -\`\`\` - -### Types -\`\`\`typescript -[List each type with its definition] -\`\`\` - -### Functions -\`\`\`typescript -[List each function with its parameters and return type] -\`\`\` - - -Create a comprehensive API reference including: -1. Class descriptions and methods -2. Method signatures and parameters -3. Return types and values -4. Interface definitions -5. Type definitions -6. Examples for complex APIs - -Format the response in markdown with proper headings and code blocks.`, - - todos: `Generate TODO documentation with the following structure, DO NOT return the context/code rather a description of the code and how the todo is related to the code, if no todos are provided return "No todos found in the code": - -### Items -1. [First TODO item] - - Context: [describe the code associated with the todo] - - Type: [bug/feature/enhancement] -2. [Second TODO item] - - Context: [describe the code associated with the todo] - - Type: [bug/feature/enhancement] - -Format in markdown without adding any additional headers.`, - - troubleshooting: `Generate troubleshooting guide with the following structure: - -### Common Issues -1. [First issue] - - Cause: [cause of the issue] - - Solution: [how to solve it] - -### Debugging Tips -- [First debugging tip] -- [Second debugging tip] -- Ask your questions at https://eliza.gg/ 🚀 or in our discord - -Format in markdown without adding any additional headers.`, -}; diff --git a/scripts/jsdoc-automation/tsconfig.json b/scripts/jsdoc-automation/tsconfig.json deleted file mode 100644 index d047e7915256..000000000000 --- a/scripts/jsdoc-automation/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "target": "ES2020", - "module": "ESNext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist"] -} diff --git a/scripts/jsdoc-automation/tsup.config.ts b/scripts/jsdoc-automation/tsup.config.ts deleted file mode 100644 index 6a0b0944074c..000000000000 --- a/scripts/jsdoc-automation/tsup.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - format: ["cjs", "esm"], - dts: true, - splitting: false, - sourcemap: true, - clean: true, - target: "node16", - outDir: "dist", - treeshake: true, -}); diff --git a/scripts/smokeTests.sh b/scripts/smokeTests.sh deleted file mode 100755 index 1ce655d104fe..000000000000 --- a/scripts/smokeTests.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/bash - -# Strict mode, exit on error, undefined variables, and pipe failures -set -euo pipefail - -# Print some information about the environment to aid in case of troubleshooting - -echo "node version:" -node --version - -echo "python version:" -python3 --version - -echo "make version:" -make --version - -echo "gcc version:" -gcc --version - -echo "g++ version:" -g++ --version - -# Check Node.js version -REQUIRED_NODE_VERSION=23 -CURRENT_NODE_VERSION=$(node -v | cut -d'.' -f1 | sed 's/v//') - -if (( CURRENT_NODE_VERSION < REQUIRED_NODE_VERSION )); then - echo "Error: Node.js version must be $REQUIRED_NODE_VERSION or higher. Current version is $CURRENT_NODE_VERSION." - exit 1 -fi - -# Autodetect project directory relative to this script's path -PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" - -cd "$PROJECT_DIR" - -cp .env.example .env - -pnpm clean - -pnpm install -r --no-frozen-lockfile - -pnpm build - -# Create temp file and ensure cleanup -OUTFILE="$(mktemp)" -trap 'rm -f "$OUTFILE"' EXIT -echo "Using temporary output file: $OUTFILE" - -# Add timeout configuration -TIMEOUT=1200 # 60 seconds represented as 600 tenths of a second -INTERVAL=5 # Represent 0.5 seconds as 5 tenths of a second -TIMER=0 - -# Start the application and capture logs in the background -# 27 includes success and that's what the level we're looking for is -DEFAULT_LOG_LEVEL=success pnpm start --character=characters/trump.character.json > "$OUTFILE" 2>&1 & - -APP_PID=$! # Capture the PID of the background process - -( - # Wait for the ready message with timeout - while true; do - if (( TIMER >= TIMEOUT )); then - >&2 echo "ERROR: Timeout waiting for application to start after $((TIMEOUT / 10)) seconds" - cat $OUTFILE - kill $APP_PID # Terminate the pnpm process - exit 1 - fi - - if grep -q "REST API bound to 0.0.0.0" "$OUTFILE"; then - >&2 echo "SUCCESS: Direct Client API is ready! Proceeding..." - break - fi - - sleep 0.5 - TIMER=$((TIMER + INTERVAL)) - done -) - -# Gracefully terminate the application if needed -kill $APP_PID -wait $APP_PID 2>/dev/null || true # Ensure the process is cleaned up - -RESULT=$? - -# Output logs -echo "----- OUTPUT START -----" -cat "$OUTFILE" -echo "----- OUTPUT END -----" - -# Check the application exit code -if [[ $RESULT -ne 0 ]]; then - echo "Error: 'pnpm start' command exited with an error (code: $RESULT)" - exit 1 -fi - -# Final validation -if grep -q "Server closed successfully" "$OUTFILE"; then - echo "Smoke Test completed successfully." -else - echo "Error: The output does not contain the expected termination message but was completed." - echo "Smoke Test completed without completion message." - # Exit gracefully -fi diff --git a/scripts/test.sh b/scripts/test.sh deleted file mode 100644 index 67883df45977..000000000000 --- a/scripts/test.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/bash - -# Check Node.js version -REQUIRED_NODE_VERSION=22 -CURRENT_NODE_VERSION=$(node -v | cut -d'.' -f1 | sed 's/v//') - -if ((CURRENT_NODE_VERSION < REQUIRED_NODE_VERSION)); then - echo "Error: Node.js version must be $REQUIRED_NODE_VERSION or higher. Current version is $CURRENT_NODE_VERSION." - exit 1 -fi - -# Navigate to the script's directory -cd "$(dirname "$0")"/.. - -# If specific test file provided, run just that -if [[ "$1" == *".ts" ]]; then - echo -e "\033[1mRunning specific test: $1\033[0m" - node --experimental-vm-modules $(which jest) "$1" - exit $? -fi - -# If package name provided, run just that package -if [ ! -z "$1" ]; then - package="$1" - package_path="packages/$package" - - if [ ! -d "$package_path" ]; then - echo -e "\033[1mPackage directory '$package' not found\033[0m" - exit 1 - fi - - echo -e "\033[1mTesting package: $package\033[0m" - # Use find to get all test files and pass them explicitly to jest - test_files=$(find "packages/$package/src" -name "*.test.ts" -type f) - if [ -z "$test_files" ]; then - echo "No test files found" - exit 1 - fi - echo "Found test files:" - echo "$test_files" - node --experimental-vm-modules $(which jest) $test_files - exit $? -fi - -# Check if the packages directory exists -if [ ! -d "packages" ]; then - echo "Error: 'packages' directory not found." - exit 1 -fi - -# Find all packages under the packages directory -PACKAGES=($(find packages -mindepth 1 -maxdepth 1 -type d -exec basename {} \;)) - -# Test packages in specified order -for package in "${PACKAGES[@]}"; do - package_path="packages/$package" - - if [ ! -d "$package_path" ]; then - echo -e "\033[1mPackage directory '$package' not found, skipping...\033[0m" - continue - fi - - echo -e "\033[1mTesting package: $package\033[0m" - cd "$package_path" || continue - - if [ -f "package.json" ]; then - # Run tests with coverage if TEST_COVERAGE is set and test:coverage script exists - if [[ -n "$TEST_COVERAGE" ]] && npm run | grep -q " test:coverage"; then - echo -e "\033[1mRunning coverage tests for package: $package\033[0m" - if npm run test:coverage; then - echo -e "\033[1;32mSuccessfully tested $package with coverage\033[0m\n" - else - echo -e "\033[1;31mCoverage tests failed for $package\033[0m" - fi - # Otherwise, run regular tests if available - elif npm run | grep -q " test"; then - echo -e "\033[1mRunning tests for package: $package\033[0m" - if npm run test; then - echo -e "\033[1;32mSuccessfully tested $package\033[0m\n" - else - echo -e "\033[1;31mTests failed for $package\033[0m" - fi - else - echo "No test script found in $package, skipping tests..." - fi - else - echo "No package.json found in $package, skipping..." - fi - - cd - >/dev/null || exit -done - -echo -e "\033[1mTest process completed.😎\033[0m"