diff --git a/.github/workflows/build-image-preview.yml b/.github/workflows/build-image-preview.yml deleted file mode 100644 index 34380b5e..00000000 --- a/.github/workflows/build-image-preview.yml +++ /dev/null @@ -1,147 +0,0 @@ -name: Preview build image - -on: - workflow_dispatch: - pull_request_target: - branches: ['*'] - -permissions: - contents: read - packages: write - attestations: write - id-token: write - pull-requests: write - -jobs: - preview-image: - runs-on: ubuntu-24.04 - - steps: - - name: Get PR changed files via API - id: pr-files - run: | - PR_NUMBER=${{ github.event.number }} - REPO=${{ github.repository }} - TOKEN=${{ secrets.GITHUB_TOKEN }} - - RESPONSE=$(curl -s -H "Authorization: token $TOKEN" \ - "https://api.github.com/repos/$REPO/pulls/$PR_NUMBER/files") - - FILES=$(echo "$RESPONSE" | jq -r '.[].filename') - - echo "All changed files:" - echo "$FILES" - - PACKAGE_CHANGES="" - - # Extract package names from changed files - for file in $FILES; do - if [[ "$file" == modules/tool/packages/* ]]; then - echo "Found package file: $file" - - # Extract package directory name - PACKAGE_NAME=$(echo "$file" | cut -d'/' -f4) - echo "Found package directory: $PACKAGE_NAME" - - # Add to package changes if not already present - if [[ ! " $PACKAGE_CHANGES " =~ " $PACKAGE_NAME " ]]; then - if [ -z "$PACKAGE_CHANGES" ]; then - PACKAGE_CHANGES="$PACKAGE_NAME" - else - PACKAGE_CHANGES="$PACKAGE_CHANGES $PACKAGE_NAME" - fi - fi - fi - done - - echo "Package changes detected: $PACKAGE_CHANGES" - echo "package_changes=$PACKAGE_CHANGES" >> $GITHUB_OUTPUT - - - name: Set sparse checkout environment variable - run: | - echo "SPARSE_CHECKOUT_CONFIG<> $GITHUB_ENV - echo "/*" >> $GITHUB_ENV - echo "EOF" >> $GITHUB_ENV - - - name: Checkout repository - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - sparse-checkout-cone-mode: false - sparse-checkout: ${{ env.SPARSE_CHECKOUT_CONFIG }} - - - name: Setup bun - uses: oven-sh/setup-bun@v2 - - - name: Install dependencies - run: bun install --frozen-lockfile && bun run install:plugins - - - name: Build pkg - run: bun run build:pkg - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Aliyun Container Registry - uses: docker/login-action@v3 - with: - registry: registry.cn-hangzhou.aliyuncs.com - username: ${{ secrets.ALI_HUB_USERNAME }} - password: ${{ secrets.ALI_HUB_PASSWORD }} - - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - platforms: linux/amd64 - push: true - tags: | - ${{ secrets.ALI_IMAGE_NAME }}/fastgpt-plugin-pr:${{ github.event.pull_request.head.sha }} - labels: | - org.opencontainers.image.source=https://github.com/${{ github.repository }} - org.opencontainers.image.description=https://github.com/${{ github.repository }} image - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache - - - name: Add PR comment on success - if: success() - uses: actions/github-script@v6 - with: - script: | - const { data: comments } = await github.rest.issues.listComments({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - }); - - const existingComment = comments.find(comment => - comment.body.includes('Preview Images for this PR') && - comment.user.type === 'Bot' - ); - - const commentBody = ` - ✅ **Build Successful** - Preview Images for this PR: - - \`\`\` - ${{ secrets.ALI_IMAGE_NAME }}/fastgpt-plugin-pr:${{ github.event.pull_request.head.sha }} - \`\`\` - - **Changed packages:** - ${{ steps.pr-files.outputs.package_changes || 'None' }} - `; - - if (existingComment) { - await github.rest.issues.updateComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: existingComment.id, - body: commentBody - }); - } else { - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - body: commentBody - }); - } diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 04e0a1fe..01023cc7 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -99,8 +99,8 @@ jobs: uses: docker/login-action@v3 with: registry: registry.cn-hangzhou.aliyuncs.com - username: ${{ secrets.ALI_HUB_USERNAME }} - password: ${{ secrets.ALI_HUB_PASSWORD }} + username: ${{ secrets.FASTGPT_ALI_IMAGE_USER }} + password: ${{ secrets.FASTGPT_ALI_IMAGE_PSW }} - name: Create manifest list and push working-directory: /tmp/digests @@ -110,9 +110,9 @@ jobs: GITHUB_LATEST="ghcr.io/${{ github.repository_owner }}/fastgpt-plugin:latest" GITHUB_SHA="ghcr.io/${{ github.repository_owner }}/fastgpt-plugin:${{ github.sha }}" - ALI_TAG="${{ secrets.ALI_IMAGE_NAME }}/fastgpt-plugin:${{ github.ref_name }}" - ALI_LATEST="${{ secrets.ALI_IMAGE_NAME }}/fastgpt-plugin:latest" - ALI_SHA="${{ secrets.ALI_IMAGE_NAME }}/fastgpt-plugin:${{ github.sha }}" + ALI_TAG="${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-plugin:${{ github.ref_name }}" + ALI_LATEST="${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-plugin:latest" + ALI_SHA="${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-plugin:${{ github.sha }}" DOCKER_TAG="${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-plugin:${{ github.ref_name }}" DOCKER_LATEST="${{ secrets.DOCKER_IMAGE_NAME }}/fastgpt-plugin:latest" diff --git a/.github/workflows/preview-build.yml b/.github/workflows/preview-build.yml new file mode 100644 index 00000000..78a29c21 --- /dev/null +++ b/.github/workflows/preview-build.yml @@ -0,0 +1,112 @@ +name: Preview Image — Build + +on: + pull_request: + types: [opened, synchronize, reopened] + branches: ['*'] + +# Only one build per PR branch at a time +concurrency: + group: 'preview-build-${{ github.head_ref }}' + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-24.04 + + steps: + - name: Get PR changed files via API + id: pr-files + env: + GH_TOKEN: ${{ github.token }} + run: | + PR_NUMBER=${{ github.event.number }} + REPO=${{ github.repository }} + + RESPONSE=$(gh api repos/$REPO/pulls/$PR_NUMBER/files) + + FILES=$(echo "$RESPONSE" | jq -r '.[].filename') + + echo "All changed files:" + echo "$FILES" + + PACKAGE_CHANGES="" + + # Extract package names from changed files + for file in $FILES; do + if [[ "$file" == modules/tool/packages/* ]]; then + echo "Found package file: $file" + + # Extract package directory name + PACKAGE_NAME=$(echo "$file" | cut -d'/' -f4) + echo "Found package directory: $PACKAGE_NAME" + + # Add to package changes if not already present + if [[ ! " $PACKAGE_CHANGES " =~ " $PACKAGE_NAME " ]]; then + if [ -z "$PACKAGE_CHANGES" ]; then + PACKAGE_CHANGES="$PACKAGE_NAME" + else + PACKAGE_CHANGES="$PACKAGE_CHANGES $PACKAGE_NAME" + fi + fi + fi + done + + echo "Package changes detected: $PACKAGE_CHANGES" + echo "$PACKAGE_CHANGES" > /tmp/package-changes.txt + + - name: Set sparse checkout environment variable + run: | + echo "SPARSE_CHECKOUT_CONFIG<> $GITHUB_ENV + echo "/*" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + + - name: Checkout PR code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + sparse-checkout-cone-mode: false + sparse-checkout: ${{ env.SPARSE_CHECKOUT_CONFIG }} + + - name: Setup bun + uses: oven-sh/setup-bun@v2 + + - name: Install dependencies + run: bun install --frozen-lockfile && bun run install:plugins + + - name: Build pkg + run: bun run build:pkg + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Docker image (no push) + uses: docker/build-push-action@v6 + with: + context: . + platforms: linux/amd64 + push: false + tags: fastgpt-plugin-pr:${{ github.event.pull_request.head.sha }} + outputs: type=docker,dest=/tmp/image.tar + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Save PR metadata + run: | + echo "${{ github.event.pull_request.number }}" > /tmp/pr-number.txt + echo "${{ github.event.pull_request.head.sha }}" > /tmp/pr-sha.txt + + - name: Upload Docker image artifact + uses: actions/upload-artifact@v4 + with: + name: preview-image + path: | + /tmp/image.tar + /tmp/pr-number.txt + /tmp/pr-sha.txt + /tmp/package-changes.txt + retention-days: 1 diff --git a/.github/workflows/preview-push.yml b/.github/workflows/preview-push.yml new file mode 100644 index 00000000..5d001cee --- /dev/null +++ b/.github/workflows/preview-push.yml @@ -0,0 +1,106 @@ +name: Preview Image — Push + +on: + workflow_run: + workflows: ['Preview Image — Build'] + types: [completed] + +# Only one push at a time +concurrency: + group: 'preview-push' + cancel-in-progress: false + +permissions: + contents: read + packages: write + attestations: write + id-token: write + pull-requests: write + actions: read + +jobs: + push: + runs-on: ubuntu-24.04 + # Only push when the build succeeded + if: ${{ github.event.workflow_run.conclusion == 'success' }} + + steps: + - name: Download build artifact + uses: actions/download-artifact@v4 + with: + name: preview-image + path: /tmp + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Read PR metadata + id: pr + run: | + echo "number=$(cat /tmp/pr-number.txt)" >> "$GITHUB_OUTPUT" + echo "sha=$(cat /tmp/pr-sha.txt)" >> "$GITHUB_OUTPUT" + echo "package_changes=$(cat /tmp/package-changes.txt)" >> "$GITHUB_OUTPUT" + + - name: Load Docker image + run: docker load --input /tmp/image.tar + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Aliyun Container Registry + uses: docker/login-action@v3 + with: + registry: registry.cn-hangzhou.aliyuncs.com + username: ${{ secrets.FASTGPT_ALI_IMAGE_USER }} + password: ${{ secrets.FASTGPT_ALI_IMAGE_PSW }} + + - name: Tag and push Docker image + run: | + docker tag fastgpt-plugin-pr:${{ steps.pr.outputs.sha }} \ + ${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-plugin-pr:${{ steps.pr.outputs.sha }} + docker push ${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-plugin-pr:${{ steps.pr.outputs.sha }} + + - name: Add PR comment on success + if: success() && steps.pr.outputs.number != '' + uses: actions/github-script@v7 + with: + script: | + const prNumber = parseInt('${{ steps.pr.outputs.number }}'); + const marker = ''; + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + }); + + const existingComment = comments.find(comment => + comment.body.includes(marker) + ); + + const commentBody = `${marker} + ✅ **Build Successful** - Preview Images for this PR: + + \`\`\` + ${{ secrets.FASTGPT_ALI_IMAGE_PREFIX }}/fastgpt-plugin-pr:${{ steps.pr.outputs.sha }} + \`\`\` + + **Changed packages:** + ${{ steps.pr.outputs.package_changes || 'None' }} + `; + + if (existingComment) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existingComment.id, + body: commentBody + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body: commentBody + }); + } + diff --git a/bun.lock b/bun.lock index 5e5a4355..c1ff1d40 100644 --- a/bun.lock +++ b/bun.lock @@ -39,25 +39,12 @@ "name": "@fastgpt-plugin/packages", "version": "1.0.0", "dependencies": { + "@fastgpt-sdk/logger": "^0.1.1", "@fastgpt-sdk/storage": "^0.6.15", "@hono/node-server": "^1.19.9", - "@logtape/logtape": "^1.3.6", - "@logtape/otel": "^1.3.6", - "@logtape/pretty": "^1.3.6", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.203.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.203.0", - "@opentelemetry/exporter-metrics-otlp-http": "^0.203.0", - "@opentelemetry/instrumentation-express": "^0.35.0", - "@opentelemetry/instrumentation-http": "^0.49.0", - "@opentelemetry/resources": "^2.0.1", - "@opentelemetry/sdk-logs": "^0.203.0", - "@opentelemetry/sdk-metrics": "^2.0.1", "@scalar/express-api-reference": "^0.8.7", "@scalar/hono-api-reference": "^0.9.35", "@t3-oss/env-core": "^0.13.10", - "@vercel/otel": "^1.9.2", - "dayjs": "^1.11.19", "fs-extra": "^11.3.2", "hono": "^4.11.5", "http-proxy-agent": "^7.0.2", @@ -351,6 +338,8 @@ "@fastgpt-plugin/packages": ["@fastgpt-plugin/packages@workspace:lib"], + "@fastgpt-sdk/logger": ["@fastgpt-sdk/logger@0.1.1", "", { "dependencies": { "@logtape/logtape": "^2", "@logtape/pretty": "^2", "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.203.0", "@opentelemetry/exporter-logs-otlp-http": "^0.203.0", "@opentelemetry/resources": "^2.0.1", "@opentelemetry/sdk-logs": "^0.203.0", "@opentelemetry/semantic-conventions": "^1.39.0" } }, "sha512-y/MhruEKs7CbFLT5+lvzosGt+gpVkcunAhyepERRkNC5IJJonkLfrMYhN/Rw8GxMdvLXG4Wnaad5KVJJiyAykw=="], + "@fastgpt-sdk/plugin": ["@fastgpt-sdk/plugin@workspace:sdk"], "@fastgpt-sdk/storage": ["@fastgpt-sdk/storage@0.6.15", "", { "dependencies": { "@aws-sdk/client-s3": "^3.948.0", "@aws-sdk/lib-storage": "^3.948.0", "@aws-sdk/s3-request-presigner": "^3.952.0", "ali-oss": "^6.23.0", "cos-nodejs-sdk-v5": "^2.15.4", "es-toolkit": "^1.43.0", "minio": "^8.0.5", "vitest": "^4.0.16" } }, "sha512-oPbm6EtXQ3ysad/OebF2ovwbIax6PeCvYqA3cGAVEHEJMBU3633ktl1ZaIIkmyjWJLsABZpMf6m7lPBMyISGrA=="], @@ -359,10 +348,6 @@ "@fortaine/fetch-event-source": ["@fortaine/fetch-event-source@3.0.6", "https://registry.npmmirror.com/@fortaine/fetch-event-source/-/fetch-event-source-3.0.6.tgz", {}, "sha512-621GAuLMvKtyZQ3IA6nlDWhV1V/7PGOTNIGLUifxt0KzM+dZIweJ6F3XvQF3QnqeNfS1N7WQ0Kil1Di/lhChEw=="], - "@grpc/grpc-js": ["@grpc/grpc-js@1.14.3", "", { "dependencies": { "@grpc/proto-loader": "^0.8.0", "@js-sdsl/ordered-map": "^4.4.2" } }, "sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA=="], - - "@grpc/proto-loader": ["@grpc/proto-loader@0.8.0", "", { "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", "protobufjs": "^7.5.3", "yargs": "^17.7.2" }, "bin": { "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" } }, "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ=="], - "@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="], "@hono/zod-openapi": ["@hono/zod-openapi@1.2.0", "", { "dependencies": { "@asteasolutions/zod-to-openapi": "^8.1.0", "@hono/zod-validator": "^0.7.6", "openapi3-ts": "^4.5.0" }, "peerDependencies": { "hono": ">=4.3.6", "zod": "^4.0.0" } }, "sha512-KDfHqv/Wy4elVseZXgokbHxeWuqBL+AZfqsOMpEihBMUsk/fJ+bLIi3Sf70JFVpt1Ihui8RasYrInozt7ZBDIA=="], @@ -427,13 +412,9 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@js-sdsl/ordered-map": ["@js-sdsl/ordered-map@4.4.2", "", {}, "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw=="], - - "@logtape/logtape": ["@logtape/logtape@1.3.6", "", {}, "sha512-OaK8eal8zcjB0GZbllXKgUC2T9h/GyNLQyQXjJkf1yum7SZKTWs9gs/t8NMS0kVVaSnA7bhU0Sjws/Iy4e0/IQ=="], - - "@logtape/otel": ["@logtape/otel@1.3.6", "", { "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/api-logs": "^0.208.0", "@opentelemetry/exporter-logs-otlp-grpc": "^0.208.0", "@opentelemetry/exporter-logs-otlp-http": "^0.208.0", "@opentelemetry/exporter-logs-otlp-proto": "^0.208.0", "@opentelemetry/otlp-exporter-base": "^0.208.0", "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-logs": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.38.0" }, "peerDependencies": { "@logtape/logtape": "^1.3.6" } }, "sha512-bjzPEBWJQ/ORJ27MuhcIzhZ9rHVfanv9UQ9c9rmTGc7UGcQEY0fkDAY4g/xpnNqL+i+6Trp5prly99ByVmOANQ=="], + "@logtape/logtape": ["@logtape/logtape@2.0.4", "", {}, "sha512-Z4COeAMdedcBFuFkXaPFvDPOVuHoEom1hwNnPCIkSyojyikuNguplwPoSG+kZthWrS7GiOJo1USQyjWwIFfTKA=="], - "@logtape/pretty": ["@logtape/pretty@1.3.6", "", { "peerDependencies": { "@logtape/logtape": "^1.3.6" } }, "sha512-Z0k81fN+K6mkutIfCD7/sXEDe7Fwce6cR34byZUiR7rVncLu9ehN5t0pTZr9m7WMCF+Kufu2iE1gJ1O4rpR7jQ=="], + "@logtape/pretty": ["@logtape/pretty@2.0.4", "", { "peerDependencies": { "@logtape/logtape": "^2.0.4" } }, "sha512-y1nubV70avD9Gx8Q3gcWBlVUsVwpaBdHUntrkkpXIrC/UPRoHuWnBo+FNrtyvgjCEHSbKuxIaOgsE8rxTPEhzg=="], "@mixmark-io/domino": ["@mixmark-io/domino@2.2.0", "https://registry.npmmirror.com/@mixmark-io/domino/-/domino-2.2.0.tgz", {}, "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw=="], @@ -453,23 +434,9 @@ "@opentelemetry/core": ["@opentelemetry/core@2.0.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw=="], - "@opentelemetry/exporter-logs-otlp-grpc": ["@opentelemetry/exporter-logs-otlp-grpc@0.208.0", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "2.2.0", "@opentelemetry/otlp-exporter-base": "0.208.0", "@opentelemetry/otlp-grpc-exporter-base": "0.208.0", "@opentelemetry/otlp-transformer": "0.208.0", "@opentelemetry/sdk-logs": "0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-AmZDKFzbq/idME/yq68M155CJW1y056MNBekH9OZewiZKaqgwYN4VYfn3mXVPftYsfrCM2r4V6tS8H2LmfiDCg=="], - "@opentelemetry/exporter-logs-otlp-http": ["@opentelemetry/exporter-logs-otlp-http@0.203.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.203.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/otlp-exporter-base": "0.203.0", "@opentelemetry/otlp-transformer": "0.203.0", "@opentelemetry/sdk-logs": "0.203.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-s0hys1ljqlMTbXx2XiplmMJg9wG570Z5lH7wMvrZX6lcODI56sG4HL03jklF63tBeyNwK2RV1/ntXGo3HgG4Qw=="], - "@opentelemetry/exporter-logs-otlp-proto": ["@opentelemetry/exporter-logs-otlp-proto@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/otlp-exporter-base": "0.208.0", "@opentelemetry/otlp-transformer": "0.208.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/sdk-logs": "0.208.0", "@opentelemetry/sdk-trace-base": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Wy8dZm16AOfM7yddEzSFzutHZDZ6HspKUODSUJVjyhnZFMBojWDjSNgduyCMlw6qaxJYz0dlb0OEcb4Eme+BfQ=="], - - "@opentelemetry/exporter-metrics-otlp-http": ["@opentelemetry/exporter-metrics-otlp-http@0.203.0", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/otlp-exporter-base": "0.203.0", "@opentelemetry/otlp-transformer": "0.203.0", "@opentelemetry/resources": "2.0.1", "@opentelemetry/sdk-metrics": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-HFSW10y8lY6BTZecGNpV3GpoSy7eaO0Z6GATwZasnT4bEsILp8UJXNG5OmEsz4SdwCSYvyCbTJdNbZP3/8LGCQ=="], - - "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.48.0", "", { "dependencies": { "@types/shimmer": "^1.0.2", "import-in-the-middle": "1.7.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-sjtZQB5PStIdCw5ovVTDGwnmQC+GGYArJNgIcydrDSqUTdYBnMrN9P4pwQZgS3vTGIp+TU1L8vMXGe51NVmIKQ=="], - - "@opentelemetry/instrumentation-express": ["@opentelemetry/instrumentation-express@0.35.0", "", { "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.48.0", "@opentelemetry/semantic-conventions": "^1.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-ZmSB4WMd88sSecOL7DlghzdBl56/8ymb02n+xEJ/6zUgONuw/1uoTh1TAaNPKfEWdNLoLKXQm+Gd2zBrUVOX0w=="], - - "@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.49.1", "", { "dependencies": { "@opentelemetry/core": "1.22.0", "@opentelemetry/instrumentation": "0.49.1", "@opentelemetry/semantic-conventions": "1.22.0", "semver": "^7.5.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Yib5zrW2s0V8wTeUK/B3ZtpyP4ldgXj9L3Ws/axXrW1dW0/mEFKifK50MxMQK9g5NNJQS9dWH7rvcEGZdWdQDA=="], - - "@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.208.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/otlp-transformer": "0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA=="], - - "@opentelemetry/otlp-grpc-exporter-base": ["@opentelemetry/otlp-grpc-exporter-base@0.208.0", "", { "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "2.2.0", "@opentelemetry/otlp-exporter-base": "0.208.0", "@opentelemetry/otlp-transformer": "0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-fGvAg3zb8fC0oJAzfz7PQppADI2HYB7TSt/XoCaBJFi1mSquNUjtHXEoviMgObLAa1NRIgOC1lsV1OUKi+9+lQ=="], + "@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.203.0", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/otlp-transformer": "0.203.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ=="], "@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.203.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.203.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/sdk-logs": "0.203.0", "@opentelemetry/sdk-metrics": "2.0.1", "@opentelemetry/sdk-trace-base": "2.0.1", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A=="], @@ -477,11 +444,11 @@ "@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.203.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.203.0", "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw=="], - "@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw=="], + "@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ=="], - "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.38.0", "", {}, "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg=="], + "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.40.0", "", {}, "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw=="], "@oxc-project/types": ["@oxc-project/types@0.110.0", "", {}, "sha512-6Ct21OIlrEnFEJk5LT4e63pk3btsI6/TusD/GStLi7wYlGJNOl1GI9qvXAnRAxQU9zqA2Oz+UwhfTOU2rPZVow=="], @@ -747,8 +714,6 @@ "@types/serve-static": ["@types/serve-static@1.15.10", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "<1" } }, "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw=="], - "@types/shimmer": ["@types/shimmer@1.2.0", "", {}, "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg=="], - "@types/turndown": ["@types/turndown@5.0.6", "https://registry.npmmirror.com/@types/turndown/-/turndown-5.0.6.tgz", {}, "sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg=="], "@types/webidl-conversions": ["@types/webidl-conversions@7.0.3", "", {}, "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="], @@ -775,8 +740,6 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.46.2", "", { "dependencies": { "@typescript-eslint/types": "8.46.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w=="], - "@vercel/otel": ["@vercel/otel@1.14.0", "", { "peerDependencies": { "@opentelemetry/api": ">=1.7.0 <2.0.0", "@opentelemetry/api-logs": ">=0.46.0 <0.200.0", "@opentelemetry/instrumentation": ">=0.46.0 <0.200.0", "@opentelemetry/resources": ">=1.19.0 <2.0.0", "@opentelemetry/sdk-logs": ">=0.46.0 <0.200.0", "@opentelemetry/sdk-metrics": ">=1.19.0 <2.0.0", "@opentelemetry/sdk-trace-base": ">=1.19.0 <2.0.0" } }, "sha512-4FXrYvjmHh3ia2v/TN/iiz0oVIw1xSnkW/MzRtsUGpu4jlcfu1qXJIfugQ1iAZnRolyTKn8FxhoWA6EhiAIZBg=="], - "@vitest/coverage-v8": ["@vitest/coverage-v8@3.1.2", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^1.0.2", "debug": "^4.4.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", "magic-string": "^0.30.17", "magicast": "^0.3.5", "std-env": "^3.9.0", "test-exclude": "^7.0.1", "tinyrainbow": "^2.0.0" }, "peerDependencies": { "@vitest/browser": "3.1.2", "vitest": "3.1.2" }, "optionalPeers": ["@vitest/browser"] }, "sha512-XDdaDOeaTMAMYW7N63AqoK32sYUWbXnTkC6tEbVcu3RlU1bB9of32T+PGf8KZvxqLNqeXhafDFqCkwpf2+dyaQ=="], "@vitest/expect": ["@vitest/expect@3.1.2", "", { "dependencies": { "@vitest/spy": "3.1.2", "@vitest/utils": "3.1.2", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA=="], @@ -799,8 +762,6 @@ "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - "acorn-import-assertions": ["acorn-import-assertions@1.9.0", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA=="], - "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], "address": ["address@1.2.2", "https://registry.npmmirror.com/address/-/address-1.2.2.tgz", {}, "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA=="], @@ -919,8 +880,6 @@ "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], - "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="], - "cli-cursor": ["cli-cursor@4.0.0", "", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="], "cli-truncate": ["cli-truncate@3.1.0", "", { "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" } }, "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA=="], @@ -979,8 +938,6 @@ "dateformat": ["dateformat@2.2.0", "https://registry.npmmirror.com/dateformat/-/dateformat-2.2.0.tgz", {}, "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw=="], - "dayjs": ["dayjs@1.11.19", "", {}, "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw=="], - "debounce-fn": ["debounce-fn@4.0.0", "https://registry.npmmirror.com/debounce-fn/-/debounce-fn-4.0.0.tgz", { "dependencies": { "mimic-fn": "^3.0.0" } }, "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ=="], "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], @@ -1237,8 +1194,6 @@ "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], - "import-in-the-middle": ["import-in-the-middle@1.7.1", "", { "dependencies": { "acorn": "^8.8.2", "acorn-import-assertions": "^1.9.0", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg=="], - "import-without-cache": ["import-without-cache@0.2.5", "", {}, "sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A=="], "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], @@ -1257,8 +1212,6 @@ "is-class-hotfix": ["is-class-hotfix@0.0.6", "https://registry.npmmirror.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz", {}, "sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - "is-extendable": ["is-extendable@0.1.1", "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="], "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], @@ -1353,8 +1306,6 @@ "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], - "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], "lodash.isarguments": ["lodash.isarguments@3.1.0", "", {}, "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="], @@ -1409,8 +1360,6 @@ "mkdirp": ["mkdirp@0.5.6", "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], - "module-details-from-path": ["module-details-from-path@1.0.4", "", {}, "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w=="], - "mongodb": ["mongodb@6.20.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-Tl6MEIU3K4Rq3TSHd+sZQqRBoGlFsOgNrH5ltAcFBV62Re3Fd+FcaVf8uSEQFOJ51SDowDVttBTONMfoYWrWlQ=="], "mongodb-connection-string-url": ["mongodb-connection-string-url@3.0.2", "", { "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^14.1.0 || ^13.0.0" } }, "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA=="], @@ -1493,8 +1442,6 @@ "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], @@ -1565,10 +1512,6 @@ "require-from-string": ["require-from-string@2.0.2", "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "require-in-the-middle": ["require-in-the-middle@7.5.2", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", "resolve": "^1.22.8" } }, "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ=="], - - "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], - "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], @@ -1615,8 +1558,6 @@ "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "shimmer": ["shimmer@1.2.1", "", {}, "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="], - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], @@ -1689,8 +1630,6 @@ "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], - "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], "test-exclude": ["test-exclude@7.0.1", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", "minimatch": "^9.0.4" } }, "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg=="], @@ -1881,67 +1820,17 @@ "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "@logtape/otel/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="], - - "@logtape/otel/@opentelemetry/exporter-logs-otlp-http": ["@opentelemetry/exporter-logs-otlp-http@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/otlp-exporter-base": "0.208.0", "@opentelemetry/otlp-transformer": "0.208.0", "@opentelemetry/sdk-logs": "0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg=="], - - "@logtape/otel/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA=="], - "@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], - - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/sdk-logs": "0.208.0", "@opentelemetry/sdk-metrics": "2.2.0", "@opentelemetry/sdk-trace-base": "2.2.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ=="], - - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA=="], - - "@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.203.0", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/otlp-transformer": "0.203.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/sdk-logs": "0.208.0", "@opentelemetry/sdk-metrics": "2.2.0", "@opentelemetry/sdk-trace-base": "2.2.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/otlp-exporter-base": ["@opentelemetry/otlp-exporter-base@0.203.0", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/otlp-transformer": "0.203.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], - - "@opentelemetry/instrumentation-express/@opentelemetry/core": ["@opentelemetry/core@1.30.1", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.28.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ=="], - - "@opentelemetry/instrumentation-express/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - - "@opentelemetry/instrumentation-http/@opentelemetry/core": ["@opentelemetry/core@1.22.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "1.22.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, "sha512-0VoAlT6x+Xzik1v9goJ3pZ2ppi6+xd3aUfg4brfrLkDBHRIVjMP0eBHrKrhB+NKcDyMAg8fAbGL3Npg/F6AwWA=="], - - "@opentelemetry/instrumentation-http/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.49.1", "", { "dependencies": { "@opentelemetry/api-logs": "0.49.1", "@types/shimmer": "^1.0.2", "import-in-the-middle": "1.7.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-0DLtWtaIppuNNRRllSD4bjU8ZIiLp1cDXvJEbp752/Zf+y3gaLNaoGRGIlX4UHhcsrmtL+P2qxi3Hodi8VuKiQ=="], - - "@opentelemetry/instrumentation-http/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.22.0", "", {}, "sha512-CAOgFOKLybd02uj/GhCdEeeBjOS0yeoDeo/CA7ASBSmenpZHAKGB3iDm/rv3BQLcabb/OprDEsSQ1y0P8A7Siw=="], - - "@opentelemetry/otlp-exporter-base/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], - - "@opentelemetry/otlp-exporter-base/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/sdk-logs": "0.208.0", "@opentelemetry/sdk-metrics": "2.2.0", "@opentelemetry/sdk-trace-base": "2.2.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/sdk-logs": "0.208.0", "@opentelemetry/sdk-metrics": "2.2.0", "@opentelemetry/sdk-trace-base": "2.2.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ=="], - "@opentelemetry/otlp-transformer/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], - "@opentelemetry/otlp-transformer/@opentelemetry/sdk-metrics": ["@opentelemetry/sdk-metrics@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g=="], - "@opentelemetry/resources/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], "@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], "@opentelemetry/sdk-logs/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], - "@opentelemetry/sdk-metrics/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], + "@opentelemetry/sdk-metrics/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], "@opentelemetry/sdk-trace-base/@opentelemetry/resources": ["@opentelemetry/resources@2.0.1", "", { "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw=="], @@ -1959,8 +1848,6 @@ "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "@vercel/otel/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.49.1", "", { "dependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-kaNl/T7WzyMUQHQlVq7q0oV4Kev6+0xFwqzofryC66jgGMacd0QH5TwfpbUwSTby+SdAdprAe5UKMvBw4tKS5Q=="], - "@vitest/snapshot/@vitest/pretty-format": ["@vitest/pretty-format@3.1.2", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w=="], "@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@3.1.2", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w=="], @@ -2119,49 +2006,11 @@ "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@logtape/otel/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], - - "@logtape/otel/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-transformer": ["@opentelemetry/otlp-transformer@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/sdk-logs": "0.208.0", "@opentelemetry/sdk-metrics": "2.2.0", "@opentelemetry/sdk-trace-base": "2.2.0", "protobufjs": "^7.3.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ=="], - - "@logtape/otel/@opentelemetry/sdk-logs/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], - - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/otlp-transformer/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="], - - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="], - - "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/sdk-logs/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="], - - "@opentelemetry/exporter-logs-otlp-proto/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - - "@opentelemetry/exporter-metrics-otlp-http/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - - "@opentelemetry/instrumentation-express/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.28.0", "", {}, "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA=="], - - "@opentelemetry/instrumentation-http/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.49.1", "", { "dependencies": { "@opentelemetry/api": "^1.0.0" } }, "sha512-kaNl/T7WzyMUQHQlVq7q0oV4Kev6+0xFwqzofryC66jgGMacd0QH5TwfpbUwSTby+SdAdprAe5UKMvBw4tKS5Q=="], - - "@opentelemetry/otlp-exporter-base/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - - "@opentelemetry/otlp-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="], - - "@opentelemetry/otlp-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA=="], - - "@opentelemetry/otlp-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-logs": ["@opentelemetry/sdk-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA=="], - - "@opentelemetry/otlp-grpc-exporter-base/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="], - "@opentelemetry/otlp-transformer/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], "@opentelemetry/sdk-logs/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - "@opentelemetry/sdk-metrics/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], + "@opentelemetry/sdk-metrics/@opentelemetry/resources/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], "@scalar/hono-api-reference/@scalar/core/@scalar/types": ["@scalar/types@0.5.8", "", { "dependencies": { "@scalar/helpers": "0.2.8", "nanoid": "^5.1.6", "type-fest": "^5.3.1", "zod": "^4.3.5" } }, "sha512-eL8zojDI9QB+kNRkuM80auTKHnzNrlOLC8ZLUJVnY0Jj5ZtoInKMDGodgQXK1wOSDTcfVfgLALOY1zb6cFFlCg=="], @@ -2229,12 +2078,6 @@ "@inquirer/core/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "@logtape/otel/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - - "@logtape/otel/@opentelemetry/exporter-logs-otlp-http/@opentelemetry/otlp-transformer/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.2.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw=="], - - "@logtape/otel/@opentelemetry/sdk-logs/@opentelemetry/core/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.37.0", "", {}, "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA=="], - "@scalar/hono-api-reference/@scalar/core/@scalar/types/nanoid": ["nanoid@5.1.6", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg=="], "@scalar/hono-api-reference/@scalar/core/@scalar/types/type-fest": ["type-fest@5.4.1", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-xygQcmneDyzsEuKZrFbRMne5HDqMs++aFzefrJTgEIKjQ3rekM+RPfFCVq2Gp1VIDqddoYeppCj4Pcb+RZW0GQ=="], diff --git a/lib/env.ts b/lib/env.ts index d503e8e8..22e0d47b 100644 --- a/lib/env.ts +++ b/lib/env.ts @@ -6,6 +6,7 @@ const BoolSchema = z .transform((val) => val === 'true') .pipe(z.boolean()); const PositiveIntSchema = z.coerce.number().int().positive(); +const LogLevelSchema = z.enum(['trace', 'debug', 'info', 'warning', 'error', 'fatal']); export const env = createEnv({ runtimeEnv: process.env, @@ -51,11 +52,9 @@ export const env = createEnv({ // 日志 LOG_ENABLE_CONSOLE: BoolSchema.default(true), - LOG_CONSOLE_LEVEL: z - .enum(['trace', 'debug', 'info', 'warning', 'error', 'fatal']) - .default('info'), + LOG_CONSOLE_LEVEL: LogLevelSchema.default('info'), LOG_ENABLE_OTEL: BoolSchema.default(false), - LOG_OTEL_LEVEL: z.enum(['trace', 'debug', 'info', 'warning', 'error', 'fatal']).default('info'), + LOG_OTEL_LEVEL: LogLevelSchema.default('info'), LOG_OTEL_SERVICE_NAME: z.string().default('fastgpt-plugin'), LOG_OTEL_URL: z.url().default('http://localhost:4318/v1/logs'), diff --git a/lib/logger/index.ts b/lib/logger/index.ts index db609041..a2ce5e3c 100644 --- a/lib/logger/index.ts +++ b/lib/logger/index.ts @@ -1,158 +1,54 @@ import { AsyncLocalStorage } from 'node:async_hooks'; -import type { Config as LogTapeConfig } from '@logtape/logtape'; +import { env } from '@/env'; import { - configure, - dispose, - getConsoleSink, - getLogger as getLogTapeLogger, - getConfig as getLogTapeConfig, - withFilter, - getLevelFilter, - type LogLevel -} from '@logtape/logtape'; -import { getOpenTelemetrySink } from '@logtape/otel'; -import { getPrettyFormatter } from '@logtape/pretty'; -import dayjs from 'dayjs'; + configureLogger as configureSdkLogger, + createLoggerOptionsFromEnv, + disposeLogger, + getLogger as getSdkLogger, + withContext +} from '@fastgpt-sdk/logger'; import type { LogCategory } from './categories'; -import { env } from '@/env'; - -type SinkId = 'console' | 'jsonl' | 'otel'; +import { root } from './categories'; -type FilterId = string; +type LoggerContext = Record; -type Config = LogTapeConfig; +const contextLocalStorage = new AsyncLocalStorage(); let configured = false; -export async function configureLogger() { - if (configured) { - return; - } - - const enableConsole = env.LOG_ENABLE_CONSOLE; - const consoleLevel = env.LOG_CONSOLE_LEVEL; - const enableOtel = env.LOG_ENABLE_OTEL; - const otelServiceName = env.LOG_OTEL_SERVICE_NAME; - const otelUrl = env.LOG_OTEL_URL; - const otelLevel = env.LOG_OTEL_LEVEL; - - const sinkConfig = { - bufferSize: 8192, - flushInterval: 5000, - nonBlocking: true, - lazy: true - } as const; - - const sinks: Config['sinks'] = {}; - const composedSinks: SinkId[] = []; - - // 日志级别顺序(从低到高) - const levelOrder: LogLevel[] = ['trace', 'debug', 'info', 'warning', 'error', 'fatal']; - const getLowestLevel = (level1: LogLevel, level2: LogLevel): LogLevel => { - const index1 = levelOrder.indexOf(level1); - const index2 = levelOrder.indexOf(level2); - return index1 < index2 ? level1 : level2; - }; - - // 计算最低级别(两个 sink 中较低的那个) - let lowestLevel: LogLevel = consoleLevel; - if (enableConsole && enableOtel) { - lowestLevel = getLowestLevel(consoleLevel, otelLevel); - } else if (enableOtel) { - lowestLevel = otelLevel; - } - - if (enableConsole) { - const consoleSink = getConsoleSink({ - ...sinkConfig, - formatter: getPrettyFormatter({ - icons: false, - level: 'ABBR', - wordWrap: false, - categorySeparator: ':', - messageColor: null, - categoryColor: null, - timestampColor: null, - levelStyle: 'reset', - messageStyle: 'reset', - categoryStyle: 'reset', - timestampStyle: 'reset', - timestamp: (ts) => dayjs(ts).format('YYYY-MM-DD HH:mm:ss'), - properties: true // 显示结构化数据 - }) - }); - // 如果 console level 比 lowestLevel 高,添加 filter - sinks.console = - consoleLevel !== lowestLevel - ? withFilter(consoleSink, getLevelFilter(consoleLevel)) - : consoleSink; - composedSinks.push('console'); - console.log('✓ Logtape console sink enabled'); - } - - if (enableOtel) { - const otelSink = getOpenTelemetrySink({ - serviceName: otelServiceName, - otlpExporterConfig: { - url: otelUrl - } - }); - // 如果 otel level 比 lowestLevel 高,添加 filter - sinks.otel = - otelLevel !== lowestLevel ? withFilter(otelSink, getLevelFilter(otelLevel)) : otelSink; - composedSinks.push('otel'); - console.log(`✓ Logtape OpenTelemetry URL: ${otelUrl}`); - console.log(`✓ Logtape OpenTelemetry service name: ${otelServiceName}`); - console.log(`✓ Logtape OpenTelemetry level: ${otelLevel}`); - console.log('✓ Logtape OpenTelemetry enabled'); - } - - const categories = ['app', 'error', 'http', 'middleware', 'infra', 'mod']; - const loggers: Config['loggers'] = [ - { - category: ['logtape', 'meta'], - sinks: [] - } - ]; - // 为每个 category 创建配置 - for (const category of categories) { - loggers.push({ - category: [category], - sinks: composedSinks, - lowestLevel: lowestLevel - }); - } +export async function configureLogger() { + if (configured) return; - const enabledSinks = []; - if (enableConsole) enabledSinks.push(`console(${consoleLevel})`); - if (enableOtel) enabledSinks.push(`otel(${otelLevel})`); - console.log('✓ Logtape has enabled sinks:', enabledSinks.join(', ')); + const options = createLoggerOptionsFromEnv({ + env, + defaultCategory: [...root], + defaultServiceName: 'fastgpt-plugin', + sensitiveProperties: ['fastgpt'] + }); - await configure({ - sinks: sinks, - loggers: loggers, - contextLocalStorage: new AsyncLocalStorage() + await configureSdkLogger({ + ...options, + contextLocalStorage }); configured = true; } export function getLogger(category: LogCategory) { - return getLogTapeLogger(category); + return getSdkLogger([...category]); } export async function destroyLogger() { if (configured) { - await dispose(); + await disposeLogger(); configured = false; } } -export { type Logger, withContext, getConfig } from '@logtape/logtape'; - -export function getContext(): Record | undefined { - const config = getLogTapeConfig(); - return config?.contextLocalStorage?.getStore(); +export function getContext(): LoggerContext | undefined { + return contextLocalStorage.getStore(); } + +export { withContext }; export type { LogCategory } from './categories'; export { root, http, middleware, mod, infra } from './categories'; diff --git a/lib/package.json b/lib/package.json index c01b2c82..e08bb9a1 100644 --- a/lib/package.json +++ b/lib/package.json @@ -5,24 +5,11 @@ "description": "FastGPT Plugins", "dependencies": { "@fastgpt-sdk/storage": "^0.6.15", + "@fastgpt-sdk/logger": "^0.1.1", "@hono/node-server": "^1.19.9", - "@logtape/logtape": "^1.3.6", - "@logtape/otel": "^1.3.6", - "@logtape/pretty": "^1.3.6", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.203.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.203.0", - "@opentelemetry/exporter-metrics-otlp-http": "^0.203.0", - "@opentelemetry/instrumentation-express": "^0.35.0", - "@opentelemetry/instrumentation-http": "^0.49.0", - "@opentelemetry/resources": "^2.0.1", - "@opentelemetry/sdk-logs": "^0.203.0", - "@opentelemetry/sdk-metrics": "^2.0.1", "@scalar/express-api-reference": "^0.8.7", "@scalar/hono-api-reference": "^0.9.35", "@t3-oss/env-core": "^0.13.10", - "@vercel/otel": "^1.9.2", - "dayjs": "^1.11.19", "fs-extra": "^11.3.2", "hono": "^4.11.5", "http-proxy-agent": "^7.0.2", diff --git a/modules/model/provider/Baichuan/index.ts b/modules/model/provider/Baichuan/index.ts index 7bd3a723..541015b1 100644 --- a/modules/model/provider/Baichuan/index.ts +++ b/modules/model/provider/Baichuan/index.ts @@ -2,7 +2,65 @@ import { ModelTypeEnum, type ProviderConfigType } from '../../type'; const models: ProviderConfigType = { provider: 'Baichuan', - list: [] + list: [ + { + type: ModelTypeEnum.llm, + model: 'Baichuan4', + maxContext: 128000, + maxTokens: 4000, + quoteMaxToken: 100000, + maxTemperature: 1.2, + responseFormatList: ['text', 'json_object'], + vision: false, + reasoning: false, + toolChoice: true + }, + { + type: ModelTypeEnum.llm, + model: 'Baichuan4-Turbo', + maxContext: 128000, + maxTokens: 4000, + quoteMaxToken: 100000, + maxTemperature: 1.2, + responseFormatList: ['text', 'json_object'], + vision: false, + reasoning: false, + toolChoice: true + }, + { + type: ModelTypeEnum.llm, + model: 'Baichuan-M3', + maxContext: 128000, + maxTokens: 5000, + quoteMaxToken: 100000, + maxTemperature: 1.2, + vision: false, + reasoning: true, + toolChoice: false + }, + { + type: ModelTypeEnum.llm, + model: 'Baichuan-M3-Plus', + maxContext: 128000, + maxTokens: 5000, + quoteMaxToken: 100000, + maxTemperature: 1.2, + vision: false, + reasoning: false, + toolChoice: false + }, + { + type: ModelTypeEnum.llm, + model: 'Baichuan2-Turbo', + maxContext: 32000, + maxTokens: 2000, + quoteMaxToken: 30000, + maxTemperature: 1.2, + vision: false, + reasoning: false, + toolChoice: false + } + ] }; export default models; diff --git a/modules/model/provider/DeepSeek/index.ts b/modules/model/provider/DeepSeek/index.ts index 5126b313..b6442725 100644 --- a/modules/model/provider/DeepSeek/index.ts +++ b/modules/model/provider/DeepSeek/index.ts @@ -3,18 +3,6 @@ import { ModelTypeEnum, type ProviderConfigType } from '../../type'; const models: ProviderConfigType = { provider: 'DeepSeek', list: [ - { - type: ModelTypeEnum.llm, - model: 'deepseek-v3.2', - maxContext: 125000, - maxTokens: 32000, - quoteMaxToken: 120000, - maxTemperature: 1, - responseFormatList: ['text', 'json_object'], - vision: false, - reasoning: true, - toolChoice: true - }, { type: ModelTypeEnum.llm, model: 'deepseek-chat', @@ -42,31 +30,19 @@ const models: ProviderConfigType = { }, { type: ModelTypeEnum.llm, - model: 'deepseek-v3.1', - maxContext: 125000, - maxTokens: 32000, - quoteMaxToken: 120000, - maxTemperature: 1, - responseFormatList: ['text', 'json_object'], - vision: false, - reasoning: false, - toolChoice: true - }, - { - type: ModelTypeEnum.llm, - model: 'deepseek-v3.1-terminus', + model: 'deepseek-v3.2', maxContext: 125000, maxTokens: 32000, quoteMaxToken: 120000, maxTemperature: 1, responseFormatList: ['text', 'json_object'], vision: false, - reasoning: false, + reasoning: true, toolChoice: true }, { type: ModelTypeEnum.llm, - model: 'deepseek-v3.2-exp', + model: 'deepseek-v3.1', maxContext: 125000, maxTokens: 32000, quoteMaxToken: 120000, diff --git a/modules/model/provider/Gemini/index.ts b/modules/model/provider/Gemini/index.ts index 808463e9..7df223be 100644 --- a/modules/model/provider/Gemini/index.ts +++ b/modules/model/provider/Gemini/index.ts @@ -3,6 +3,28 @@ import { ModelTypeEnum, type ProviderConfigType } from '../../type'; const models: ProviderConfigType = { provider: 'Gemini', list: [ + { + type: ModelTypeEnum.llm, + model: 'gemini-3.1-flash-lite-preview', + maxContext: 1000000, + maxTokens: 64000, + quoteMaxToken: 1000000, + maxTemperature: 1, + vision: true, + reasoning: false, + toolChoice: true + }, + { + type: ModelTypeEnum.llm, + model: 'gemini-3.1-pro-preview', + maxContext: 1000000, + maxTokens: 64000, + quoteMaxToken: 1000000, + maxTemperature: 1, + vision: true, + reasoning: false, + toolChoice: true + }, { type: ModelTypeEnum.llm, model: 'gemini-3-flash-preview', @@ -47,6 +69,17 @@ const models: ProviderConfigType = { reasoning: false, toolChoice: true }, + { + type: ModelTypeEnum.llm, + model: 'gemini-2.5-flash-lite', + maxContext: 1000000, + maxTokens: 63000, + quoteMaxToken: 1000000, + maxTemperature: 1, + vision: true, + reasoning: false, + toolChoice: true + }, { type: ModelTypeEnum.llm, model: 'gemini-2.5-pro-exp-03-25', @@ -162,6 +195,12 @@ const models: ProviderConfigType = { model: 'text-embedding-004', defaultToken: 512, maxToken: 2000 + }, + { + type: ModelTypeEnum.embedding, + model: 'gemini-embedding-2-preview', + defaultToken: 512, + maxToken: 2000 } ] }; diff --git a/modules/model/provider/MiniMax/index.ts b/modules/model/provider/MiniMax/index.ts index 87b18c30..10414d4c 100644 --- a/modules/model/provider/MiniMax/index.ts +++ b/modules/model/provider/MiniMax/index.ts @@ -3,6 +3,28 @@ import { ModelTypeEnum, type ProviderConfigType } from '../../type'; const models: ProviderConfigType = { provider: 'MiniMax', list: [ + { + type: ModelTypeEnum.llm, + model: 'MiniMax-M2.7', + maxContext: 204000, + maxTokens: 100000, + quoteMaxToken: 200000, + maxTemperature: 1, + vision: false, + reasoning: true, + toolChoice: true + }, + { + type: ModelTypeEnum.llm, + model: 'MiniMax-M2.7-highspeed', + maxContext: 204000, + maxTokens: 100000, + quoteMaxToken: 200000, + maxTemperature: 1, + vision: false, + reasoning: true, + toolChoice: true + }, { type: ModelTypeEnum.llm, model: 'MiniMax-M2.5', diff --git a/modules/model/provider/OpenAI/index.ts b/modules/model/provider/OpenAI/index.ts index 54b98902..418f2a9d 100644 --- a/modules/model/provider/OpenAI/index.ts +++ b/modules/model/provider/OpenAI/index.ts @@ -3,6 +3,54 @@ import { ModelTypeEnum, type ProviderConfigType } from '../../type'; const models: ProviderConfigType = { provider: 'OpenAI', list: [ + { + type: ModelTypeEnum.llm, + model: 'gpt-5.4', + maxContext: 250000, + maxTokens: 128000, + quoteMaxToken: 200000, + maxTemperature: null, + responseFormatList: ['text', 'json_schema'], + vision: true, + reasoning: false, + toolChoice: true + }, + { + type: ModelTypeEnum.llm, + model: 'gpt-5.4-pro', + maxContext: 250000, + maxTokens: 128000, + quoteMaxToken: 200000, + maxTemperature: null, + responseFormatList: ['text', 'json_schema'], + vision: true, + reasoning: false, + toolChoice: true + }, + { + type: ModelTypeEnum.llm, + model: 'gpt-5.4-mini', + maxContext: 400000, + maxTokens: 128000, + quoteMaxToken: 350000, + maxTemperature: null, + responseFormatList: ['text', 'json_schema'], + vision: true, + reasoning: false, + toolChoice: true + }, + { + type: ModelTypeEnum.llm, + model: 'gpt-5.4-nano', + maxContext: 250000, + maxTokens: 128000, + quoteMaxToken: 200000, + maxTemperature: null, + responseFormatList: ['text', 'json_schema'], + vision: true, + reasoning: false, + toolChoice: true + }, { type: ModelTypeEnum.llm, model: 'gpt-5.2', diff --git a/modules/tool/packages/DingTalkWebhook/config.ts b/modules/tool/packages/DingTalkWebhook/config.ts index 0ea81e7a..d50e4017 100644 --- a/modules/tool/packages/DingTalkWebhook/config.ts +++ b/modules/tool/packages/DingTalkWebhook/config.ts @@ -12,7 +12,6 @@ export default defineTool({ 'zh-CN': '向钉钉机器人发起 webhook 请求。', en: 'Send a webhook request to DingTalk.' }, - icon: 'plugins/dingding', courseUrl: 'https://open.dingtalk.com/document/robots/custom-robot-access', versionList: [ { diff --git a/modules/tool/packages/DingTalkWebhook/logo.svg b/modules/tool/packages/DingTalkWebhook/logo.svg new file mode 100644 index 00000000..c204d850 --- /dev/null +++ b/modules/tool/packages/DingTalkWebhook/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/tool/packages/Doc2X/config.ts b/modules/tool/packages/Doc2X/config.ts index cfc0e627..57dbcbca 100644 --- a/modules/tool/packages/Doc2X/config.ts +++ b/modules/tool/packages/Doc2X/config.ts @@ -12,7 +12,6 @@ export default defineToolSet({ 'zh-CN': '将传入的图片或PDF文件发送至Doc2X进行解析,返回带LaTeX公式的markdown格式的文本。', en: 'Send an image or PDF file to Doc2X for parsing and return the LaTeX formula in markdown format.' }, - icon: 'plugins/doc2x', secretInputConfig: [ { key: 'apikey', diff --git a/modules/tool/packages/Doc2X/logo.svg b/modules/tool/packages/Doc2X/logo.svg new file mode 100644 index 00000000..08d2f8b0 --- /dev/null +++ b/modules/tool/packages/Doc2X/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/modules/tool/packages/WeWorkWebhook/config.ts b/modules/tool/packages/WeWorkWebhook/config.ts index 08d36635..16d6fa84 100644 --- a/modules/tool/packages/WeWorkWebhook/config.ts +++ b/modules/tool/packages/WeWorkWebhook/config.ts @@ -17,7 +17,6 @@ export default defineTool({ en: 'Send webhook requests to WeWork robots. Only internal groups can use this tool.' }, courseUrl: 'https://developer.work.weixin.qq.com/document/path/91770', - icon: 'plugins/qiwei', versionList: [ { value: '0.1.1', diff --git a/modules/tool/packages/WeWorkWebhook/logo.svg b/modules/tool/packages/WeWorkWebhook/logo.svg new file mode 100644 index 00000000..be307bfa --- /dev/null +++ b/modules/tool/packages/WeWorkWebhook/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/tool/packages/bocha/config.ts b/modules/tool/packages/bocha/config.ts index 7fbc3d4b..2c16f82d 100644 --- a/modules/tool/packages/bocha/config.ts +++ b/modules/tool/packages/bocha/config.ts @@ -11,7 +11,6 @@ export default defineTool({ 'zh-CN': '博查搜索', en: 'Bocha Search' }, - icon: 'core/workflow/template/bocha', tags: [ToolTagEnum.enum.search], description: { 'zh-CN': '使用博查AI搜索引擎进行网络搜索。', diff --git a/modules/tool/packages/bocha/logo.svg b/modules/tool/packages/bocha/logo.svg new file mode 100644 index 00000000..cbe7a2f1 --- /dev/null +++ b/modules/tool/packages/bocha/logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/modules/tool/packages/dalle3/config.ts b/modules/tool/packages/dalle3/config.ts index d0fdff2c..6efe6cf0 100644 --- a/modules/tool/packages/dalle3/config.ts +++ b/modules/tool/packages/dalle3/config.ts @@ -16,7 +16,6 @@ export default defineTool({ 'zh-CN': '调用 Dalle3 接口绘图', en: 'Call Dalle3 Interface to Draw' }, - icon: 'common/openai', courseUrl: 'https://openai.com', versionList: [ { diff --git a/modules/tool/packages/dalle3/logo.svg b/modules/tool/packages/dalle3/logo.svg new file mode 100644 index 00000000..788c5a90 --- /dev/null +++ b/modules/tool/packages/dalle3/logo.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/modules/tool/packages/databaseConnection/config.ts b/modules/tool/packages/databaseConnection/config.ts index 28df34a3..4358444f 100644 --- a/modules/tool/packages/databaseConnection/config.ts +++ b/modules/tool/packages/databaseConnection/config.ts @@ -12,7 +12,6 @@ export default defineTool({ 'zh-CN': '可连接常用数据库,并执行sql', en: 'Can connect to common databases and execute sql' }, - icon: 'core/workflow/template/datasource', versionList: [ { value: '0.1.2', diff --git a/modules/tool/packages/databaseConnection/logo.svg b/modules/tool/packages/databaseConnection/logo.svg new file mode 100644 index 00000000..cad8390e --- /dev/null +++ b/modules/tool/packages/databaseConnection/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/tool/packages/delay/config.ts b/modules/tool/packages/delay/config.ts index 1ed42b9b..f283df26 100644 --- a/modules/tool/packages/delay/config.ts +++ b/modules/tool/packages/delay/config.ts @@ -12,7 +12,6 @@ export default defineTool({ 'zh-CN': '让工作流等待指定时间后运行', en: 'Delay the workflow after a specified time' }, - icon: 'core/workflow/template/sleep', versionList: [ { value: '1.0', diff --git a/modules/tool/packages/delay/logo.svg b/modules/tool/packages/delay/logo.svg new file mode 100644 index 00000000..07092390 --- /dev/null +++ b/modules/tool/packages/delay/logo.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/modules/tool/packages/drawing/config.ts b/modules/tool/packages/drawing/config.ts index 1af6dde2..2e59fa0b 100644 --- a/modules/tool/packages/drawing/config.ts +++ b/modules/tool/packages/drawing/config.ts @@ -10,6 +10,5 @@ export default defineToolSet({ description: { 'zh-CN': 'BI图表功能,可以生成一些常用的图表,如饼图,柱状图,折线图等', en: 'BI Charts, can generate some common charts, such as pie charts, bar charts, line charts, etc.' - }, - icon: 'core/workflow/template/BI' + } }); diff --git a/modules/tool/packages/drawing/logo.svg b/modules/tool/packages/drawing/logo.svg new file mode 100644 index 00000000..10c52f0a --- /dev/null +++ b/modules/tool/packages/drawing/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/tool/packages/duckduckgo/config.ts b/modules/tool/packages/duckduckgo/config.ts index fe22dd1d..da5ff708 100644 --- a/modules/tool/packages/duckduckgo/config.ts +++ b/modules/tool/packages/duckduckgo/config.ts @@ -10,6 +10,5 @@ export default defineToolSet({ description: { 'zh-CN': 'DuckDuckGo 服务,包含网络搜索、图片搜索、新闻搜索等。', en: 'DuckDuckGo Service, including network search, image search, news search, etc.' - }, - icon: 'core/workflow/template/duckduckgo' + } }); diff --git a/modules/tool/packages/duckduckgo/logo.svg b/modules/tool/packages/duckduckgo/logo.svg new file mode 100644 index 00000000..3ab30101 --- /dev/null +++ b/modules/tool/packages/duckduckgo/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/tool/packages/feishu/config.ts b/modules/tool/packages/feishu/config.ts index 2e6124e4..92aa45a4 100644 --- a/modules/tool/packages/feishu/config.ts +++ b/modules/tool/packages/feishu/config.ts @@ -16,7 +16,6 @@ export default defineTool({ 'zh-CN': '向飞书机器人发起 webhook 请求。', en: 'Send webhook request to Feishu bot.' }, - icon: 'core/app/templates/plugin-feishu', versionList: [ { value: '0.1.1', diff --git a/modules/tool/packages/feishu/logo.svg b/modules/tool/packages/feishu/logo.svg new file mode 100644 index 00000000..7c7b43b5 --- /dev/null +++ b/modules/tool/packages/feishu/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/tool/packages/fetchUrl/config.ts b/modules/tool/packages/fetchUrl/config.ts index a0712859..77c43480 100644 --- a/modules/tool/packages/fetchUrl/config.ts +++ b/modules/tool/packages/fetchUrl/config.ts @@ -12,7 +12,6 @@ export default defineTool({ 'zh-CN': '可获取一个网页链接内容,并以 Markdown 格式输出,仅支持获取静态网站。', en: 'Get the content of a website link and output it in Markdown format, only supports static websites.' }, - icon: 'core/workflow/template/fetchUrl', versionList: [ { value: '0.1.1', diff --git a/modules/tool/packages/fetchUrl/logo.svg b/modules/tool/packages/fetchUrl/logo.svg new file mode 100644 index 00000000..ccc82367 --- /dev/null +++ b/modules/tool/packages/fetchUrl/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/modules/tool/packages/getTime/config.ts b/modules/tool/packages/getTime/config.ts index 852d6afc..94dfe132 100644 --- a/modules/tool/packages/getTime/config.ts +++ b/modules/tool/packages/getTime/config.ts @@ -12,7 +12,6 @@ export default defineTool({ 'zh-CN': '获取当前时间', en: 'Get current time' }, - icon: 'core/workflow/template/getTime', versionList: [ { value: '0.1.1', diff --git a/modules/tool/packages/getTime/logo.svg b/modules/tool/packages/getTime/logo.svg new file mode 100644 index 00000000..098d1bfe --- /dev/null +++ b/modules/tool/packages/getTime/logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/modules/tool/packages/google/config.ts b/modules/tool/packages/google/config.ts index e655b802..bfb55fba 100644 --- a/modules/tool/packages/google/config.ts +++ b/modules/tool/packages/google/config.ts @@ -12,7 +12,6 @@ export default defineTool({ 'zh-CN': '在 Google 中搜索', en: 'Search in Google' }, - icon: 'core/workflow/template/google', courseUrl: 'https://fael3z0zfze.feishu.cn/wiki/Vqk1w4ltNiuLifkHTuoc0hSrnVg?fromScene=spaceOverview', versionList: [ diff --git a/modules/tool/packages/google/logo.svg b/modules/tool/packages/google/logo.svg new file mode 100644 index 00000000..e85401c2 --- /dev/null +++ b/modules/tool/packages/google/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/tool/packages/gptImage/config.ts b/modules/tool/packages/gptImage/config.ts index 8987c775..1be2636a 100644 --- a/modules/tool/packages/gptImage/config.ts +++ b/modules/tool/packages/gptImage/config.ts @@ -8,7 +8,6 @@ export default defineToolSet({ }, courseUrl: 'https://platform.openai.com/docs/pricing', tags: [ToolTagEnum.enum.multimodal], - icon: 'common/openai', description: { 'zh-CN': '这是一个gpt-image 绘图工具集', en: 'This is a gpt-image image generation tool set' diff --git a/modules/tool/packages/gptImage/logo.svg b/modules/tool/packages/gptImage/logo.svg new file mode 100644 index 00000000..788c5a90 --- /dev/null +++ b/modules/tool/packages/gptImage/logo.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/modules/tool/packages/holAgents/children/getAgent/config.ts b/modules/tool/packages/holAgents/children/getAgent/config.ts new file mode 100644 index 00000000..54ace853 --- /dev/null +++ b/modules/tool/packages/holAgents/children/getAgent/config.ts @@ -0,0 +1,56 @@ +import { defineTool } from '@tool/type'; +import { + FlowNodeInputTypeEnum, + FlowNodeOutputTypeEnum, + WorkflowIOValueTypeEnum +} from '@tool/type/fastgpt'; +import { ToolTagEnum } from '@tool/type/tags'; + +export default defineTool({ + tags: [ToolTagEnum.enum.search], + name: { + 'zh-CN': '获取代理详情', + en: 'Get Agent Details' + }, + description: { + 'zh-CN': '获取指定代理的详细信息,包括能力、协议、端点等', + en: 'Get detailed information about a specific agent, including capabilities, protocols, endpoints' + }, + versionList: [ + { + value: '1.0.0', + description: 'Initial version', + inputs: [ + { + key: 'uaid', + label: { + 'zh-CN': '代理 UAID', + en: 'Agent UAID' + }, + description: { + 'zh-CN': '通用代理 ID,例如:uaid:aid:xxx', + en: 'Universal Agent ID, e.g., uaid:aid:xxx' + }, + required: true, + valueType: WorkflowIOValueTypeEnum.string, + renderTypeList: [FlowNodeInputTypeEnum.input, FlowNodeInputTypeEnum.reference], + toolDescription: 'The Universal Agent ID of the agent to retrieve' + } + ], + outputs: [ + { + valueType: WorkflowIOValueTypeEnum.object, + key: 'agent', + label: { + 'zh-CN': '代理信息', + en: 'Agent Info' + }, + description: { + 'zh-CN': '代理的详细信息', + en: 'Detailed agent information' + } + } + ] + } + ] +}); diff --git a/modules/tool/packages/holAgents/children/getAgent/index.ts b/modules/tool/packages/holAgents/children/getAgent/index.ts new file mode 100644 index 00000000..d698ed48 --- /dev/null +++ b/modules/tool/packages/holAgents/children/getAgent/index.ts @@ -0,0 +1,10 @@ +import config from './config'; +import { InputType, OutputType, tool as toolCb } from './src'; +import { exportTool } from '@tool/utils/tool'; + +export default exportTool({ + toolCb, + InputType, + OutputType, + config +}); diff --git a/modules/tool/packages/holAgents/children/getAgent/src/index.ts b/modules/tool/packages/holAgents/children/getAgent/src/index.ts new file mode 100644 index 00000000..3b6b3bec --- /dev/null +++ b/modules/tool/packages/holAgents/children/getAgent/src/index.ts @@ -0,0 +1,57 @@ +import { z } from 'zod'; + +const HOL_REGISTRY_BASE = 'https://hol.org/registry/api/v1'; + +export const InputType = z.object({ + uaid: z.string() +}); + +export const OutputType = z.object({ + agent: z.object({ + uaid: z.string(), + name: z.string(), + description: z.string().optional(), + trustScore: z.number().optional(), + capabilities: z.array(z.string()).optional(), + capabilityLabels: z.array(z.string()).optional(), + protocols: z.array(z.string()).optional(), + endpoints: z.record(z.any()).optional(), + registry: z.string().optional() + }) +}); + +function formatUaid(uaid: string): string { + return uaid.startsWith('uaid:') ? uaid : `uaid:${uaid}`; +} + +export async function tool(props: z.infer): Promise> { + const { uaid } = props; + const url = `${HOL_REGISTRY_BASE}/agents/${encodeURIComponent(formatUaid(uaid))}`; + + const response = await fetch(url, { + headers: { + 'Accept': 'application/json', + 'User-Agent': 'HOL-FastGPT-Plugin/1.0' + } + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + + const data = await response.json() as Record; + + return { + agent: { + uaid: (data.uaid as string) || '', + name: (data.name as string) || '', + description: data.description as string | undefined, + trustScore: data.trustScore as number | undefined, + capabilities: data.capabilities as string[] | undefined, + capabilityLabels: data.capabilityLabels as string[] | undefined, + protocols: data.protocols as string[] | undefined, + endpoints: data.endpoints as Record | undefined, + registry: data.registry as string | undefined + } + }; +} diff --git a/modules/tool/packages/holAgents/children/searchAgents/config.ts b/modules/tool/packages/holAgents/children/searchAgents/config.ts new file mode 100644 index 00000000..caa84d98 --- /dev/null +++ b/modules/tool/packages/holAgents/children/searchAgents/config.ts @@ -0,0 +1,82 @@ +import { defineTool } from '@tool/type'; +import { + FlowNodeInputTypeEnum, + FlowNodeOutputTypeEnum, + WorkflowIOValueTypeEnum +} from '@tool/type/fastgpt'; +import { ToolTagEnum } from '@tool/type/tags'; + +export default defineTool({ + tags: [ToolTagEnum.enum.search], + name: { + 'zh-CN': '搜索代理', + en: 'Search Agents' + }, + description: { + 'zh-CN': '在 HOL 注册表中搜索 AI 代理,按能力、技能或描述查找', + en: 'Search for AI agents in the HOL registry by capability, skill, or description' + }, + versionList: [ + { + value: '1.0.0', + description: 'Initial version', + inputs: [ + { + key: 'query', + label: { + 'zh-CN': '搜索查询', + en: 'Search Query' + }, + description: { + 'zh-CN': '搜索关键词,例如:"trading", "image generation"', + en: 'Search query, e.g., "trading", "image generation"' + }, + required: true, + valueType: WorkflowIOValueTypeEnum.string, + renderTypeList: [FlowNodeInputTypeEnum.input, FlowNodeInputTypeEnum.reference], + toolDescription: 'Search query to find agents by capability or skill' + }, + { + key: 'limit', + label: { + 'zh-CN': '最大结果数', + en: 'Max Results' + }, + description: { + 'zh-CN': '返回的最大代理数量 (1-50)', + en: 'Maximum number of agents to return (1-50)' + }, + valueType: WorkflowIOValueTypeEnum.number, + defaultValue: 10, + renderTypeList: [FlowNodeInputTypeEnum.numberInput, FlowNodeInputTypeEnum.reference] + } + ], + outputs: [ + { + valueType: WorkflowIOValueTypeEnum.arrayObject, + key: 'agents', + label: { + 'zh-CN': '代理列表', + en: 'Agents List' + }, + description: { + 'zh-CN': '搜索到的代理列表,包含 UAID、名称、描述、信任分数等', + en: 'List of found agents with UAID, name, description, trust score, etc.' + } + }, + { + valueType: WorkflowIOValueTypeEnum.number, + key: 'total', + label: { + 'zh-CN': '总数', + en: 'Total' + }, + description: { + 'zh-CN': '匹配查询的代理总数', + en: 'Total number of agents matching the query' + } + } + ] + } + ] +}); diff --git a/modules/tool/packages/holAgents/children/searchAgents/index.ts b/modules/tool/packages/holAgents/children/searchAgents/index.ts new file mode 100644 index 00000000..d698ed48 --- /dev/null +++ b/modules/tool/packages/holAgents/children/searchAgents/index.ts @@ -0,0 +1,10 @@ +import config from './config'; +import { InputType, OutputType, tool as toolCb } from './src'; +import { exportTool } from '@tool/utils/tool'; + +export default exportTool({ + toolCb, + InputType, + OutputType, + config +}); diff --git a/modules/tool/packages/holAgents/children/searchAgents/src/index.ts b/modules/tool/packages/holAgents/children/searchAgents/src/index.ts new file mode 100644 index 00000000..baa5464d --- /dev/null +++ b/modules/tool/packages/holAgents/children/searchAgents/src/index.ts @@ -0,0 +1,62 @@ +import { z } from 'zod'; + +const HOL_REGISTRY_BASE = 'https://hol.org/registry/api/v1'; + +export const InputType = z.object({ + query: z.string(), + limit: z.number().min(1).max(50).default(10) +}); + +export const OutputType = z.object({ + total: z.number(), + agents: z.array( + z.object({ + uaid: z.string(), + name: z.string(), + description: z.string(), + trustScore: z.number().optional(), + capabilities: z.array(z.string()).optional(), + protocols: z.array(z.string()).optional() + }) + ) +}); + +interface Hit { + uaid: string; + name?: string; + description?: string; + trustScore?: number; + capabilities?: string[]; + protocols?: string[]; +} + +export async function tool(props: z.infer): Promise> { + const { query, limit } = props; + const url = `${HOL_REGISTRY_BASE}/search?q=${encodeURIComponent(query)}&limit=${limit}`; + + const response = await fetch(url, { + headers: { + 'Accept': 'application/json', + 'User-Agent': 'HOL-FastGPT-Plugin/1.0' + } + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + + const data = await response.json() as { total?: number; hits?: Hit[] }; + const hits = data.hits || []; + + return { + total: data.total || hits.length, + agents: hits.map((hit) => ({ + uaid: hit.uaid, + name: hit.name || '', + description: (hit.description || '').slice(0, 500), + trustScore: hit.trustScore, + capabilities: hit.capabilities, + protocols: hit.protocols + })) + }; +} diff --git a/modules/tool/packages/holAgents/children/similarAgents/config.ts b/modules/tool/packages/holAgents/children/similarAgents/config.ts new file mode 100644 index 00000000..47a96400 --- /dev/null +++ b/modules/tool/packages/holAgents/children/similarAgents/config.ts @@ -0,0 +1,56 @@ +import { defineTool } from '@tool/type'; +import { + FlowNodeInputTypeEnum, + FlowNodeOutputTypeEnum, + WorkflowIOValueTypeEnum +} from '@tool/type/fastgpt'; +import { ToolTagEnum } from '@tool/type/tags'; + +export default defineTool({ + tags: [ToolTagEnum.enum.search], + name: { + 'zh-CN': '查找相似代理', + en: 'Find Similar Agents' + }, + description: { + 'zh-CN': '查找与指定代理相似的其他代理', + en: 'Find agents similar to a given agent based on capabilities' + }, + versionList: [ + { + value: '1.0.0', + description: 'Initial version', + inputs: [ + { + key: 'uaid', + label: { + 'zh-CN': '代理 UAID', + en: 'Agent UAID' + }, + description: { + 'zh-CN': '要查找相似代理的目标代理 ID', + en: 'The agent UAID to find similar agents for' + }, + required: true, + valueType: WorkflowIOValueTypeEnum.string, + renderTypeList: [FlowNodeInputTypeEnum.input, FlowNodeInputTypeEnum.reference], + toolDescription: 'The Universal Agent ID to find similar agents for' + } + ], + outputs: [ + { + valueType: WorkflowIOValueTypeEnum.arrayObject, + key: 'similarAgents', + label: { + 'zh-CN': '相似代理列表', + en: 'Similar Agents' + }, + description: { + 'zh-CN': '相似代理列表', + en: 'List of similar agents' + } + } + ] + } + ] +}); diff --git a/modules/tool/packages/holAgents/children/similarAgents/index.ts b/modules/tool/packages/holAgents/children/similarAgents/index.ts new file mode 100644 index 00000000..d698ed48 --- /dev/null +++ b/modules/tool/packages/holAgents/children/similarAgents/index.ts @@ -0,0 +1,10 @@ +import config from './config'; +import { InputType, OutputType, tool as toolCb } from './src'; +import { exportTool } from '@tool/utils/tool'; + +export default exportTool({ + toolCb, + InputType, + OutputType, + config +}); diff --git a/modules/tool/packages/holAgents/children/similarAgents/src/index.ts b/modules/tool/packages/holAgents/children/similarAgents/src/index.ts new file mode 100644 index 00000000..4d9da8a8 --- /dev/null +++ b/modules/tool/packages/holAgents/children/similarAgents/src/index.ts @@ -0,0 +1,57 @@ +import { z } from 'zod'; + +const HOL_REGISTRY_BASE = 'https://hol.org/registry/api/v1'; + +export const InputType = z.object({ + uaid: z.string() +}); + +export const OutputType = z.object({ + similarAgents: z.array( + z.object({ + uaid: z.string(), + name: z.string(), + description: z.string().optional(), + trustScore: z.number().optional() + }) + ) +}); + +function formatUaid(uaid: string): string { + return uaid.startsWith('uaid:') ? uaid : `uaid:${uaid}`; +} + +interface SimilarHit { + uaid: string; + name?: string; + description?: string; + trustScore?: number; +} + +export async function tool(props: z.infer): Promise> { + const { uaid } = props; + const url = `${HOL_REGISTRY_BASE}/agents/${encodeURIComponent(formatUaid(uaid))}/similar`; + + const response = await fetch(url, { + headers: { + 'Accept': 'application/json', + 'User-Agent': 'HOL-FastGPT-Plugin/1.0' + } + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + + const data = await response.json() as { similar?: SimilarHit[]; hits?: SimilarHit[] }; + const similar = data.similar || data.hits || []; + + return { + similarAgents: similar.map((agent) => ({ + uaid: agent.uaid, + name: agent.name || '', + description: (agent.description || '').slice(0, 500), + trustScore: agent.trustScore + })) + }; +} diff --git a/modules/tool/packages/holAgents/config.ts b/modules/tool/packages/holAgents/config.ts new file mode 100644 index 00000000..4d110223 --- /dev/null +++ b/modules/tool/packages/holAgents/config.ts @@ -0,0 +1,14 @@ +import { defineToolSet } from '@tool/type'; +import { ToolTagEnum } from '@tool/type/tags'; + +export default defineToolSet({ + name: { + 'zh-CN': 'HOL Agents 工具集', + en: 'HOL Agents Tools' + }, + tags: [ToolTagEnum.enum.search, ToolTagEnum.enum.productivity], + description: { + 'zh-CN': '发现和交互 Hashgraph Online 注册表上的 187K+ AI 代理。支持搜索代理、获取代理详情、查找相似代理。', + en: 'Discover and interact with 187K+ AI agents on the Hashgraph Online registry. Search agents, get agent details, and find similar agents.' + } +}); diff --git a/modules/tool/packages/holAgents/index.ts b/modules/tool/packages/holAgents/index.ts new file mode 100644 index 00000000..e6357f9b --- /dev/null +++ b/modules/tool/packages/holAgents/index.ts @@ -0,0 +1,6 @@ +import config from './config'; +import { exportToolSet } from '@tool/utils/tool'; + +export default exportToolSet({ + config +}); diff --git a/modules/tool/packages/holAgents/logo.svg b/modules/tool/packages/holAgents/logo.svg new file mode 100644 index 00000000..6e9d06bf --- /dev/null +++ b/modules/tool/packages/holAgents/logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/modules/tool/packages/holAgents/package.json b/modules/tool/packages/holAgents/package.json new file mode 100644 index 00000000..92fbe843 --- /dev/null +++ b/modules/tool/packages/holAgents/package.json @@ -0,0 +1,17 @@ +{ + "name": "fastgpt-tools-hol-agents", + "module": "index.ts", + "type": "module", + "scripts": { + "build": "bun ../../../../scripts/build.ts" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": { + "zod": "^4" + } +} diff --git a/modules/tool/packages/jinaAi/children/jinaAiSearch/config.ts b/modules/tool/packages/jinaAi/children/jinaAiSearch/config.ts index a784bf4f..407a83e1 100644 --- a/modules/tool/packages/jinaAi/children/jinaAiSearch/config.ts +++ b/modules/tool/packages/jinaAi/children/jinaAiSearch/config.ts @@ -16,7 +16,6 @@ export default defineTool({ 'zh-CN': '基于 Jina AI 搜索引擎的智能网络搜索工具,支持多语言和地区定制', en: 'Intelligent web search powered by Jina AI search engine with multi-language and region support' }, - icon: 'core/workflow/template/jinaAi', courseUrl: 'https://jina.ai', author: 'FastGPT', versionList: [ diff --git a/modules/tool/packages/mathExprVal/config.ts b/modules/tool/packages/mathExprVal/config.ts index f9fa05ab..b39a1d9b 100644 --- a/modules/tool/packages/mathExprVal/config.ts +++ b/modules/tool/packages/mathExprVal/config.ts @@ -16,7 +16,6 @@ export default defineTool({ 'zh-CN': '用于执行数学表达式的工具,通过 js 的 expr-eval 库运行表达式并返回结果。', en: 'A tool for executing mathematical expressions using the expr-eval library in js to return the result.' }, - icon: 'core/workflow/template/mathCall', versionList: [ { value: '0.1.1', diff --git a/modules/tool/packages/mathExprVal/logo.svg b/modules/tool/packages/mathExprVal/logo.svg new file mode 100644 index 00000000..8c19d311 --- /dev/null +++ b/modules/tool/packages/mathExprVal/logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/modules/tool/packages/searchXNG/config.ts b/modules/tool/packages/searchXNG/config.ts index f340431e..e2f6e7a9 100644 --- a/modules/tool/packages/searchXNG/config.ts +++ b/modules/tool/packages/searchXNG/config.ts @@ -17,7 +17,6 @@ export default defineTool({ 'zh-CN': '使用 SearXNG 服务进行搜索。', en: 'Use SearXNG service for search.' }, - icon: 'core/workflow/template/searxng', courseUrl: '/docs/introduction/guide/plugins/searxng_plugin_guide/', versionList: [ { diff --git a/modules/tool/packages/searchXNG/logo.svg b/modules/tool/packages/searchXNG/logo.svg new file mode 100644 index 00000000..5b55fa27 --- /dev/null +++ b/modules/tool/packages/searchXNG/logo.svg @@ -0,0 +1,96 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/modules/tool/packages/smtpEmail/config.ts b/modules/tool/packages/smtpEmail/config.ts index 95f628ac..6b7fa7c5 100644 --- a/modules/tool/packages/smtpEmail/config.ts +++ b/modules/tool/packages/smtpEmail/config.ts @@ -17,7 +17,6 @@ export default defineTool({ 'zh-CN': '通过SMTP协议发送电子邮件(nodemailer)', en: 'Send email by SMTP protocol (nodemailer)' }, - icon: 'plugins/email', versionList: [ { value: '0.1.1', diff --git a/modules/tool/packages/smtpEmail/logo.svg b/modules/tool/packages/smtpEmail/logo.svg new file mode 100644 index 00000000..32b1454d --- /dev/null +++ b/modules/tool/packages/smtpEmail/logo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/tool/packages/whisper/config.ts b/modules/tool/packages/whisper/config.ts index e9184bdd..3a44b2ab 100644 --- a/modules/tool/packages/whisper/config.ts +++ b/modules/tool/packages/whisper/config.ts @@ -13,7 +13,6 @@ export default defineTool({ en: 'Convert audio files to text using OpenAI Whisper model, supporting multiple audio formats and multilingual recognition' }, courseUrl: 'https://platform.openai.com/docs/pricing', - icon: 'common/openai', toolDescription: 'Convert audio files to text using OpenAI Whisper speech recognition API. Supports multiple audio formats and languages.', secretInputConfig: [ diff --git a/modules/tool/packages/whisper/logo.svg b/modules/tool/packages/whisper/logo.svg new file mode 100644 index 00000000..788c5a90 --- /dev/null +++ b/modules/tool/packages/whisper/logo.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/modules/tool/packages/wiki/config.ts b/modules/tool/packages/wiki/config.ts index 72e68ea7..559628bb 100644 --- a/modules/tool/packages/wiki/config.ts +++ b/modules/tool/packages/wiki/config.ts @@ -16,7 +16,6 @@ export default defineTool({ 'zh-CN': '在Wiki中查询释义。', en: 'Search meanings in Wiki.' }, - icon: 'core/workflow/template/wiki', versionList: [ { value: '0.1.1', diff --git a/modules/tool/packages/wiki/logo.svg b/modules/tool/packages/wiki/logo.svg new file mode 100644 index 00000000..77ce2980 --- /dev/null +++ b/modules/tool/packages/wiki/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file