diff --git a/.gitignore b/.gitignore index 4e297b4..ef94661 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ dist .env *.db *.db-* -.vscode \ No newline at end of file +.vscode +test-data \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index 13f4d2c..f9c0a75 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v24.13.0 \ No newline at end of file +v24.14.0 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 8ac73d5..b0aa27c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM node:24.13.0-alpine -RUN apk add --no-cache bash +RUN apk add --no-cache bash git RUN apk update WORKDIR /app diff --git a/package.json b/package.json index a188bcf..22a7b89 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "main": "index.js", "scripts": { "test": "vitest run", + "test:integration": "vitest run --config vitest.integration.config.ts", "dev": "mastra dev", "build": "mastra build", "start": "mastra start", @@ -25,26 +26,27 @@ }, "dependencies": { "@mastra/auth-auth0": "^1.0.1", - "@mastra/core": "^1.10.0", + "@mastra/core": "^1.15.0", "@mastra/evals": "^1.1.2", - "@mastra/libsql": "^1.6.4", - "@mastra/loggers": "^1.0.2", - "@mastra/memory": "^1.6.1", - "@mastra/observability": "^1.3.1", - "@mastra/pg": "^1.7.2", - "ai": "^6.0.105", - "ai-sdk-ollama": "^3.8.0", + "@mastra/libsql": "^1.7.1", + "@mastra/loggers": "^1.0.3", + "@mastra/memory": "^1.9.0", + "@mastra/observability": "^1.5.1", + "@mastra/pg": "^1.8.2", + "@topcoder/wipro-ai-sdk-provider": "git+https://git.topcoder.com/Topcoder-Platform/Wipro-Provider-AI-SDK.git", + "ai": "^6.0.134", + "ai-sdk-ollama": "^3.8.1", "tc-core-library-js": "^2.4.1", "zod": "^4.3.6" }, "devDependencies": { "@eslint/js": "^10.0.1", - "@types/node": "^25.3.3", - "eslint": "^10.0.2", - "mastra": "^1.3.7", + "@types/node": "^25.5.0", + "eslint": "^10.1.0", + "mastra": "^1.3.14", "prettier": "^3.8.1", "typescript": "^5.9.3", - "typescript-eslint": "^8.56.1", - "vitest": "^4.0.18" + "typescript-eslint": "^8.57.1", + "vitest": "^4.1.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6779855..102ff4e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,32 +12,35 @@ importers: specifier: ^1.0.1 version: 1.0.1 '@mastra/core': - specifier: ^1.10.0 - version: 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + specifier: ^1.15.0 + version: 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) '@mastra/evals': specifier: ^1.1.2 - version: 1.1.2(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6) + version: 1.1.2(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6) '@mastra/libsql': - specifier: ^1.6.4 - version: 1.6.4(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) + specifier: ^1.7.1 + version: 1.7.1(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) '@mastra/loggers': - specifier: ^1.0.2 - version: 1.0.2(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) + specifier: ^1.0.3 + version: 1.0.3(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) '@mastra/memory': - specifier: ^1.6.1 - version: 1.6.1(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6) + specifier: ^1.9.0 + version: 1.9.0(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6) '@mastra/observability': - specifier: ^1.3.1 - version: 1.3.1(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) + specifier: ^1.5.1 + version: 1.5.1(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) '@mastra/pg': - specifier: ^1.7.2 - version: 1.7.2(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) + specifier: ^1.8.2 + version: 1.8.2(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) + '@topcoder/wipro-ai-sdk-provider': + specifier: git+https://git.topcoder.com/Topcoder-Platform/Wipro-Provider-AI-SDK.git + version: git+https://git.topcoder.com/Topcoder-Platform/Wipro-Provider-AI-SDK.git#92233a2b00d9dd46900437b54c406231ef24d7b2(zod@4.3.6) ai: - specifier: ^6.0.105 - version: 6.0.105(zod@4.3.6) + specifier: ^6.0.134 + version: 6.0.134(zod@4.3.6) ai-sdk-ollama: - specifier: ^3.8.0 - version: 3.8.0(ai@6.0.105(zod@4.3.6))(zod@4.3.6) + specifier: ^3.8.1 + version: 3.8.1(ai@6.0.134(zod@4.3.6))(zod@4.3.6) tc-core-library-js: specifier: ^2.4.1 version: 2.4.1 @@ -47,16 +50,16 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.0.2) + version: 10.0.1(eslint@10.1.0) '@types/node': - specifier: ^25.3.3 - version: 25.3.3 + specifier: ^25.5.0 + version: 25.5.0 eslint: - specifier: ^10.0.2 - version: 10.0.2 + specifier: ^10.1.0 + version: 10.1.0 mastra: - specifier: ^1.3.7 - version: 1.3.7(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(typescript@5.9.3)(zod@4.3.6) + specifier: ^1.3.14 + version: 1.3.14(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(typescript@5.9.3)(zod@4.3.6) prettier: specifier: ^3.8.1 version: 3.8.1 @@ -64,11 +67,11 @@ importers: specifier: ^5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.56.1 - version: 8.56.1(eslint@10.0.2)(typescript@5.9.3) + specifier: ^8.57.1 + version: 8.57.1(eslint@10.1.0)(typescript@5.9.3) vitest: - specifier: ^4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(yaml@2.8.2) + specifier: ^4.1.0 + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(vite@7.3.1(@types/node@25.5.0)(yaml@2.8.3)) packages: @@ -76,8 +79,14 @@ packages: resolution: {integrity: sha512-VTDuRS5V0ATbJ/LkaQlisMnTAeYKXAK6scMguVBstf+KIBQ7HIuKhiXLv+G/hvejkV+THoXzoNifInAkU81P1g==} engines: {node: '>=18'} - '@ai-sdk/gateway@3.0.59': - resolution: {integrity: sha512-MbtheWHgEFV/8HL1Z6E3hOAsmP73zZlNFg0F0nJAD0Adnjp4J/plqNK00Y896d+dWTw+r0OXzyov9/2wCFjH0Q==} + '@ai-sdk/gateway@3.0.77': + resolution: {integrity: sha512-UdwIG2H2YMuntJQ5L+EmED5XiwnlvDT3HOmKfVFxR4Nq/RSLFA/HcchhwfNXHZ5UJjyuL2VO0huLbWSZ9ijemQ==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + '@ai-sdk/openai-compatible@2.0.37': + resolution: {integrity: sha512-+POSFVcgiu47BK64dhsI6OpcDC0/VAE2ZSaXdXGNNhpC/ava++uSRJYks0k2bpfY0wwCTgpAWZsXn/dG2Yppiw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -100,8 +109,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@4.0.16': - resolution: {integrity: sha512-kBvDqNkt5EwlzF9FujmNhhtl8FYg3e8FO8P5uneKliqfRThWemzBj+wfYr7ZCymAQhTRnwSSz1/SOqhOAwmx9g==} + '@ai-sdk/provider-utils@4.0.21': + resolution: {integrity: sha512-MtFUYI1/8mgDvRmaBDjbLJPFFrMG777AvSgyIFQtZHIMzm88R/12vYBBpnk7pfiWLFE1DSZzY4WDYzGbKAcmiw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -110,10 +119,6 @@ packages: resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} engines: {node: '>=18'} - '@ai-sdk/provider@2.0.0': - resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} - engines: {node: '>=18'} - '@ai-sdk/provider@2.0.1': resolution: {integrity: sha512-KCUwswvsC5VsW2PWFqF8eJgSCu5Ysj7m1TxiHTVA6g7k360bk0RNQENT8KTMAYEs+8fWPD3Uu4dEmzGHc+jGng==} engines: {node: '>=18'} @@ -122,6 +127,10 @@ packages: resolution: {integrity: sha512-m9ka3ptkPQbaHHZHqDXDF9C9B5/Mav0KTdky1k2HZ3/nrW2t1AgObxIVPyGDWQNS9FXT/FS6PIoSjpcP/No8rQ==} engines: {node: '>=18'} + '@ai-sdk/provider@3.0.5': + resolution: {integrity: sha512-2Xmoq6DBJqmSl80U6V9z5jJSJP7ehaJJQMy2iFUqTay06wdCqTnPVBBQbtEL8RCChenL+q5DC5H5WzU3vV3v8w==} + engines: {node: '>=18'} + '@ai-sdk/provider@3.0.8': resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==} engines: {node: '>=18'} @@ -210,12 +219,12 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true @@ -261,320 +270,164 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@clack/core@1.0.1': - resolution: {integrity: sha512-WKeyK3NOBwDOzagPR5H08rFk9D/WuN705yEbuZvKqlkmoLM2woKtXb10OO2k1NoSU4SFG947i2/SCYh+2u5e4g==} - - '@clack/prompts@1.0.1': - resolution: {integrity: sha512-/42G73JkuYdyWZ6m8d/CJtBrGl1Hegyc7Fy78m5Ob+jF85TOUmLR5XLce/U3LxYAw0kJ8CT5aI99RIvPHcGp/Q==} + '@clack/core@1.1.0': + resolution: {integrity: sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==} - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] + '@clack/prompts@1.1.0': + resolution: {integrity: sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==} - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + '@esbuild/aix-ppc64@0.27.4': + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + '@esbuild/android-arm64@0.27.4': + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm@0.27.4': + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + '@esbuild/android-x64@0.27.4': + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + '@esbuild/darwin-arm64@0.27.4': + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + '@esbuild/darwin-x64@0.27.4': + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/freebsd-arm64@0.27.4': + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + '@esbuild/freebsd-x64@0.27.4': + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + '@esbuild/linux-arm64@0.27.4': + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm@0.27.4': + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-ia32@0.27.4': + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + '@esbuild/linux-loong64@0.27.4': + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-mips64el@0.27.4': + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + '@esbuild/linux-ppc64@0.27.4': + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-riscv64@0.27.4': + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + '@esbuild/linux-s390x@0.27.4': + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-x64@0.27.4': + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + '@esbuild/netbsd-arm64@0.27.4': + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-x64@0.27.4': + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + '@esbuild/openbsd-arm64@0.27.4': + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + '@esbuild/openbsd-x64@0.27.4': + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openharmony-arm64@0.27.4': + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + '@esbuild/sunos-x64@0.27.4': + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + '@esbuild/win32-arm64@0.27.4': + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-ia32@0.27.4': + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-x64@0.27.4': + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -589,16 +442,16 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.23.2': - resolution: {integrity: sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==} + '@eslint/config-array@0.23.3': + resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.2': - resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==} + '@eslint/config-helpers@0.5.3': + resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@1.1.0': - resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} + '@eslint/core@1.1.1': + resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/js@10.0.1': @@ -610,12 +463,12 @@ packages: eslint: optional: true - '@eslint/object-schema@3.0.2': - resolution: {integrity: sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==} + '@eslint/object-schema@3.0.3': + resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.6.0': - resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} + '@eslint/plugin-kit@0.6.1': + resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@expo/devcert@1.2.1': @@ -624,8 +477,8 @@ packages: '@expo/sudo-prompt@9.3.2': resolution: {integrity: sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==} - '@hono/node-server@1.19.9': - resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + '@hono/node-server@1.19.11': + resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -672,13 +525,13 @@ packages: '@libsql/core@0.15.15': resolution: {integrity: sha512-C88Z6UKl+OyuKKPwz224riz02ih/zHYI3Ho/LAcVOgjsunIRZoBw7fjRfaH9oPMmSNeQfhGklSG2il1URoOIsA==} - '@libsql/darwin-arm64@0.5.22': - resolution: {integrity: sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==} + '@libsql/darwin-arm64@0.5.28': + resolution: {integrity: sha512-Lc/b8JXO2W2+H+5UXfw7PCHZCim1jlrB0CmLPsjfVmihMluBpdYafFImhjAHxHlWGfuZ32WzjVPUap5fGmkthw==} cpu: [arm64] os: [darwin] - '@libsql/darwin-x64@0.5.22': - resolution: {integrity: sha512-ny2HYWt6lFSIdNFzUFIJ04uiW6finXfMNJ7wypkAD8Pqdm6nAByO+Fdqu8t7sD0sqJGeUCiOg480icjyQ2/8VA==} + '@libsql/darwin-x64@0.5.28': + resolution: {integrity: sha512-m1hGkQm8A+CjZmR9D5G3zi36na7GXGJomsMbHwOFiCUYPjqRReD5KZ2HZ/qEAV6U/66xPdDDCuqDB8MzNhiwxA==} cpu: [x64] os: [darwin] @@ -692,38 +545,38 @@ packages: '@libsql/isomorphic-ws@0.1.5': resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - '@libsql/linux-arm-gnueabihf@0.5.22': - resolution: {integrity: sha512-3Uo3SoDPJe/zBnyZKosziRGtszXaEtv57raWrZIahtQDsjxBVjuzYQinCm9LRCJCUT5t2r5Z5nLDPJi2CwZVoA==} + '@libsql/linux-arm-gnueabihf@0.5.28': + resolution: {integrity: sha512-D22yQotJkLcYxrwYP9ukoqbpA5hK7pHmho9jagCM/ij7UwjWJPAY2d2SmEndpJs/SueaGy1xuiUQFec4R7VebQ==} cpu: [arm] os: [linux] - '@libsql/linux-arm-musleabihf@0.5.22': - resolution: {integrity: sha512-LCsXh07jvSojTNJptT9CowOzwITznD+YFGGW+1XxUr7fS+7/ydUrpDfsMX7UqTqjm7xG17eq86VkWJgHJfvpNg==} + '@libsql/linux-arm-musleabihf@0.5.28': + resolution: {integrity: sha512-Z/aSb2WzZm7TYn/FEqefoN2sJoDhMtCjV8aHw55ibck6mdLLPGMYXxTyWn5U/OZbqD+wiM7eUgdsG20uEzxEoQ==} cpu: [arm] os: [linux] - '@libsql/linux-arm64-gnu@0.5.22': - resolution: {integrity: sha512-KSdnOMy88c9mpOFKUEzPskSaF3VLflfSUCBwas/pn1/sV3pEhtMF6H8VUCd2rsedwoukeeCSEONqX7LLnQwRMA==} + '@libsql/linux-arm64-gnu@0.5.28': + resolution: {integrity: sha512-gQGJgmUBdk3qm8rDwvFujzTWipLE4ZNP9fgcdVabVBFmD38wLOU5aZ4F3BHrL1ZWdvsrC8mrtnCTKEGuYHDZIw==} cpu: [arm64] os: [linux] - '@libsql/linux-arm64-musl@0.5.22': - resolution: {integrity: sha512-mCHSMAsDTLK5YH//lcV3eFEgiR23Ym0U9oEvgZA0667gqRZg/2px+7LshDvErEKv2XZ8ixzw3p1IrBzLQHGSsw==} + '@libsql/linux-arm64-musl@0.5.28': + resolution: {integrity: sha512-zLlgKyG96DKJ4skFtubHbWuWRUW8YpcjHVyKyJJDIp2USPQKLXfB+rT06OSQIS90Bm3dbfU+9rAlNX0ua0cSvw==} cpu: [arm64] os: [linux] - '@libsql/linux-x64-gnu@0.5.22': - resolution: {integrity: sha512-kNBHaIkSg78Y4BqAdgjcR2mBilZXs4HYkAmi58J+4GRwDQZh5fIUWbnQvB9f95DkWUIGVeenqLRFY2pcTmlsew==} + '@libsql/linux-x64-gnu@0.5.28': + resolution: {integrity: sha512-ra+fk6FmTl8ma4opxcTJ8JIt3KrSr+TrFCJtgccfg+7HDdGiE5Ys6jIJMqYuYG61Mv40z3lPZxRivBK5sP9o/w==} cpu: [x64] os: [linux] - '@libsql/linux-x64-musl@0.5.22': - resolution: {integrity: sha512-UZ4Xdxm4pu3pQXjvfJiyCzZop/9j/eA2JjmhMaAhe3EVLH2g11Fy4fwyUp9sT1QJYR1kpc2JLuybPM0kuXv/Tg==} + '@libsql/linux-x64-musl@0.5.28': + resolution: {integrity: sha512-XXl7lHsZEY8szhfMWoe0tFzKXv52nlDt0kckMmtYb97AkKB0bIcxbgx5zTHGyoXLMMhLvEo33OR7NHvjdDyvjw==} cpu: [x64] os: [linux] - '@libsql/win32-x64-msvc@0.5.22': - resolution: {integrity: sha512-Fj0j8RnBpo43tVZUVoNK6BV/9AtDUM5S7DF3LB4qTYg1LMSZqi3yeCneUTLJD6XomQJlZzbI4mst89yspVSAnA==} + '@libsql/win32-x64-msvc@0.5.28': + resolution: {integrity: sha512-KLB4TQKkRdki9Ugbz+X986a1F7IaZUZbPuTfPNFi7slTT+biSw0b/LPJ0tCk7EHyo5QmN8tZ1XLZwI7GgUBsfA==} cpu: [x64] os: [win32] @@ -739,14 +592,14 @@ packages: resolution: {integrity: sha512-eCjSuHtYlfDL/aUQzO9W13XZPaBgKN12jv2ZNjTU8q9N6tgHCDKmGOvVh/lwgsK1kz430cNGVpk13sXKjwpVNw==} engines: {node: '>=22.13.0'} - '@mastra/core@1.10.0': - resolution: {integrity: sha512-T0xzIU4ibYqZVdsf948KfG2wAgNHL6oWw8zzADfo7qSXsirn/2qWVi1A6UD6xceoYyVAYhW6bWgnqd7rgWUrBw==} + '@mastra/core@1.15.0': + resolution: {integrity: sha512-jg9MzscX304BhYYOFIlf7oVjY4cAT37vLskJeXxBU7F+N9eRZe0IeVTFoWyE4JE2T8CV7aBXlXEkk8ZovfJyZQ==} engines: {node: '>=22.13.0'} peerDependencies: zod: ^3.25.0 || ^4.0.0 - '@mastra/deployer@1.10.0': - resolution: {integrity: sha512-lOgOV8XTJNzBvwTJZM9Ilsgb5J4/ozvgucZ/QvN1ZDuv7dPOPA8NsOYgxc/BsMLQvh+/skAzQuaWWrjpgek/wg==} + '@mastra/deployer@1.15.0': + resolution: {integrity: sha512-d+ePM2wT/PamvWe+VGM2cQpjiU2xCWm5Bi09Pkn3IBNDVBRx1QCPeuraBayZiW1P60Udoz+XfXh0SUcKyR7oZw==} engines: {node: '>=22.13.0'} peerDependencies: '@mastra/core': '>=1.0.0-0 <2.0.0-0' @@ -759,45 +612,45 @@ packages: '@mastra/core': '>=1.0.0-0 <2.0.0-0' zod: ^3.25.0 || ^4.0.0 - '@mastra/libsql@1.6.4': - resolution: {integrity: sha512-SPtiXS5uo6yxWwPc6Joo8i/u+WN8OiZZjklmrh0uEVV7yWTyfzRSKxgtV0IZJvSmzVvxKWusXhLB7IToCfbceA==} + '@mastra/libsql@1.7.1': + resolution: {integrity: sha512-tY7Lk4KQIsibiOH7jz1Nu6zKDkyOttNkA8uWf0MDDT5CZKbB3npVD42c+q9zBrQrPSgKnKpXRvnjb1wIW5xQKw==} engines: {node: '>=22.13.0'} peerDependencies: '@mastra/core': '>=1.0.0-0 <2.0.0-0' - '@mastra/loggers@1.0.2': - resolution: {integrity: sha512-3gUp3Nvyi94WoJaUNXdui8efasRWEh3vCL9B9bdv3mRa54GOzVLUQWkoxO6QWI3Jw/XBpHvhHsbNmvF/bVh13Q==} + '@mastra/loggers@1.0.3': + resolution: {integrity: sha512-H0vvQI59b8FRlswf8GOaYVKXr10EizLUJ3OC7Kc9IFAXnNkX8OhUDVXRIxDpLHYsxhilPumVJN/lOcRVmkvocA==} engines: {node: '>=22.13.0'} peerDependencies: '@mastra/core': '>=1.0.0-0 <2.0.0-0' - '@mastra/memory@1.6.1': - resolution: {integrity: sha512-MtsALWky0ZJ5LiOsM5qP2y+FNBYfqtmWtb1FXMOg9tkXeDHQ3wd7hnCCrPrRpoBydH3APFF9fMO9NPSc2PBNVg==} + '@mastra/memory@1.9.0': + resolution: {integrity: sha512-sIldHoY7RkdoicY1n6prsuo6ewioJDCDVG/tgGFI9pWwCr/XQaGDVZwPce985vZ91u1rB5iZeJr6NF3MpBbbCA==} engines: {node: '>=22.13.0'} peerDependencies: '@mastra/core': '>=1.4.1-0 <2.0.0-0' zod: ^3.25.0 || ^4.0.0 - '@mastra/observability@1.3.1': - resolution: {integrity: sha512-r4AyxHjc7iNBHY+aX0ovt9tYXof6F+eHO9F68RNHiWbqDV0wBjnvmVwHKjgpIJ3fayCtPpHINnAAJTxei1fT3w==} + '@mastra/observability@1.5.1': + resolution: {integrity: sha512-/PoDmWRGjr1icM6Im+fcvOfw3MHHgOZbCjHyXPBBT/5oWptDCbAlxSn6Ft2imx55qC5TM1INkuxLcxKLR1Dq3Q==} engines: {node: '>=22.13.0'} peerDependencies: - '@mastra/core': '>=1.9.0-0 <2.0.0-0' + '@mastra/core': '>=1.13.0-0 <2.0.0-0' - '@mastra/pg@1.7.2': - resolution: {integrity: sha512-k6t2sOFlox857VLVztN5ocwswG7rgsZV5C/YJ5JB/lrf/Ita847mghWlmOQTvU0EDol66I2uvcCIXJ/sjZE+SA==} + '@mastra/pg@1.8.2': + resolution: {integrity: sha512-SmrwHS32CqqsKVRVfhk3O7frx8cpG9h/tr89fL8btnC+sR8762VH5Ta9cMZiypcODh0Rjpr2SHqyOATs7dRqCQ==} engines: {node: '>=22.13.0'} peerDependencies: '@mastra/core': '>=1.4.0-0 <2.0.0-0' - '@mastra/schema-compat@1.1.3': - resolution: {integrity: sha512-szLMJhqfnEn4VctFLKRZ2NIpfg+3UTghQWgy8Fcdchj2HvHxB2uilJxRybM9ugMmvyE+W48tVdz4Xi2Z1P3pFA==} + '@mastra/schema-compat@1.2.6': + resolution: {integrity: sha512-mmk1spyn/fi6n/rICeKXKRG8ZjrpUQbf/VESKjSVq+MtbZFDqzbNJ81HI/+dvr5rQf7wZEGrkubzEKSnWrZJ1g==} engines: {node: '>=22.13.0'} peerDependencies: zod: ^3.25.0 || ^4.0.0 - '@mastra/server@1.10.0': - resolution: {integrity: sha512-x9BscatpvpQXyyWDFImvKhKaEO/mZZ04J9KmcAVIw0KBY1kaLtNRoEwq5B8xAnN9GxLw3tc7RMBxUl+mD6nZlQ==} + '@mastra/server@1.15.0': + resolution: {integrity: sha512-kSJ22MGtUuB/BtDecWOfvB9SsBBqqzz3/11lxuROsyO48rrCfo2tAqEVtY1vIP7JzdFljgcmvActZK6cZgW+cA==} engines: {node: '>=22.13.0'} peerDependencies: '@mastra/core': '>=1.7.1-0 <2.0.0-0' @@ -857,8 +710,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@29.0.0': - resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==} + '@rollup/plugin-commonjs@29.0.2': + resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -911,128 +764,128 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.55.3': - resolution: {integrity: sha512-qyX8+93kK/7R5BEXPC2PjUt0+fS/VO2BVHjEHyIEWiYn88rcRBHmdLgoJjktBltgAf+NY7RfCGB1SoyKS/p9kg==} + '@rollup/rollup-android-arm-eabi@4.60.0': + resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.55.3': - resolution: {integrity: sha512-6sHrL42bjt5dHQzJ12Q4vMKfN+kUnZ0atHHnv4V0Wd9JMTk7FDzSY35+7qbz3ypQYMBPANbpGK7JpnWNnhGt8g==} + '@rollup/rollup-android-arm64@4.60.0': + resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.55.3': - resolution: {integrity: sha512-1ht2SpGIjEl2igJ9AbNpPIKzb1B5goXOcmtD0RFxnwNuMxqkR6AUaaErZz+4o+FKmzxcSNBOLrzsICZVNYa1Rw==} + '@rollup/rollup-darwin-arm64@4.60.0': + resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.55.3': - resolution: {integrity: sha512-FYZ4iVunXxtT+CZqQoPVwPhH7549e/Gy7PIRRtq4t5f/vt54pX6eG9ebttRH6QSH7r/zxAFA4EZGlQ0h0FvXiA==} + '@rollup/rollup-darwin-x64@4.60.0': + resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.55.3': - resolution: {integrity: sha512-M/mwDCJ4wLsIgyxv2Lj7Len+UMHd4zAXu4GQ2UaCdksStglWhP61U3uowkaYBQBhVoNpwx5Hputo8eSqM7K82Q==} + '@rollup/rollup-freebsd-arm64@4.60.0': + resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.55.3': - resolution: {integrity: sha512-5jZT2c7jBCrMegKYTYTpni8mg8y3uY8gzeq2ndFOANwNuC/xJbVAoGKR9LhMDA0H3nIhvaqUoBEuJoICBudFrA==} + '@rollup/rollup-freebsd-x64@4.60.0': + resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.55.3': - resolution: {integrity: sha512-YeGUhkN1oA+iSPzzhEjVPS29YbViOr8s4lSsFaZKLHswgqP911xx25fPOyE9+khmN6W4VeM0aevbDp4kkEoHiA==} + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': + resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.55.3': - resolution: {integrity: sha512-eo0iOIOvcAlWB3Z3eh8pVM8hZ0oVkK3AjEM9nSrkSug2l15qHzF3TOwT0747omI6+CJJvl7drwZepT+re6Fy/w==} + '@rollup/rollup-linux-arm-musleabihf@4.60.0': + resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.55.3': - resolution: {integrity: sha512-DJay3ep76bKUDImmn//W5SvpjRN5LmK/ntWyeJs/dcnwiiHESd3N4uteK9FDLf0S0W8E6Y0sVRXpOCoQclQqNg==} + '@rollup/rollup-linux-arm64-gnu@4.60.0': + resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.55.3': - resolution: {integrity: sha512-BKKWQkY2WgJ5MC/ayvIJTHjy0JUGb5efaHCUiG/39sSUvAYRBaO3+/EK0AZT1RF3pSj86O24GLLik9mAYu0IJg==} + '@rollup/rollup-linux-arm64-musl@4.60.0': + resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.55.3': - resolution: {integrity: sha512-Q9nVlWtKAG7ISW80OiZGxTr6rYtyDSkauHUtvkQI6TNOJjFvpj4gcH+KaJihqYInnAzEEUetPQubRwHef4exVg==} + '@rollup/rollup-linux-loong64-gnu@4.60.0': + resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.55.3': - resolution: {integrity: sha512-2H5LmhzrpC4fFRNwknzmmTvvyJPHwESoJgyReXeFoYYuIDfBhP29TEXOkCJE/KxHi27mj7wDUClNq78ue3QEBQ==} + '@rollup/rollup-linux-loong64-musl@4.60.0': + resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.55.3': - resolution: {integrity: sha512-9S542V0ie9LCTznPYlvaeySwBeIEa7rDBgLHKZ5S9DBgcqdJYburabm8TqiqG6mrdTzfV5uttQRHcbKff9lWtA==} + '@rollup/rollup-linux-ppc64-gnu@4.60.0': + resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.55.3': - resolution: {integrity: sha512-ukxw+YH3XXpcezLgbJeasgxyTbdpnNAkrIlFGDl7t+pgCxZ89/6n1a+MxlY7CegU+nDgrgdqDelPRNQ/47zs0g==} + '@rollup/rollup-linux-ppc64-musl@4.60.0': + resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.55.3': - resolution: {integrity: sha512-Iauw9UsTTvlF++FhghFJjqYxyXdggXsOqGpFBylaRopVpcbfyIIsNvkf9oGwfgIcf57z3m8+/oSYTo6HutBFNw==} + '@rollup/rollup-linux-riscv64-gnu@4.60.0': + resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.55.3': - resolution: {integrity: sha512-3OqKAHSEQXKdq9mQ4eajqUgNIK27VZPW3I26EP8miIzuKzCJ3aW3oEn2pzF+4/Hj/Moc0YDsOtBgT5bZ56/vcA==} + '@rollup/rollup-linux-riscv64-musl@4.60.0': + resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.55.3': - resolution: {integrity: sha512-0CM8dSVzVIaqMcXIFej8zZrSFLnGrAE8qlNbbHfTw1EEPnFTg1U1ekI0JdzjPyzSfUsHWtodilQQG/RA55berA==} + '@rollup/rollup-linux-s390x-gnu@4.60.0': + resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.55.3': - resolution: {integrity: sha512-+fgJE12FZMIgBaKIAGd45rxf+5ftcycANJRWk8Vz0NnMTM5rADPGuRFTYar+Mqs560xuART7XsX2lSACa1iOmQ==} + '@rollup/rollup-linux-x64-gnu@4.60.0': + resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.55.3': - resolution: {integrity: sha512-tMD7NnbAolWPzQlJQJjVFh/fNH3K/KnA7K8gv2dJWCwwnaK6DFCYST1QXYWfu5V0cDwarWC8Sf/cfMHniNq21A==} + '@rollup/rollup-linux-x64-musl@4.60.0': + resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.55.3': - resolution: {integrity: sha512-u5KsqxOxjEeIbn7bUK1MPM34jrnPwjeqgyin4/N6e/KzXKfpE9Mi0nCxcQjaM9lLmPcHmn/xx1yOjgTMtu1jWQ==} + '@rollup/rollup-openbsd-x64@4.60.0': + resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.55.3': - resolution: {integrity: sha512-vo54aXwjpTtsAnb3ca7Yxs9t2INZg7QdXN/7yaoG7nPGbOBXYXQY41Km+S1Ov26vzOAzLcAjmMdjyEqS1JkVhw==} + '@rollup/rollup-openharmony-arm64@4.60.0': + resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.55.3': - resolution: {integrity: sha512-HI+PIVZ+m+9AgpnY3pt6rinUdRYrGHvmVdsNQ4odNqQ/eRF78DVpMR7mOq7nW06QxpczibwBmeQzB68wJ+4W4A==} + '@rollup/rollup-win32-arm64-msvc@4.60.0': + resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.55.3': - resolution: {integrity: sha512-vRByotbdMo3Wdi+8oC2nVxtc3RkkFKrGaok+a62AT8lz/YBuQjaVYAS5Zcs3tPzW43Vsf9J0wehJbUY5xRSekA==} + '@rollup/rollup-win32-ia32-msvc@4.60.0': + resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.55.3': - resolution: {integrity: sha512-POZHq7UeuzMJljC5NjKi8vKMFN6/5EOqcX1yGntNLp7rUTpBAXQ1hW8kWPFxYLv07QMcNM75xqVLGPWQq6TKFA==} + '@rollup/rollup-win32-x64-gnu@4.60.0': + resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.55.3': - resolution: {integrity: sha512-aPFONczE4fUFKNXszdvnd2GqKEYQdV5oEsIbKPujJmWlCI9zEsv1Otig8RKK+X9bed9gFUN6LAeN4ZcNuu4zjg==} + '@rollup/rollup-win32-x64-msvc@4.60.0': + resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==} cpu: [x64] os: [win32] @@ -1119,6 +972,15 @@ packages: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} + '@topcoder/wipro-ai-sdk-provider@git+https://git.topcoder.com/Topcoder-Platform/Wipro-Provider-AI-SDK.git#92233a2b00d9dd46900437b54c406231ef24d7b2': + resolution: {commit: 92233a2b00d9dd46900437b54c406231ef24d7b2, repo: https://git.topcoder.com/Topcoder-Platform/Wipro-Provider-AI-SDK.git, type: git} + version: 0.0.1 + peerDependencies: + zod: ^3.22.4 + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} @@ -1168,11 +1030,11 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/node@25.3.3': - resolution: {integrity: sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==} + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} - '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + '@types/qs@6.15.0': + resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -1195,97 +1057,97 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript-eslint/eslint-plugin@8.56.1': - resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} + '@typescript-eslint/eslint-plugin@8.57.1': + resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.56.1 + '@typescript-eslint/parser': ^8.57.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.56.1': - resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} + '@typescript-eslint/parser@8.57.1': + resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.56.1': - resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} + '@typescript-eslint/project-service@8.57.1': + resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.56.1': - resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} + '@typescript-eslint/scope-manager@8.57.1': + resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.56.1': - resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} + '@typescript-eslint/tsconfig-utils@8.57.1': + resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.56.1': - resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} + '@typescript-eslint/type-utils@8.57.1': + resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.56.1': - resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} + '@typescript-eslint/types@8.57.1': + resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.56.1': - resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} + '@typescript-eslint/typescript-estree@8.57.1': + resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.56.1': - resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} + '@typescript-eslint/utils@8.57.1': + resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.56.1': - resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} + '@typescript-eslint/visitor-keys@8.57.1': + resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vercel/oidc@3.1.0': resolution: {integrity: sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w==} engines: {node: '>= 20'} - '@vitest/expect@4.0.18': - resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + '@vitest/expect@4.1.0': + resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} - '@vitest/mocker@4.0.18': - resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + '@vitest/mocker@4.1.0': + resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.0.18': - resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + '@vitest/pretty-format@4.1.0': + resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} - '@vitest/runner@4.0.18': - resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + '@vitest/runner@4.1.0': + resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} - '@vitest/snapshot@4.0.18': - resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + '@vitest/snapshot@4.1.0': + resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==} - '@vitest/spy@4.0.18': - resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + '@vitest/spy@4.1.0': + resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} - '@vitest/utils@4.0.18': - resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@vitest/utils@4.1.0': + resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} '@zeit/schemas@2.36.0': resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} @@ -1312,14 +1174,14 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - ai-sdk-ollama@3.8.0: - resolution: {integrity: sha512-Nlla8FpK8QFMNh9m8sPCZoNqnr+n+Ud0QTqpXNds4j/b/lbVZGaji13ZcRuuFvBwPwd4xnFkNrijJzi70Ih1Tg==} + ai-sdk-ollama@3.8.1: + resolution: {integrity: sha512-DeNG88t3Knsu0AFNU8qe20tp82W+9yczgjduSltIEFWvo2mKuR3MeUNjg5/iGz2IBOkYKnni8pDoI19OxOCN/Q==} engines: {node: '>=22'} peerDependencies: - ai: ^6.0.89 + ai: ^6.0.116 - ai@6.0.105: - resolution: {integrity: sha512-rp+exWtZS3J0DDvZIfetpKCIg7D3cCsvBPoFN3I67IDTs9aoBZDbpecoIkmNLT+U9RBkoEial3OGHRvme23HCw==} + ai@6.0.134: + resolution: {integrity: sha512-YalNEaavld/kE444gOcsMKXdVVRGEe0SK77fAFcWYcqLg+a7xKnEet8bdfrEAJTfnMjj01rhgrIL10903w1a5Q==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1335,9 +1197,6 @@ packages: ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} @@ -1423,8 +1282,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.0: - resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + baseline-browser-mapping@2.10.10: + resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -1487,8 +1346,8 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - caniuse-lite@1.0.30001775: - resolution: {integrity: sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==} + caniuse-lite@1.0.30001781: + resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -1706,8 +1565,8 @@ packages: resolution: {integrity: sha512-/RInbCy1d4P6Zdfa+TMVsf/ufZVotat5hCw3QXmWtjU+3pFEOvOQ7ibo3aIxyCJw2leIeAMjmPj+1SLJiCpdrQ==} engines: {node: '>=12.0.0'} - electron-to-chromium@1.5.302: - resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} + electron-to-chromium@1.5.321: + resolution: {integrity: sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1737,17 +1596,15 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.27.4: + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} engines: {node: '>=18'} hasBin: true @@ -1766,8 +1623,8 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-scope@9.1.1: - resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: @@ -1778,8 +1635,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.0.2: - resolution: {integrity: sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==} + eslint@10.1.0: + resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1788,8 +1645,8 @@ packages: jiti: optional: true - espree@11.1.1: - resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} esprima@4.0.1: @@ -1843,8 +1700,8 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - express-rate-limit@8.2.1: - resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} + express-rate-limit@8.3.1: + resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -1943,8 +1800,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.4: - resolution: {integrity: sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} follow-redirects@1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} @@ -1982,8 +1839,8 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} + fs-extra@11.3.4: + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} engines: {node: '>=14.14'} fsevents@2.3.3: @@ -2002,8 +1859,8 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} - get-port@7.1.0: - resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + get-port@7.2.0: + resolution: {integrity: sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==} engines: {node: '>=16'} get-proto@1.0.1: @@ -2018,8 +1875,8 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-tsconfig@4.13.7: + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} @@ -2075,8 +1932,8 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} - hono-openapi@1.2.0: - resolution: {integrity: sha512-t3u4v8YCltExDl4d9cLqg/mcrYFSs9Gjb5puF1CePPrvv1JQOo1Kc50HAmGt47CWHIoc/W8Q9LY3t3yqU0dxFw==} + hono-openapi@1.3.0: + resolution: {integrity: sha512-xDvCWpWEIv0weEmnl3EjRQzqbHIO8LnfzMuYOCmbuyE5aes6aXxLg4vM3ybnoZD5TiTUkA6PuRQPJs3R7WRBig==} peerDependencies: '@hono/standard-validator': ^0.2.0 '@standard-community/standard-json': ^0.3.5 @@ -2090,8 +1947,8 @@ packages: hono: optional: true - hono@4.12.3: - resolution: {integrity: sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==} + hono@4.12.9: + resolution: {integrity: sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==} engines: {node: '>=16.9.0'} http-errors@2.0.1: @@ -2134,6 +1991,11 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2148,8 +2010,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} ipaddr.js@1.9.1: @@ -2231,8 +2093,8 @@ packages: isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.2: + resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} @@ -2292,8 +2154,8 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - jsonrepair@3.13.2: - resolution: {integrity: sha512-Leuly0nbM4R+S5SVJk3VHfw1oxnlEK9KygdZvfUtEtTawNDyzB4qa1xWTmFt1aeoA7sXZkVTRuIixJ8bAvqVUg==} + jsonrepair@3.13.3: + resolution: {integrity: sha512-BTznj0owIt2CBAH/LTo7+1I5pMvl1e1033LRl/HUowlZmJOIhzC0zbX5bxMngLkfT4WnzPP26QnW5wMr2g9tsQ==} hasBin: true jsonwebtoken@8.5.1: @@ -2328,8 +2190,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libsql@0.5.22: - resolution: {integrity: sha512-NscWthMQt7fpU8lqd7LXMvT9pi+KhhmTHAJWUB/Lj6MWa0MKFv0F2V4C6WKKpjCVZl0VwcDz4nOI3CyaT1DDiA==} + libsql@0.5.28: + resolution: {integrity: sha512-wKqx9FgtPcKHdPfR/Kfm0gejsnbuf8zV+ESPmltFvsq5uXwdeN9fsWn611DmqrdXj1e94NkARcMA2f1syiAqOg==} cpu: [x64, arm64, wasm32, arm] os: [darwin, linux, win32] @@ -2365,6 +2227,9 @@ packages: lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} @@ -2374,8 +2239,8 @@ packages: lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + lru-cache@11.2.7: + resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -2391,8 +2256,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - mastra@1.3.7: - resolution: {integrity: sha512-njrWc0Gb2rFtp0gVET8sLQOgORTv5g+2xi/MpUp87i0xuRctTWa7GkqiES/PUAZfvwg/v0HXNjam6RFdP52ekA==} + mastra@1.3.14: + resolution: {integrity: sha512-PBFn90Uqeq6Cd0+wJouOi0fD8orMbvIy1oJuKrDW04b/qT94q2WMy6sqYujEfADOrfFrh2XF43s091IBzNNEAw==} engines: {node: '>=22.13.0'} hasBin: true peerDependencies: @@ -2473,9 +2338,6 @@ packages: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -2486,8 +2348,8 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true - mlly@1.8.0: - resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} @@ -2502,8 +2364,8 @@ packages: resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} engines: {node: '>=0.8.0'} - nan@2.25.0: - resolution: {integrity: sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==} + nan@2.26.2: + resolution: {integrity: sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==} nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} @@ -2517,6 +2379,11 @@ packages: resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} hasBin: true + needle@2.9.1: + resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==} + engines: {node: '>= 4.4.x'} + hasBin: true + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -2538,8 +2405,8 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.36: + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} @@ -2656,27 +2523,27 @@ packages: pg-cloudflare@1.3.0: resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} - pg-connection-string@2.11.0: - resolution: {integrity: sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==} + pg-connection-string@2.12.0: + resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==} pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-pool@3.12.0: - resolution: {integrity: sha512-eIJ0DES8BLaziFHW7VgJEBPi5hg3Nyng5iKpYtj3wbcAUV9A1wLgWiY7ajf/f/oO1wfxt83phXPY8Emztg7ITg==} + pg-pool@3.13.0: + resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==} peerDependencies: pg: '>=8.0' - pg-protocol@1.12.0: - resolution: {integrity: sha512-uOANXNRACNdElMXJ0tPz6RBM0XQ61nONGAwlt8da5zs/iUOOCLBQOHSXnrC6fMsvtjxbOJrZZl5IScGv+7mpbg==} + pg-protocol@1.13.0: + resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg@8.19.0: - resolution: {integrity: sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ==} + pg@8.20.0: + resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==} engines: {node: '>= 16.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -2763,6 +2630,9 @@ packages: resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} engines: {node: '>=18'} + probe-image-size@7.2.3: + resolution: {integrity: sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==} + process-warning@5.0.0: resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} @@ -2890,8 +2760,8 @@ packages: esbuild: '>=0.18.0' rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - rollup@4.55.3: - resolution: {integrity: sha512-y9yUpfQvetAjiDLtNMf1hL9NXchIJgWt6zIKeoB+tCd3npX08Eqfzg60V9DhIGVMtQ0AlMkFw5xa+AQ37zxnAA==} + rollup@4.60.0: + resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2915,6 +2785,10 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -2958,8 +2832,8 @@ packages: resolution: {integrity: sha512-ZeC3y0JsOYTdwujt5uOd7ILJNilbgFzUtg/LEG4wUv43LayFNLZ28ec8+Su+h3saHlJmIwYxBzfDHHZuiMA15g==} engines: {node: '>=8.0'} - serve-handler@6.1.6: - resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} + serve-handler@6.1.7: + resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} serve-static@1.16.3: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} @@ -2969,8 +2843,8 @@ packages: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} - serve@14.2.5: - resolution: {integrity: sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==} + serve@14.2.6: + resolution: {integrity: sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q==} engines: {node: '>= 14'} hasBin: true @@ -3044,8 +2918,11 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + + stream-parser@0.3.1: + resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==} string-similarity@4.0.4: resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} @@ -3109,16 +2986,16 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} to-regex-range@5.0.1: @@ -3129,12 +3006,15 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + tokenx@1.3.0: + resolution: {integrity: sha512-NLdXTEZkKiO0gZuLtMoZKjCXTREXeZZt8nnnNeyoXtNZAfG/GKGSbQtLU5STspc0rMSwcA+UJfWZkbNU01iKmQ==} + tough-cookie@2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -3164,8 +3044,8 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} - typescript-eslint@8.56.1: - resolution: {integrity: sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==} + typescript-eslint@8.57.1: + resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3276,20 +3156,21 @@ packages: yaml: optional: true - vitest@4.0.18: - resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + vitest@4.1.0: + resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.18 - '@vitest/browser-preview': 4.0.18 - '@vitest/browser-webdriverio': 4.0.18 - '@vitest/ui': 4.0.18 + '@vitest/browser-playwright': 4.1.0 + '@vitest/browser-preview': 4.1.0 + '@vitest/browser-webdriverio': 4.1.0 + '@vitest/ui': 4.1.0 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -3342,8 +3223,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3367,8 +3248,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} hasBin: true @@ -3414,13 +3295,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@ai-sdk/gateway@3.0.59(zod@4.3.6)': + '@ai-sdk/gateway@3.0.77(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.16(zod@4.3.6) + '@ai-sdk/provider-utils': 4.0.21(zod@4.3.6) '@vercel/oidc': 3.1.0 zod: 4.3.6 + '@ai-sdk/openai-compatible@2.0.37(zod@4.3.6)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.21(zod@4.3.6) + zod: 4.3.6 + '@ai-sdk/provider-utils@2.2.8(zod@4.3.6)': dependencies: '@ai-sdk/provider': 1.1.3 @@ -3442,7 +3329,7 @@ snapshots: eventsource-parser: 3.0.6 zod: 4.3.6 - '@ai-sdk/provider-utils@4.0.16(zod@4.3.6)': + '@ai-sdk/provider-utils@4.0.21(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 '@standard-schema/spec': 1.1.0 @@ -3453,15 +3340,15 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@2.0.0': + '@ai-sdk/provider@2.0.1': dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@2.0.1': + '@ai-sdk/provider@3.0.0': dependencies: json-schema: 0.4.0 - '@ai-sdk/provider@3.0.0': + '@ai-sdk/provider@3.0.5': dependencies: json-schema: 0.4.0 @@ -3490,8 +3377,8 @@ snapshots: '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -3506,7 +3393,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -3590,12 +3477,12 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.6': + '@babel/helpers@7.29.2': dependencies: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.29.0': + '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 @@ -3642,7 +3529,7 @@ snapshots: '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -3650,7 +3537,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -3662,205 +3549,125 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@clack/core@1.0.1': + '@clack/core@1.1.0': dependencies: - picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@1.0.1': + '@clack/prompts@1.1.0': dependencies: - '@clack/core': 1.0.1 - picocolors: 1.1.1 + '@clack/core': 1.1.0 sisteransi: 1.0.5 - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/aix-ppc64@0.27.3': - optional: true - - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.27.3': - optional: true - - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-arm@0.27.3': - optional: true - - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/android-x64@0.27.3': - optional: true - - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.27.3': - optional: true - - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.27.3': - optional: true - - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.27.3': - optional: true - - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.27.3': - optional: true - - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.27.3': - optional: true - - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-arm@0.27.3': - optional: true - - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.27.3': + '@esbuild/aix-ppc64@0.27.4': optional: true - '@esbuild/linux-loong64@0.25.12': + '@esbuild/android-arm64@0.27.4': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/android-arm@0.27.4': optional: true - '@esbuild/linux-mips64el@0.25.12': + '@esbuild/android-x64@0.27.4': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/darwin-arm64@0.27.4': optional: true - '@esbuild/linux-ppc64@0.25.12': + '@esbuild/darwin-x64@0.27.4': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/freebsd-arm64@0.27.4': optional: true - '@esbuild/linux-riscv64@0.25.12': + '@esbuild/freebsd-x64@0.27.4': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-arm64@0.27.4': optional: true - '@esbuild/linux-s390x@0.25.12': + '@esbuild/linux-arm@0.27.4': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-ia32@0.27.4': optional: true - '@esbuild/linux-x64@0.25.12': + '@esbuild/linux-loong64@0.27.4': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-mips64el@0.27.4': optional: true - '@esbuild/netbsd-arm64@0.25.12': + '@esbuild/linux-ppc64@0.27.4': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/linux-riscv64@0.27.4': optional: true - '@esbuild/netbsd-x64@0.25.12': + '@esbuild/linux-s390x@0.27.4': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/linux-x64@0.27.4': optional: true - '@esbuild/openbsd-arm64@0.25.12': + '@esbuild/netbsd-arm64@0.27.4': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/netbsd-x64@0.27.4': optional: true - '@esbuild/openbsd-x64@0.25.12': + '@esbuild/openbsd-arm64@0.27.4': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-x64@0.27.4': optional: true - '@esbuild/openharmony-arm64@0.25.12': + '@esbuild/openharmony-arm64@0.27.4': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/sunos-x64@0.27.4': optional: true - '@esbuild/sunos-x64@0.25.12': + '@esbuild/win32-arm64@0.27.4': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/win32-ia32@0.27.4': optional: true - '@esbuild/win32-arm64@0.25.12': + '@esbuild/win32-x64@0.27.4': optional: true - '@esbuild/win32-arm64@0.27.3': - optional: true - - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.27.3': - optional: true - - '@esbuild/win32-x64@0.25.12': - optional: true - - '@esbuild/win32-x64@0.27.3': - optional: true - - '@eslint-community/eslint-utils@4.9.1(eslint@10.0.2)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0)': dependencies: - eslint: 10.0.2 + eslint: 10.1.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.2': + '@eslint/config-array@0.23.3': dependencies: - '@eslint/object-schema': 3.0.2 + '@eslint/object-schema': 3.0.3 debug: 4.4.3 minimatch: 10.2.4 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.2': + '@eslint/config-helpers@0.5.3': dependencies: - '@eslint/core': 1.1.0 + '@eslint/core': 1.1.1 - '@eslint/core@1.1.0': + '@eslint/core@1.1.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.0.2)': + '@eslint/js@10.0.1(eslint@10.1.0)': optionalDependencies: - eslint: 10.0.2 + eslint: 10.1.0 - '@eslint/object-schema@3.0.2': {} + '@eslint/object-schema@3.0.3': {} - '@eslint/plugin-kit@0.6.0': + '@eslint/plugin-kit@0.6.1': dependencies: - '@eslint/core': 1.1.0 + '@eslint/core': 1.1.1 levn: 0.4.1 '@expo/devcert@1.2.1': @@ -3872,9 +3679,9 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@hono/node-server@1.19.9(hono@4.12.3)': + '@hono/node-server@1.19.11(hono@4.12.9)': dependencies: - hono: 4.12.3 + hono: 4.12.9 '@humanfs/core@0.19.1': {} @@ -3913,7 +3720,7 @@ snapshots: '@libsql/core': 0.15.15 '@libsql/hrana-client': 0.7.0 js-base64: 3.7.8 - libsql: 0.5.22 + libsql: 0.5.28 promise-limit: 2.7.0 transitivePeerDependencies: - bufferutil @@ -3923,10 +3730,10 @@ snapshots: dependencies: js-base64: 3.7.8 - '@libsql/darwin-arm64@0.5.22': + '@libsql/darwin-arm64@0.5.28': optional: true - '@libsql/darwin-x64@0.5.22': + '@libsql/darwin-x64@0.5.28': optional: true '@libsql/hrana-client@0.7.0': @@ -3944,30 +3751,30 @@ snapshots: '@libsql/isomorphic-ws@0.1.5': dependencies: '@types/ws': 8.18.1 - ws: 8.19.0 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@libsql/linux-arm-gnueabihf@0.5.22': + '@libsql/linux-arm-gnueabihf@0.5.28': optional: true - '@libsql/linux-arm-musleabihf@0.5.22': + '@libsql/linux-arm-musleabihf@0.5.28': optional: true - '@libsql/linux-arm64-gnu@0.5.22': + '@libsql/linux-arm64-gnu@0.5.28': optional: true - '@libsql/linux-arm64-musl@0.5.22': + '@libsql/linux-arm64-musl@0.5.28': optional: true - '@libsql/linux-x64-gnu@0.5.22': + '@libsql/linux-x64-gnu@0.5.28': optional: true - '@libsql/linux-x64-musl@0.5.22': + '@libsql/linux-x64-musl@0.5.28': optional: true - '@libsql/win32-x64-msvc@0.5.22': + '@libsql/win32-x64-msvc@0.5.28': optional: true '@lukeed/csprng@1.1.0': {} @@ -3978,35 +3785,37 @@ snapshots: '@mastra/auth-auth0@1.0.1': dependencies: - jose: 6.1.3 + jose: 6.2.2 - '@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)': + '@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)': dependencies: '@a2a-js/sdk': 0.2.5 '@ai-sdk/provider-utils-v5': '@ai-sdk/provider-utils@3.0.20(zod@4.3.6)' '@ai-sdk/provider-utils-v6': '@ai-sdk/provider-utils@4.0.0(zod@4.3.6)' - '@ai-sdk/provider-v5': '@ai-sdk/provider@2.0.0' - '@ai-sdk/provider-v6': '@ai-sdk/provider@3.0.0' + '@ai-sdk/provider-v5': '@ai-sdk/provider@2.0.1' + '@ai-sdk/provider-v6': '@ai-sdk/provider@3.0.5' '@ai-sdk/ui-utils-v5': '@ai-sdk/ui-utils@1.2.11(zod@4.3.6)' '@isaacs/ttlcache': 2.1.4 '@lukeed/uuid': 2.0.1 - '@mastra/schema-compat': 1.1.3(zod@4.3.6) + '@mastra/schema-compat': 1.2.6(zod@4.3.6) '@modelcontextprotocol/sdk': 1.27.1(zod@4.3.6) '@sindresorhus/slugify': 2.2.1 + '@standard-schema/spec': 1.1.0 + ajv: 8.18.0 dotenv: 17.3.1 execa: 9.6.1 gray-matter: 4.0.3 - hono: 4.12.3 - hono-openapi: 1.2.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(hono@4.12.3)(openapi-types@12.1.3) + hono: 4.12.9 + hono-openapi: 1.3.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(hono@4.12.9)(openapi-types@12.1.3) ignore: 7.0.5 js-tiktoken: 1.0.21 json-schema: 0.4.0 - lru-cache: 11.2.6 + lru-cache: 11.2.7 p-map: 7.0.4 p-retry: 7.1.1 picomatch: 4.0.3 radash: 12.1.1 - ws: 8.19.0 + ws: 8.20.0 xxhash-wasm: 1.1.0 zod: 4.3.6 transitivePeerDependencies: @@ -4020,30 +3829,32 @@ snapshots: - supports-color - utf-8-validate - '@mastra/deployer@1.10.0(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(typescript@5.9.3)(zod@4.3.6)': + '@mastra/deployer@1.15.0(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(typescript@5.9.3)(zod@4.3.6)': dependencies: '@babel/core': 7.29.0 '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) - '@mastra/server': 1.10.0(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6) - '@optimize-lodash/rollup-plugin': 5.1.0(rollup@4.55.3) - '@rollup/plugin-alias': 6.0.0(rollup@4.55.3) - '@rollup/plugin-commonjs': 29.0.0(rollup@4.55.3) - '@rollup/plugin-esm-shim': 0.1.8(rollup@4.55.3) - '@rollup/plugin-json': 6.1.0(rollup@4.55.3) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.55.3) - '@rollup/plugin-virtual': 3.0.2(rollup@4.55.3) + '@babel/traverse': 7.29.0 + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + '@mastra/server': 1.15.0(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6) + '@optimize-lodash/rollup-plugin': 5.1.0(rollup@4.60.0) + '@rollup/plugin-alias': 6.0.0(rollup@4.60.0) + '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.0) + '@rollup/plugin-esm-shim': 0.1.8(rollup@4.60.0) + '@rollup/plugin-json': 6.1.0(rollup@4.60.0) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.0) + '@rollup/plugin-virtual': 3.0.2(rollup@4.60.0) '@sindresorhus/slugify': 2.2.1 + '@types/babel__traverse': 7.28.0 empathic: 2.0.0 - esbuild: 0.25.12 + esbuild: 0.27.4 find-workspaces: 0.3.1 - fs-extra: 11.3.3 - hono: 4.12.3 + fs-extra: 11.3.4 + hono: 4.12.9 local-pkg: 1.1.2 resolve-from: 5.0.0 resolve.exports: 2.0.3 - rollup: 4.55.3 - rollup-plugin-esbuild: 6.2.1(esbuild@0.25.12)(rollup@4.55.3) + rollup: 4.60.0 + rollup-plugin-esbuild: 6.2.1(esbuild@0.27.4)(rollup@4.60.0) strip-json-comments: 5.0.3 tinyglobby: 0.2.15 typescript-paths: 1.5.1(typescript@5.9.3) @@ -4052,54 +3863,58 @@ snapshots: - supports-color - typescript - '@mastra/evals@1.1.2(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6)': + '@mastra/evals@1.1.2(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6)': dependencies: - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) compromise: 14.15.0 keyword-extractor: 0.0.28 sentiment: 5.0.2 string-similarity: 4.0.4 zod: 4.3.6 - '@mastra/libsql@1.6.4(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))': + '@mastra/libsql@1.7.1(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))': dependencies: '@libsql/client': 0.15.15 - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) transitivePeerDependencies: - bufferutil - utf-8-validate - '@mastra/loggers@1.0.2(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))': + '@mastra/loggers@1.0.3(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))': dependencies: - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) pino: 10.3.1 pino-pretty: 13.1.3 - '@mastra/memory@1.6.1(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6)': + '@mastra/memory@1.9.0(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6)': dependencies: - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) - '@mastra/schema-compat': 1.1.3(zod@4.3.6) + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + '@mastra/schema-compat': 1.2.6(zod@4.3.6) async-mutex: 0.5.0 - js-tiktoken: 1.0.21 + image-size: 2.0.2 json-schema: 0.4.0 - lru-cache: 11.2.6 + lru-cache: 11.2.7 + probe-image-size: 7.2.3 + tokenx: 1.3.0 xxhash-wasm: 1.1.0 zod: 4.3.6 + transitivePeerDependencies: + - supports-color - '@mastra/observability@1.3.1(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))': + '@mastra/observability@1.5.1(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))': dependencies: - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) - '@mastra/pg@1.7.2(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))': + '@mastra/pg@1.8.2(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))': dependencies: - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) async-mutex: 0.5.0 - pg: 8.19.0 + pg: 8.20.0 xxhash-wasm: 1.1.0 transitivePeerDependencies: - pg-native - '@mastra/schema-compat@1.1.3(zod@4.3.6)': + '@mastra/schema-compat@1.2.6(zod@4.3.6)': dependencies: json-schema-to-zod: 2.7.0 zod: 4.3.6 @@ -4107,15 +3922,15 @@ snapshots: zod-from-json-schema-v3: zod-from-json-schema@0.0.5 zod-to-json-schema: 3.25.1(zod@4.3.6) - '@mastra/server@1.10.0(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6)': + '@mastra/server@1.15.0(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(zod@4.3.6)': dependencies: - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) - hono: 4.12.3 + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + hono: 4.12.9 zod: 4.3.6 '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.9(hono@4.12.3) + '@hono/node-server': 1.19.11(hono@4.12.9) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -4124,9 +3939,9 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.12.3 - jose: 6.1.3 + express-rate-limit: 8.3.1(express@5.2.1) + hono: 4.12.9 + jose: 6.2.2 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 @@ -4151,11 +3966,11 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@optimize-lodash/rollup-plugin@5.1.0(rollup@4.55.3)': + '@optimize-lodash/rollup-plugin@5.1.0(rollup@4.60.0)': dependencies: '@optimize-lodash/transform': 3.0.6 - '@rollup/pluginutils': 5.3.0(rollup@4.55.3) - rollup: 4.55.3 + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) + rollup: 4.60.0 '@optimize-lodash/transform@3.0.6': dependencies: @@ -4168,13 +3983,13 @@ snapshots: dependencies: cross-spawn: 7.0.6 - '@rollup/plugin-alias@6.0.0(rollup@4.55.3)': + '@rollup/plugin-alias@6.0.0(rollup@4.60.0)': optionalDependencies: - rollup: 4.55.3 + rollup: 4.60.0 - '@rollup/plugin-commonjs@29.0.0(rollup@4.55.3)': + '@rollup/plugin-commonjs@29.0.2(rollup@4.60.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.55.3) + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) @@ -4182,116 +3997,116 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.55.3 + rollup: 4.60.0 - '@rollup/plugin-esm-shim@0.1.8(rollup@4.55.3)': + '@rollup/plugin-esm-shim@0.1.8(rollup@4.60.0)': dependencies: magic-string: 0.30.21 - mlly: 1.8.0 + mlly: 1.8.2 optionalDependencies: - rollup: 4.55.3 + rollup: 4.60.0 - '@rollup/plugin-json@6.1.0(rollup@4.55.3)': + '@rollup/plugin-json@6.1.0(rollup@4.60.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.55.3) + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) optionalDependencies: - rollup: 4.55.3 + rollup: 4.60.0 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.55.3)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.55.3) + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.55.3 + rollup: 4.60.0 - '@rollup/plugin-virtual@3.0.2(rollup@4.55.3)': + '@rollup/plugin-virtual@3.0.2(rollup@4.60.0)': optionalDependencies: - rollup: 4.55.3 + rollup: 4.60.0 - '@rollup/pluginutils@5.3.0(rollup@4.55.3)': + '@rollup/pluginutils@5.3.0(rollup@4.60.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.55.3 + rollup: 4.60.0 - '@rollup/rollup-android-arm-eabi@4.55.3': + '@rollup/rollup-android-arm-eabi@4.60.0': optional: true - '@rollup/rollup-android-arm64@4.55.3': + '@rollup/rollup-android-arm64@4.60.0': optional: true - '@rollup/rollup-darwin-arm64@4.55.3': + '@rollup/rollup-darwin-arm64@4.60.0': optional: true - '@rollup/rollup-darwin-x64@4.55.3': + '@rollup/rollup-darwin-x64@4.60.0': optional: true - '@rollup/rollup-freebsd-arm64@4.55.3': + '@rollup/rollup-freebsd-arm64@4.60.0': optional: true - '@rollup/rollup-freebsd-x64@4.55.3': + '@rollup/rollup-freebsd-x64@4.60.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.55.3': + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.55.3': + '@rollup/rollup-linux-arm-musleabihf@4.60.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.55.3': + '@rollup/rollup-linux-arm64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.55.3': + '@rollup/rollup-linux-arm64-musl@4.60.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.55.3': + '@rollup/rollup-linux-loong64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.55.3': + '@rollup/rollup-linux-loong64-musl@4.60.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.55.3': + '@rollup/rollup-linux-ppc64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.55.3': + '@rollup/rollup-linux-ppc64-musl@4.60.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.55.3': + '@rollup/rollup-linux-riscv64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.55.3': + '@rollup/rollup-linux-riscv64-musl@4.60.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.55.3': + '@rollup/rollup-linux-s390x-gnu@4.60.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.55.3': + '@rollup/rollup-linux-x64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-x64-musl@4.55.3': + '@rollup/rollup-linux-x64-musl@4.60.0': optional: true - '@rollup/rollup-openbsd-x64@4.55.3': + '@rollup/rollup-openbsd-x64@4.60.0': optional: true - '@rollup/rollup-openharmony-arm64@4.55.3': + '@rollup/rollup-openharmony-arm64@4.60.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.55.3': + '@rollup/rollup-win32-arm64-msvc@4.60.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.55.3': + '@rollup/rollup-win32-ia32-msvc@4.60.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.55.3': + '@rollup/rollup-win32-x64-gnu@4.60.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.55.3': + '@rollup/rollup-win32-x64-msvc@4.60.0': optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -4328,10 +4143,21 @@ snapshots: '@tootallnate/once@1.1.2': {} + '@topcoder/wipro-ai-sdk-provider@git+https://git.topcoder.com/Topcoder-Platform/Wipro-Provider-AI-SDK.git#92233a2b00d9dd46900437b54c406231ef24d7b2(zod@4.3.6)': + dependencies: + '@ai-sdk/openai-compatible': 2.0.37(zod@4.3.6) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.21(zod@4.3.6) + zod: 4.3.6 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.0 + '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.3.3 + '@types/node': 25.5.0 '@types/chai@5.2.3': dependencies: @@ -4340,11 +4166,11 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 25.3.3 + '@types/node': 25.5.0 '@types/cors@2.8.19': dependencies: - '@types/node': 25.3.3 + '@types/node': 25.5.0 '@types/deep-eql@4.0.2': {} @@ -4359,15 +4185,15 @@ snapshots: '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 25.3.3 - '@types/qs': 6.14.0 + '@types/node': 25.5.0 + '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 25.3.3 - '@types/qs': 6.14.0 + '@types/node': 25.5.0 + '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -4379,7 +4205,7 @@ snapshots: dependencies: '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 4.19.8 - '@types/qs': 6.14.0 + '@types/qs': 6.15.0 '@types/serve-static': 1.15.10 '@types/express@5.0.6': @@ -4394,11 +4220,11 @@ snapshots: '@types/mime@1.3.5': {} - '@types/node@25.3.3': + '@types/node@25.5.0': dependencies: undici-types: 7.18.2 - '@types/qs@6.14.0': {} + '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} @@ -4407,158 +4233,160 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 25.3.3 + '@types/node': 25.5.0 '@types/send@1.2.1': dependencies: - '@types/node': 25.3.3 + '@types/node': 25.5.0 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.3.3 + '@types/node': 25.5.0 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.3.3 + '@types/node': 25.5.0 '@types/ws@8.18.1': dependencies: - '@types/node': 25.3.3 + '@types/node': 25.5.0 - '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2)(typescript@5.9.3))(eslint@10.0.2)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0)(typescript@5.9.3))(eslint@10.1.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2)(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.1 - eslint: 10.0.2 + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 + eslint: 10.1.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.1(eslint@10.0.2)(typescript@5.9.3)': + '@typescript-eslint/parser@8.57.1(eslint@10.1.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3 - eslint: 10.0.2 + eslint: 10.1.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.56.1': + '@typescript-eslint/scope-manager@8.57.1': dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2)(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0)(typescript@5.9.3) debug: 4.4.3 - eslint: 10.0.2 - ts-api-utils: 2.4.0(typescript@5.9.3) + eslint: 10.1.0 + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.56.1': {} + '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3 minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@10.0.2)(typescript@5.9.3)': + '@typescript-eslint/utils@8.57.1(eslint@10.1.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - eslint: 10.0.2 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + eslint: 10.1.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.56.1': + '@typescript-eslint/visitor-keys@8.57.1': dependencies: - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/types': 8.57.1 eslint-visitor-keys: 5.0.1 '@vercel/oidc@3.1.0': {} - '@vitest/expect@4.0.18': + '@vitest/expect@4.1.0': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.3)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@25.5.0)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.0.18 + '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.3.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.0)(yaml@2.8.3) - '@vitest/pretty-format@4.0.18': + '@vitest/pretty-format@4.1.0': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 - '@vitest/runner@4.0.18': + '@vitest/runner@4.1.0': dependencies: - '@vitest/utils': 4.0.18 + '@vitest/utils': 4.1.0 pathe: 2.0.3 - '@vitest/snapshot@4.0.18': + '@vitest/snapshot@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.18 + '@vitest/pretty-format': 4.1.0 + '@vitest/utils': 4.1.0 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.18': {} + '@vitest/spy@4.1.0': {} - '@vitest/utils@4.0.18': + '@vitest/utils@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.18 - tinyrainbow: 3.0.3 + '@vitest/pretty-format': 4.1.0 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 '@zeit/schemas@2.36.0': {} @@ -4584,21 +4412,21 @@ snapshots: transitivePeerDependencies: - supports-color - ai-sdk-ollama@3.8.0(ai@6.0.105(zod@4.3.6))(zod@4.3.6): + ai-sdk-ollama@3.8.1(ai@6.0.134(zod@4.3.6))(zod@4.3.6): dependencies: '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.16(zod@4.3.6) - ai: 6.0.105(zod@4.3.6) - jsonrepair: 3.13.2 + '@ai-sdk/provider-utils': 4.0.21(zod@4.3.6) + ai: 6.0.134(zod@4.3.6) + jsonrepair: 3.13.3 ollama: 0.6.3 transitivePeerDependencies: - zod - ai@6.0.105(zod@4.3.6): + ai@6.0.134(zod@4.3.6): dependencies: - '@ai-sdk/gateway': 3.0.59(zod@4.3.6) + '@ai-sdk/gateway': 3.0.77(zod@4.3.6) '@ai-sdk/provider': 3.0.8 - '@ai-sdk/provider-utils': 4.0.16(zod@4.3.6) + '@ai-sdk/provider-utils': 4.0.21(zod@4.3.6) '@opentelemetry/api': 1.9.0 zod: 4.3.6 @@ -4613,13 +4441,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 @@ -4697,7 +4518,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.10.0: {} + baseline-browser-mapping@2.10.10: {} bcrypt-pbkdf@1.0.2: dependencies: @@ -4760,10 +4581,10 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001775 - electron-to-chromium: 1.5.302 - node-releases: 2.0.27 + baseline-browser-mapping: 2.10.10 + caniuse-lite: 1.0.30001781 + electron-to-chromium: 1.5.321 + node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) buffer-equal-constant-time@1.0.1: {} @@ -4791,7 +4612,7 @@ snapshots: camelcase@7.0.1: {} - caniuse-lite@1.0.30001775: {} + caniuse-lite@1.0.30001781: {} caseless@0.12.0: {} @@ -4939,7 +4760,7 @@ snapshots: dtrace-provider@0.8.8: dependencies: - nan: 2.25.0 + nan: 2.26.2 optional: true dunder-proto@1.0.1: @@ -4963,7 +4784,7 @@ snapshots: efrt@2.7.0: {} - electron-to-chromium@1.5.302: {} + electron-to-chromium@1.5.321: {} emoji-regex@8.0.0: {} @@ -4983,67 +4804,40 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - - esbuild@0.27.3: + esbuild@0.27.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 + '@esbuild/aix-ppc64': 0.27.4 + '@esbuild/android-arm': 0.27.4 + '@esbuild/android-arm64': 0.27.4 + '@esbuild/android-x64': 0.27.4 + '@esbuild/darwin-arm64': 0.27.4 + '@esbuild/darwin-x64': 0.27.4 + '@esbuild/freebsd-arm64': 0.27.4 + '@esbuild/freebsd-x64': 0.27.4 + '@esbuild/linux-arm': 0.27.4 + '@esbuild/linux-arm64': 0.27.4 + '@esbuild/linux-ia32': 0.27.4 + '@esbuild/linux-loong64': 0.27.4 + '@esbuild/linux-mips64el': 0.27.4 + '@esbuild/linux-ppc64': 0.27.4 + '@esbuild/linux-riscv64': 0.27.4 + '@esbuild/linux-s390x': 0.27.4 + '@esbuild/linux-x64': 0.27.4 + '@esbuild/netbsd-arm64': 0.27.4 + '@esbuild/netbsd-x64': 0.27.4 + '@esbuild/openbsd-arm64': 0.27.4 + '@esbuild/openbsd-x64': 0.27.4 + '@esbuild/openharmony-arm64': 0.27.4 + '@esbuild/sunos-x64': 0.27.4 + '@esbuild/win32-arm64': 0.27.4 + '@esbuild/win32-ia32': 0.27.4 + '@esbuild/win32-x64': 0.27.4 escalade@3.2.0: {} @@ -5053,7 +4847,7 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-scope@9.1.1: + eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 '@types/estree': 1.0.8 @@ -5064,14 +4858,14 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.0.2: + eslint@10.1.0: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.2 - '@eslint/config-helpers': 0.5.2 - '@eslint/core': 1.1.0 - '@eslint/plugin-kit': 0.6.0 + '@eslint/config-array': 0.23.3 + '@eslint/config-helpers': 0.5.3 + '@eslint/core': 1.1.1 + '@eslint/plugin-kit': 0.6.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -5080,9 +4874,9 @@ snapshots: cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 9.1.1 + eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 - espree: 11.1.1 + espree: 11.2.0 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -5099,7 +4893,7 @@ snapshots: transitivePeerDependencies: - supports-color - espree@11.1.1: + espree@11.2.0: dependencies: acorn: 8.16.0 acorn-jsx: 5.3.2(acorn@8.16.0) @@ -5162,10 +4956,10 @@ snapshots: expect-type@1.3.0: {} - express-rate-limit@8.2.1(express@5.2.1): + express-rate-limit@8.3.1(express@5.2.1): dependencies: express: 5.2.1 - ip-address: 10.0.1 + ip-address: 10.1.0 express-unless@2.1.3: {} @@ -5325,14 +5119,14 @@ snapshots: dependencies: fast-glob: 3.3.3 pkg-types: 1.3.1 - yaml: 2.8.2 + yaml: 2.8.3 flat-cache@4.0.1: dependencies: - flatted: 3.3.4 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.4: {} + flatted@3.4.2: {} follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: @@ -5362,7 +5156,7 @@ snapshots: fresh@2.0.0: {} - fs-extra@11.3.3: + fs-extra@11.3.4: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 @@ -5388,7 +5182,7 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 - get-port@7.1.0: {} + get-port@7.2.0: {} get-proto@1.0.1: dependencies: @@ -5402,7 +5196,7 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-tsconfig@4.13.6: + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 @@ -5457,16 +5251,16 @@ snapshots: help-me@5.0.0: {} - hono-openapi@1.2.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(hono@4.12.3)(openapi-types@12.1.3): + hono-openapi@1.3.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(hono@4.12.9)(openapi-types@12.1.3): dependencies: '@standard-community/standard-json': 0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6) '@standard-community/standard-openapi': 0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6) '@types/json-schema': 7.0.15 openapi-types: 12.1.3 optionalDependencies: - hono: 4.12.3 + hono: 4.12.9 - hono@4.12.3: {} + hono@4.12.9: {} http-errors@2.0.1: dependencies: @@ -5513,6 +5307,8 @@ snapshots: ignore@7.0.5: {} + image-size@2.0.2: {} + imurmurhash@0.1.4: {} inflight@1.0.6: @@ -5525,7 +5321,7 @@ snapshots: ini@1.3.8: {} - ip-address@10.0.1: {} + ip-address@10.1.0: {} ipaddr.js@1.9.1: {} @@ -5577,7 +5373,7 @@ snapshots: isstream@0.1.2: {} - jose@6.1.3: {} + jose@6.2.2: {} joycon@3.1.1: {} @@ -5622,7 +5418,7 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonrepair@3.13.2: {} + jsonrepair@3.13.3: {} jsonwebtoken@8.5.1: dependencies: @@ -5683,26 +5479,26 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libsql@0.5.22: + libsql@0.5.28: dependencies: '@neon-rs/load': 0.0.4 detect-libc: 2.0.2 optionalDependencies: - '@libsql/darwin-arm64': 0.5.22 - '@libsql/darwin-x64': 0.5.22 - '@libsql/linux-arm-gnueabihf': 0.5.22 - '@libsql/linux-arm-musleabihf': 0.5.22 - '@libsql/linux-arm64-gnu': 0.5.22 - '@libsql/linux-arm64-musl': 0.5.22 - '@libsql/linux-x64-gnu': 0.5.22 - '@libsql/linux-x64-musl': 0.5.22 - '@libsql/win32-x64-msvc': 0.5.22 + '@libsql/darwin-arm64': 0.5.28 + '@libsql/darwin-x64': 0.5.28 + '@libsql/linux-arm-gnueabihf': 0.5.28 + '@libsql/linux-arm-musleabihf': 0.5.28 + '@libsql/linux-arm64-gnu': 0.5.28 + '@libsql/linux-arm64-musl': 0.5.28 + '@libsql/linux-x64-gnu': 0.5.28 + '@libsql/linux-x64-musl': 0.5.28 + '@libsql/win32-x64-msvc': 0.5.28 limiter@1.1.5: {} local-pkg@1.1.2: dependencies: - mlly: 1.8.0 + mlly: 1.8.2 pkg-types: 2.3.0 quansync: 0.2.11 @@ -5724,13 +5520,15 @@ snapshots: lodash.isstring@4.0.1: {} + lodash.merge@4.6.2: {} + lodash.once@4.1.1: {} lodash@4.17.15: {} lodash@4.17.23: {} - lru-cache@11.2.6: {} + lru-cache@11.2.7: {} lru-cache@5.1.1: dependencies: @@ -5749,25 +5547,25 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - mastra@1.3.7(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(typescript@5.9.3)(zod@4.3.6): + mastra@1.3.14(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(typescript@5.9.3)(zod@4.3.6): dependencies: - '@clack/prompts': 1.0.1 + '@clack/prompts': 1.1.0 '@expo/devcert': 1.2.1 - '@mastra/core': 1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) - '@mastra/deployer': 1.10.0(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(typescript@5.9.3)(zod@4.3.6) - '@mastra/loggers': 1.0.2(@mastra/core@1.10.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) + '@mastra/core': 1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) + '@mastra/deployer': 1.15.0(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6))(typescript@5.9.3)(zod@4.3.6) + '@mastra/loggers': 1.0.3(@mastra/core@1.15.0(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@0.2.11)(zod-to-json-schema@3.25.1(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6)) commander: 14.0.3 dotenv: 17.3.1 execa: 9.6.1 - fs-extra: 11.3.3 - get-port: 7.1.0 + fs-extra: 11.3.4 + get-port: 7.2.0 local-pkg: 1.1.2 picocolors: 1.1.1 posthog-node: 5.17.2 prettier: 3.8.1 semver: 7.7.4 - serve: 14.2.5 - serve-handler: 6.1.6 + serve: 14.2.6 + serve-handler: 6.1.7 shell-quote: 1.8.3 strip-json-comments: 5.0.3 yocto-spinner: 1.1.0 @@ -5825,14 +5623,9 @@ snapshots: dependencies: brace-expansion: 5.0.4 - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 - optional: true minimist@1.2.8: {} @@ -5841,7 +5634,7 @@ snapshots: minimist: 1.2.8 optional: true - mlly@1.8.0: + mlly@1.8.2: dependencies: acorn: 8.16.0 pathe: 2.0.3 @@ -5862,7 +5655,7 @@ snapshots: rimraf: 2.4.5 optional: true - nan@2.25.0: + nan@2.26.2: optional: true nanoid@3.3.11: {} @@ -5872,6 +5665,14 @@ snapshots: ncp@2.0.0: optional: true + needle@2.9.1: + dependencies: + debug: 3.2.7 + iconv-lite: 0.4.24 + sax: 1.6.0 + transitivePeerDependencies: + - supports-color + negotiator@0.6.3: {} negotiator@0.6.4: {} @@ -5886,7 +5687,7 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-releases@2.0.27: {} + node-releases@2.0.36: {} npm-run-path@4.0.1: dependencies: @@ -5980,15 +5781,15 @@ snapshots: pg-cloudflare@1.3.0: optional: true - pg-connection-string@2.11.0: {} + pg-connection-string@2.12.0: {} pg-int8@1.0.1: {} - pg-pool@3.12.0(pg@8.19.0): + pg-pool@3.13.0(pg@8.20.0): dependencies: - pg: 8.19.0 + pg: 8.20.0 - pg-protocol@1.12.0: {} + pg-protocol@1.13.0: {} pg-types@2.2.0: dependencies: @@ -5998,11 +5799,11 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg@8.19.0: + pg@8.20.0: dependencies: - pg-connection-string: 2.11.0 - pg-pool: 3.12.0(pg@8.19.0) - pg-protocol: 1.12.0 + pg-connection-string: 2.12.0 + pg-pool: 3.13.0(pg@8.20.0) + pg-protocol: 1.13.0 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: @@ -6059,7 +5860,7 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.0 + mlly: 1.8.2 pathe: 2.0.3 pkg-types@2.3.0: @@ -6098,6 +5899,14 @@ snapshots: dependencies: parse-ms: 4.0.0 + probe-image-size@7.2.3: + dependencies: + lodash.merge: 4.6.2 + needle: 2.9.1 + stream-parser: 0.3.1 + transitivePeerDependencies: + - supports-color + process-warning@5.0.0: {} promise-limit@2.7.0: {} @@ -6231,46 +6040,46 @@ snapshots: glob: 6.0.4 optional: true - rollup-plugin-esbuild@6.2.1(esbuild@0.25.12)(rollup@4.55.3): + rollup-plugin-esbuild@6.2.1(esbuild@0.27.4)(rollup@4.60.0): dependencies: debug: 4.4.3 es-module-lexer: 1.7.0 - esbuild: 0.25.12 - get-tsconfig: 4.13.6 - rollup: 4.55.3 + esbuild: 0.27.4 + get-tsconfig: 4.13.7 + rollup: 4.60.0 unplugin-utils: 0.2.5 transitivePeerDependencies: - supports-color - rollup@4.55.3: + rollup@4.60.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.3 - '@rollup/rollup-android-arm64': 4.55.3 - '@rollup/rollup-darwin-arm64': 4.55.3 - '@rollup/rollup-darwin-x64': 4.55.3 - '@rollup/rollup-freebsd-arm64': 4.55.3 - '@rollup/rollup-freebsd-x64': 4.55.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.3 - '@rollup/rollup-linux-arm-musleabihf': 4.55.3 - '@rollup/rollup-linux-arm64-gnu': 4.55.3 - '@rollup/rollup-linux-arm64-musl': 4.55.3 - '@rollup/rollup-linux-loong64-gnu': 4.55.3 - '@rollup/rollup-linux-loong64-musl': 4.55.3 - '@rollup/rollup-linux-ppc64-gnu': 4.55.3 - '@rollup/rollup-linux-ppc64-musl': 4.55.3 - '@rollup/rollup-linux-riscv64-gnu': 4.55.3 - '@rollup/rollup-linux-riscv64-musl': 4.55.3 - '@rollup/rollup-linux-s390x-gnu': 4.55.3 - '@rollup/rollup-linux-x64-gnu': 4.55.3 - '@rollup/rollup-linux-x64-musl': 4.55.3 - '@rollup/rollup-openbsd-x64': 4.55.3 - '@rollup/rollup-openharmony-arm64': 4.55.3 - '@rollup/rollup-win32-arm64-msvc': 4.55.3 - '@rollup/rollup-win32-ia32-msvc': 4.55.3 - '@rollup/rollup-win32-x64-gnu': 4.55.3 - '@rollup/rollup-win32-x64-msvc': 4.55.3 + '@rollup/rollup-android-arm-eabi': 4.60.0 + '@rollup/rollup-android-arm64': 4.60.0 + '@rollup/rollup-darwin-arm64': 4.60.0 + '@rollup/rollup-darwin-x64': 4.60.0 + '@rollup/rollup-freebsd-arm64': 4.60.0 + '@rollup/rollup-freebsd-x64': 4.60.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.0 + '@rollup/rollup-linux-arm-musleabihf': 4.60.0 + '@rollup/rollup-linux-arm64-gnu': 4.60.0 + '@rollup/rollup-linux-arm64-musl': 4.60.0 + '@rollup/rollup-linux-loong64-gnu': 4.60.0 + '@rollup/rollup-linux-loong64-musl': 4.60.0 + '@rollup/rollup-linux-ppc64-gnu': 4.60.0 + '@rollup/rollup-linux-ppc64-musl': 4.60.0 + '@rollup/rollup-linux-riscv64-gnu': 4.60.0 + '@rollup/rollup-linux-riscv64-musl': 4.60.0 + '@rollup/rollup-linux-s390x-gnu': 4.60.0 + '@rollup/rollup-linux-x64-gnu': 4.60.0 + '@rollup/rollup-linux-x64-musl': 4.60.0 + '@rollup/rollup-openbsd-x64': 4.60.0 + '@rollup/rollup-openharmony-arm64': 4.60.0 + '@rollup/rollup-win32-arm64-msvc': 4.60.0 + '@rollup/rollup-win32-ia32-msvc': 4.60.0 + '@rollup/rollup-win32-x64-gnu': 4.60.0 + '@rollup/rollup-win32-x64-msvc': 4.60.0 fsevents: 2.3.3 router@2.2.0: @@ -6296,6 +6105,8 @@ snapshots: safer-buffer@2.1.2: {} + sax@1.6.0: {} + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -6351,12 +6162,12 @@ snapshots: sentiment@5.0.2: {} - serve-handler@6.1.6: + serve-handler@6.1.7: dependencies: bytes: 3.0.0 content-disposition: 0.5.2 mime-types: 2.1.18 - minimatch: 3.1.2 + minimatch: 3.1.5 path-is-inside: 1.0.2 path-to-regexp: 3.3.0 range-parser: 1.2.0 @@ -6379,10 +6190,10 @@ snapshots: transitivePeerDependencies: - supports-color - serve@14.2.5: + serve@14.2.6: dependencies: '@zeit/schemas': 2.36.0 - ajv: 8.12.0 + ajv: 8.18.0 arg: 5.0.2 boxen: 7.0.0 chalk: 5.0.1 @@ -6390,7 +6201,7 @@ snapshots: clipboardy: 3.0.0 compression: 1.8.1 is-port-reachable: 4.0.0 - serve-handler: 6.1.6 + serve-handler: 6.1.7 update-check: 1.5.4 transitivePeerDependencies: - supports-color @@ -6467,7 +6278,13 @@ snapshots: statuses@2.0.2: {} - std-env@3.10.0: {} + std-env@4.0.0: {} + + stream-parser@0.3.1: + dependencies: + debug: 2.6.9 + transitivePeerDependencies: + - supports-color string-similarity@4.0.4: {} @@ -6528,14 +6345,14 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.0.2: {} + tinyexec@1.0.4: {} tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinyrainbow@3.0.3: {} + tinyrainbow@3.1.0: {} to-regex-range@5.0.1: dependencies: @@ -6543,12 +6360,14 @@ snapshots: toidentifier@1.0.1: {} + tokenx@1.3.0: {} + tough-cookie@2.5.0: dependencies: psl: 1.15.0 punycode: 2.3.1 - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -6577,13 +6396,13 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - typescript-eslint@8.56.1(eslint@10.0.2)(typescript@5.9.3): + typescript-eslint@8.57.1(eslint@10.1.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2)(typescript@5.9.3))(eslint@10.0.2)(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2)(typescript@5.9.3) - eslint: 10.0.2 + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0)(typescript@5.9.3))(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + eslint: 10.1.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -6638,56 +6457,46 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.1(@types/node@25.3.3)(yaml@2.8.2): + vite@7.3.1(@types/node@25.5.0)(yaml@2.8.3): dependencies: - esbuild: 0.27.3 + esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.8 - rollup: 4.55.3 + rollup: 4.60.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.3.3 + '@types/node': 25.5.0 fsevents: 2.3.3 - yaml: 2.8.2 - - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.3)(yaml@2.8.2): - dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.3)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 + yaml: 2.8.3 + + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@25.5.0)(vite@7.3.1(@types/node@25.5.0)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@25.5.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.3.3)(yaml@2.8.2) + tinyrainbow: 3.1.0 + vite: 7.3.1(@types/node@25.5.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 25.3.3 + '@types/node': 25.5.0 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml web-streams-polyfill@3.3.3: {} @@ -6716,7 +6525,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.19.0: {} + ws@8.20.0: {} xtend@4.0.2: {} @@ -6726,7 +6535,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.8.2: {} + yaml@2.8.3: {} yocto-queue@0.1.0: {} diff --git a/src/mastra/agents/challenge/challenge-parser-agent.ts b/src/mastra/agents/challenge/challenge-parser-agent.ts index b9e97f0..feb9440 100644 --- a/src/mastra/agents/challenge/challenge-parser-agent.ts +++ b/src/mastra/agents/challenge/challenge-parser-agent.ts @@ -1,5 +1,5 @@ import { Agent } from '@mastra/core/agent'; -import { ollama } from '../../../utils'; +import { wipro } from '../../../utils'; /** * Master agent responsible for parsing Topcoder challenge specifications. @@ -14,28 +14,11 @@ import { ollama } from '../../../utils'; export const challengeParserAgent = new Agent({ id: 'challenge-parser-agent', name: 'Challenge Specification Parser', - model: ollama('mistral:latest', { - options: { - // Sampling — near-deterministic for strict JSON schema compliance - temperature: 0.1, - top_k: 40, - top_p: 0.9, - - // Repetition control — prevent repetitive text across many requirement entries - // and avoid echoing skill instruction phrasing into output - repeat_penalty: 1.15, - repeat_last_n: 192, - - // Context window — system prompt (~1.2K tok) + skill activations (~3K tok) - // + full challenge spec (some specs are very long) - num_ctx: 16384, - - // Generation limit — enough for structured JSON with many requirements, groups, tech stack, etc. - num_predict: 8192, - - // Prompt processing — smaller system prompt with skills loaded progressively - num_batch: 256, - }, + model: wipro.chatModel('gpt-5-chat', { + temperature: 0.1, + topK: 40, + topP: 0.9, + maxOutputTokens: 16384, }), instructions: { role: 'system', diff --git a/src/mastra/agents/jd/jd-rewriter-agent.ts b/src/mastra/agents/jd/jd-rewriter-agent.ts new file mode 100644 index 0000000..283fc63 --- /dev/null +++ b/src/mastra/agents/jd/jd-rewriter-agent.ts @@ -0,0 +1,53 @@ +import { Agent } from '@mastra/core/agent'; +import { wipro } from '../../../utils'; + +export const jdRewriterAgent = new Agent({ + id: 'jd-rewriter-agent', + name: 'Job Description Rewriter', + model: wipro.chatModel('gpt-5-chat', { + temperature: 0.3, + topK: 40, + topP: 0.9, + maxOutputTokens: 16384, + }), + instructions: { + role: 'system', + content: `You are an expert technical recruiter and job description writer for Topcoder. +Your sole job is to take a raw, rough, or vague job description and rewrite it +into a clear, professional, well-structured format suitable for posting as a +Topcoder opportunity. + +──────────────────────────────────────────────────────── +CONTEXT +──────────────────────────────────────────────────────── +Talent managers receive rough or vague job descriptions from customers that +are not in a suitable format for posting. You must rewrite them into a +standardized, professional format ensuring consistency across all +opportunities posted on the Topcoder platform. + +──────────────────────────────────────────────────────── +SKILLS-DRIVEN REWRITING PROTOCOL +──────────────────────────────────────────────────────── +Follow these concerns in order: + + 1. **jd-content-rewriting** — Rewrite the raw text into clear, professional, + specific language. Follow the rewriting principles, action verb usage, + signal word classification, and sparse/detailed input handling rules. + + 2. **jd-structure-formatting** — Format the rewritten content into the + canonical Topcoder JD structure. Follow the section order, formatting + rules, and Markdown conventions for the formattedDescription output. + + 3. **jd-skills-extraction** — Extract skill keywords from the rewritten + content. Follow the canonical casing rules, extraction heuristics, and + compound term splitting rules. + +──────────────────────────────────────────────────────── +STRICT OUTPUT CONTRACT +──────────────────────────────────────────────────────── +Return ONLY the JSON object matching the provided schema. +Do NOT add commentary, markdown fences, or extra keys. +Every field is mandatory per the schema — never omit a key. +/no_think`, + }, +}); diff --git a/src/mastra/agents/skills/skills-matching-agent.ts b/src/mastra/agents/skills/skills-matching-agent.ts index 2e1bbcd..3b9f4b7 100644 --- a/src/mastra/agents/skills/skills-matching-agent.ts +++ b/src/mastra/agents/skills/skills-matching-agent.ts @@ -1,8 +1,8 @@ import { Agent } from '@mastra/core/agent'; import { Memory } from '@mastra/memory'; -import { ollama } from '../../../utils/providers/ollama'; +import { wipro } from '../../../utils'; import { PostgresStore } from '@mastra/pg'; -import { skillDiscoveryScorers } from '../../scorers/skills-matching-scorers'; +import { instanceScorers } from '../../scorers/instance-scorers'; export const skillsMatchingAgent = new Agent({ id: 'skillsMatchingAgent', @@ -26,27 +26,23 @@ Output requirements: - No prose, no markdown, no extra keys. `, }, - model: ollama('mistral:latest', { - options: { - temperature: 0.1, - top_p: 0.5, - repeat_penalty: 1.1, - num_predict: 2048, - }, + model: wipro.chatModel('gpt-5-chat', { + temperature: 0.1, + topP: 0.5, }), scorers: { answerRelevancy: { - scorer: skillDiscoveryScorers.skillDiscoveryAnswerRelevancyScorer, + scorer: instanceScorers.instanceAnswerRelevancyScorer, sampling: { type: 'ratio', - rate: Number(process.env.SKILL_DISCOVERY_EVAL_SAMPLE_RATE ?? 0.5), + rate: Number(process.env.EVAL_SAMPLE_RATE ?? 0.5), }, }, promptAlignment: { - scorer: skillDiscoveryScorers.skillDiscoveryPromptAlignmentScorer, + scorer: instanceScorers.instancePromptAlignmentScorer, sampling: { type: 'ratio', - rate: Number(process.env.SKILL_DISCOVERY_EVAL_SAMPLE_RATE ?? 0.5), + rate: Number(process.env.EVAL_SAMPLE_RATE ?? 0.5), }, }, }, diff --git a/src/mastra/index.ts b/src/mastra/index.ts index aae67ac..61c5eef 100644 --- a/src/mastra/index.ts +++ b/src/mastra/index.ts @@ -2,22 +2,24 @@ import { Mastra } from '@mastra/core'; import { Observability, DefaultExporter, SensitiveDataFilter } from '@mastra/observability'; import { skillExtractionWorkflow } from './workflows/skills/skill-extraction-workflow'; import { challengeContextWorkflow } from './workflows/challenge/challenge-context-workflow'; +import { jdAutowriteWorkflow } from './workflows/jd/jd-autowrite-workflow'; import { skillsMatchingAgent } from './agents/skills/skills-matching-agent'; import { challengeParserAgent } from './agents/challenge/challenge-parser-agent'; +import { jdRewriterAgent } from './agents/jd/jd-rewriter-agent'; import { PostgresStore } from '@mastra/pg'; import { - skillDiscoveryAnswerRelevancyScorer, - skillDiscoveryPromptAlignmentScorer, -} from './scorers/skills-matching-scorers'; + instanceAnswerRelevancyScorer, + instancePromptAlignmentScorer, +} from './scorers/instance-scorers'; import { apiAuthLayer, middlewareConfig, tcAILogger } from '../utils'; import { aiWorkspace } from './workspaces'; export const mastra = new Mastra({ - workflows: { skillExtractionWorkflow, challengeContextWorkflow }, - agents: { skillsMatchingAgent, challengeParserAgent }, + workflows: { skillExtractionWorkflow, challengeContextWorkflow, jdAutowriteWorkflow }, + agents: { skillsMatchingAgent, challengeParserAgent, jdRewriterAgent }, scorers: { - skillDiscoveryAnswerRelevancyScorer, - skillDiscoveryPromptAlignmentScorer, + instanceAnswerRelevancyScorer, + instancePromptAlignmentScorer, }, storage: new PostgresStore({ id: 'tc-ai-api-store', @@ -36,6 +38,7 @@ export const mastra = new Mastra({ }), workspace: aiWorkspace, server: { + host: process.env.MASTRA_HOST || process.env.HOST || '0.0.0.0', port: Number(process.env.PORT || 3000), studioBase: '/studio', auth: process.env.DISABLE_AUTH === 'true' ? undefined : apiAuthLayer, @@ -44,4 +47,8 @@ export const mastra = new Mastra({ }, middleware: middlewareConfig, }, + bundler: { + externals: ["tc-core-library-js"], + transpilePackages: ['@topcoder/wipro-ai-sdk-provider'], + }, }); diff --git a/src/mastra/scorers/skills-matching-scorers.ts b/src/mastra/scorers/instance-scorers.ts similarity index 54% rename from src/mastra/scorers/skills-matching-scorers.ts rename to src/mastra/scorers/instance-scorers.ts index becc52d..ebf4725 100644 --- a/src/mastra/scorers/skills-matching-scorers.ts +++ b/src/mastra/scorers/instance-scorers.ts @@ -6,18 +6,18 @@ import { ollama } from 'ai-sdk-ollama'; const evalModel = ollama(process.env.MASTRA_EVAL_MODEL ?? 'mistral:latest'); -export const skillDiscoveryAnswerRelevancyScorer = createAnswerRelevancyScorer({ +export const instanceAnswerRelevancyScorer = createAnswerRelevancyScorer({ model: evalModel, }); -export const skillDiscoveryPromptAlignmentScorer = createPromptAlignmentScorerLLM({ +export const instancePromptAlignmentScorer = createPromptAlignmentScorerLLM({ model: evalModel, options: { evaluationMode: 'user', }, }); -export const skillDiscoveryScorers = { - skillDiscoveryAnswerRelevancyScorer, - skillDiscoveryPromptAlignmentScorer, +export const instanceScorers = { + instanceAnswerRelevancyScorer, + instancePromptAlignmentScorer, }; diff --git a/src/mastra/workflows/challenge/challenge-context-workflow.ts b/src/mastra/workflows/challenge/challenge-context-workflow.ts index 871543c..8e05e35 100644 --- a/src/mastra/workflows/challenge/challenge-context-workflow.ts +++ b/src/mastra/workflows/challenge/challenge-context-workflow.ts @@ -1,6 +1,7 @@ import { createWorkflow, createStep } from '@mastra/core/workflows'; import { z } from 'zod'; import { tcAILogger } from '../../../utils/logger'; +import { generateWithStructuredOutputFallback } from '../../../utils/structured-output-wrapper'; import { fetchChallengeTool } from '../../tools/challenge/fetch-challenge-tool'; // --------------------------------------------------------------------------- @@ -277,7 +278,7 @@ const unifiedContextSchema = z.object({ export type UnifiedChallengeContext = z.infer; // Schema for the AI-extracted portion of the context -const aiExtractedSchema = z.object({ +const _aiExtractedSchema = z.object({ requirements: z.array(requirementSchema), requirement_groups: z.array(requirementGroupSchema), tech_stack: z.array(z.string()), @@ -286,7 +287,7 @@ const aiExtractedSchema = z.object({ submission_guidelines: submissionGuidelinesSchema, }); -type AIExtracted = z.infer; +type AIExtracted = z.infer; // --------------------------------------------------------------------------- // Step 1 – Fetch challenge details by challenge ID @@ -467,7 +468,7 @@ const parseChallengeContext = createStep({ // Scorecard Fetch Helper // --------------------------------------------------------------------------- -const SCORECARD_API_BASE = process.env.TC_API_BASE_URL ?? 'https://api.topcoder.com/v6'; +const SCORECARD_API_BASE = process.env.TC_API_BASE ?? 'https://api.topcoder.com/v6'; /** * Fetches the full scorecard (with groups → sections → questions) from the @@ -506,27 +507,33 @@ async function fetchScorecard(scorecardId: string): Promise[0]['execute']> - > extends [infer P, ...unknown[]] - ? P extends { mastra: infer M } - ? NonNullable - : never - : never, - data: Record, -): Promise { - const agent = mastra.getAgentById('challenge-parser-agent'); - - // Compose all textual content the agent should analyse +function buildChallengeText(data: Record): string { const sections: string[] = []; sections.push(`# Challenge: ${(data.name as string) ?? 'Untitled'}`); @@ -548,64 +555,463 @@ async function extractWithAI( sections.push(`## Tags\n${data.tags.join(', ')}`); } + return sections.join('\n\n'); +} + +// -- Focused extraction: Requirements + Grouping ---------------------------- + +async function extractRequirementsAndGroups( + agent: any, + challengeText: string, +): Promise> { const prompt = [ 'Analyse the following Topcoder challenge specification and extract:', - '1. All individual requirements (with IDs, titles, descriptions, priorities, constraints)', - '2. Requirement groups — cluster requirements by feature area / story / problem domain they belong to', - '3. The full technology stack (languages, frameworks, tools, services, protocols, databases) implied or explicitly mentioned', - '4. Runtime environment EXPECTATIONS — there is NO submission yet; extract only what the challenge REQUIRES or IMPLIES:', - ' a. Expected target operating system (Linux, Windows, macOS, or any/unknown)', - ' b. Whether the challenge expects the solution to run inside a container (Docker, Podman, etc.) and which container tool', - ' c. Whether the challenge expects a Dockerfile / docker-compose file to be included', - ' d. Expected primary runtime engine (Node.js, Python interpreter, JVM, Go, .NET CLR, browser, etc.)', - ' e. Required runtime version if mentioned in the spec', - ' f. Programming language(s) required by the challenge (TypeScript, JavaScript, Python, Java, etc.)', - ' g. Expected package manager (npm, pnpm, yarn, pip, poetry, maven, etc.)', - ' h. Expected build tool (webpack, vite, tsc, gradle, make, etc.)', - ' i. Expected deployment target (AWS Lambda, Vercel, Heroku, on-premise, local, etc.)', - ' j. Expected server framework or type (Express, NestJS, FastAPI, Spring Boot, etc.)', - ' k. Expected primary database engine if applicable', - ' l. Expected additional services (Redis, RabbitMQ, Elasticsearch, etc.)', - ' m. Any other runtime / environment expectations inferred from the challenge spec', - '5. Existing codebase / starting-point status — determine from the challenge spec:', - ' a. Is this a GREENFIELD challenge (build from scratch) or does it build upon existing artifacts?', - ' b. If existing artifacts are provided, list each one with its type (repository, starter_code,', - ' boilerplate, documentation, api_spec, design, dataset, database_dump, config, library, other)', - ' c. For each artifact: what it contains, any URL/link, and additional notes', - ' d. Primary repository URL and branch/tag if an existing codebase is referenced', - ' e. Programming languages and frameworks already present in the existing codebase', - ' f. Write a brief summary of the starting-point status', - ' g. If no existing artifacts are mentioned, set isGreenfield=true and artifacts=[]', - '6. Submission guidelines — extract STRUCTURED information:', - ' a. A brief overall summary of the submission requirements (1-3 sentences)', - ' b. What to submit — list every deliverable (source code, README, Docker files, tests, demo video, etc.)', - ' c. How to submit — packaging format (ZIP archive, Git patch, single commit, etc.)', - ' d. Where to submit (Topcoder challenge page, GitHub PR, external URL, etc.)', - ' e. Submission type — one of: full_codebase, patch, link_to_repository, link_to_deployment, file_upload, other', - ' f. Submission storage — where the artifact lives: topcoder_upload, git_repository, external_file_storage, cloud_deployment, other', - ' g. Is this a PATCH of an existing codebase or a standalone full codebase?', - ' h. Eligibility conditions (e.g. "must pass SAST scanner", "≥80% test coverage")', - ' i. Any additional notes', + '1. All individual requirements (with sequential IDs REQ_01, REQ_02, …; concise titles ≤12 words;', + ' thorough descriptions preserving technical detail; priority high/medium/low; constraints with IDs CONSTR_01, CONSTR_02, …)', + '2. Requirement groups — cluster related requirements by feature area or problem domain', + ' (with sequential IDs GRP_01, GRP_02, …). Every requirement must appear in exactly one group.', + '', + 'Follow the spec-requirements-extraction and requirement-grouping parsing protocols from your instructions.', '', '---BEGIN CHALLENGE SPECIFICATION---', - sections.join('\n\n'), + challengeText, '---END CHALLENGE SPECIFICATION---', ].join('\n'); - tcAILogger.info('[challenge-context:extractWithAI] Invoking challenge-parser-agent for structured extraction...'); - const response = await agent.generate(prompt, { - structuredOutput: { schema: aiExtractedSchema }, + tcAILogger.info('[challenge-context:extractRequirements] Invoking agent for requirements + grouping...'); + const { response } = await generateWithStructuredOutputFallback({ + agent, + prompt, + schema: requirementsAndGroupsSchema, + sectionName: 'extractRequirements', }); + if (!response.object) throw new Error('Agent returned no structured output for requirements'); + tcAILogger.info( + `[challenge-context:extractRequirements] Done — ${response.object.requirements.length} requirements, ${response.object.requirement_groups.length} groups`, + ); + return response.object; +} - if (!response.object) { - tcAILogger.error('[challenge-context:extractWithAI] Agent returned no structured output'); - throw new Error('Challenge parser agent returned no structured output'); - } +// -- Focused extraction: Tech Stack + Runtime Environment ------------------- + +async function extractTechAndRuntime( + agent: any, + challengeText: string, +): Promise> { + const prompt = [ + 'Analyse the following Topcoder challenge specification and extract:', + '1. The full technology stack as a flat array of canonical-cased names', + ' (languages, frameworks, tools, services, protocols, databases — both explicit and implied)', + '2. Runtime environment EXPECTATIONS — there is NO submission yet; extract only what the challenge REQUIRES or IMPLIES:', + ' - Target OS, containerization expectations (tool, Dockerfile), runtime engine + version', + ' - Programming languages, package manager, build tool', + ' - Deployment target, server type, database engine, additional services', + ' - Any other runtime / environment notes', + '', + 'Follow the tech-stack-extraction parsing protocol from your instructions.', + '', + '---BEGIN CHALLENGE SPECIFICATION---', + challengeText, + '---END CHALLENGE SPECIFICATION---', + ].join('\n'); + + tcAILogger.info('[challenge-context:extractTechRuntime] Invoking agent for tech stack + runtime...'); + const { response } = await generateWithStructuredOutputFallback({ + agent, + prompt, + schema: techAndRuntimeSchema, + sectionName: 'extractTechRuntime', + }); + if (!response.object) throw new Error('Agent returned no structured output for tech/runtime'); + tcAILogger.info(`[challenge-context:extractTechRuntime] Done — ${response.object.tech_stack.length} tech stack items`); + return response.object; +} + +// -- Focused extraction: Existing Codebase Detection ------------------------ + +async function extractExistingCodebase( + agent: any, + challengeText: string, +): Promise> { + const prompt = [ + 'Analyse the following Topcoder challenge specification and determine:', + '1. Whether the challenge is GREENFIELD (build from scratch) or builds upon existing artifacts', + '2. List all pre-existing artifacts with type (repository, starter_code, boilerplate, documentation,', + ' api_spec, design, dataset, database_dump, config, library, other), description, URL, and notes', + '3. Primary repository URL and branch/tag if an existing codebase is referenced', + '4. Languages and frameworks already present in any existing codebase', + '5. A brief summary of the starting-point status', + '', + 'If no existing artifacts are mentioned, set isGreenfield=true and artifacts=[].', + '', + 'Follow the codebase-detection parsing protocol from your instructions.', + '', + '---BEGIN CHALLENGE SPECIFICATION---', + challengeText, + '---END CHALLENGE SPECIFICATION---', + ].join('\n'); - tcAILogger.info('[challenge-context:extractWithAI] Agent returned structured output successfully'); + tcAILogger.info('[challenge-context:extractCodebase] Invoking agent for codebase detection...'); + const { response } = await generateWithStructuredOutputFallback({ + agent, + prompt, + schema: codebaseExtractedSchema, + sectionName: 'extractCodebase', + }); + if (!response.object) throw new Error('Agent returned no structured output for codebase'); + tcAILogger.info(`[challenge-context:extractCodebase] Done — greenfield: ${response.object.existing_codebase.isGreenfield}`); return response.object; } +// -- Focused extraction: Submission Guidelines ------------------------------ + +async function extractSubmissionGuidelines( + agent: any, + challengeText: string, +): Promise> { + const prompt = [ + 'Analyse the following Topcoder challenge specification and extract STRUCTURED submission information:', + '1. A brief overall summary of the submission requirements (1-3 sentences)', + '2. What to submit — list ONLY deliverables EXPLICITLY requested in the specification', + '3. How to submit — packaging format (ZIP archive, Git patch, single commit, etc.)', + '4. Where to submit (Topcoder challenge page, GitHub PR, external URL, etc.)', + '5. Submission type (full_codebase, patch, link_to_repository, link_to_deployment, file_upload, other)', + '6. Submission storage (topcoder_upload, git_repository, external_file_storage, cloud_deployment, other)', + '7. Whether this is a patch of an existing codebase or standalone', + '8. Eligibility conditions (e.g. "must pass SAST scanner")', + '9. Any additional notes', + '', + 'CRITICAL RULES for whatToSubmit:', + '- Include ONLY deliverables the specification EXPLICITLY asks the submitter to deliver or include.', + '- Do NOT add deliverables inferred from evaluation criteria, review processes, or general best practices.', + '- Do NOT include "test cases" or "unit tests" unless the spec explicitly says to submit them.', + '- Do NOT list "documentation" as a separate item when a README is already listed.', + '- If in doubt whether something is a required deliverable, leave it out.', + '', + 'Follow the submission-guidelines-extraction parsing protocol from your instructions.', + '', + '---BEGIN CHALLENGE SPECIFICATION---', + challengeText, + '---END CHALLENGE SPECIFICATION---', + ].join('\n'); + + tcAILogger.info('[challenge-context:extractGuidelines] Invoking agent for submission guidelines...'); + const { response } = await generateWithStructuredOutputFallback({ + agent, + prompt, + schema: guidelinesExtractedSchema, + sectionName: 'extractGuidelines', + }); + if (!response.object) throw new Error('Agent returned no structured output for submission guidelines'); + tcAILogger.info(`[challenge-context:extractGuidelines] Done — ${response.object.submission_guidelines.whatToSubmit.length} deliverables`); + return response.object; +} + +// -- Post-extraction validation: whatToSubmit -------------------------------- + +const SUBMISSION_CONTEXT_TERMS = [ + 'submit', 'include', 'provide', 'deliver', 'attach', 'upload', + 'should contain', 'must contain', 'must include', 'should include', + 'submission should', 'submission must', 'please submit', 'you should include', +]; + +const STOP_WORDS = new Set([ + 'a', 'an', 'the', 'and', 'or', 'of', 'for', 'with', 'in', 'to', + 'is', 'it', 'on', 'at', 'by', 'be', 'as', 'do', 'no', 'not', +]); + +// Canonical deliverable names that are always valid — these are standard +// submission artifacts that any code challenge implicitly requires. +const ALWAYS_VALID_DELIVERABLES = new Set([ + 'source code', + 'code', + 'readme', + 'readme.md', +]); + +/** + * Validates each whatToSubmit item against the challenge description. + * Removes items whose keywords are absent from the spec or appear only + * outside a submission context (e.g. evaluation criteria, review rubrics). + */ +function validateWhatToSubmit(items: string[], descriptionText: string): string[] { + if (!descriptionText) return items; + + const desc = descriptionText.toLowerCase(); + + const validated = items.filter(item => { + const normalized = item.toLowerCase().trim(); + + // Canonical deliverables are always valid + if (ALWAYS_VALID_DELIVERABLES.has(normalized)) return true; + + // Direct phrase match — the deliverable name appears verbatim + if (desc.includes(normalized)) return true; + + // Extract significant words (skip stop words and short tokens) + const words = normalized + .split(/\s+/) + .filter(w => !STOP_WORDS.has(w) && w.length > 2); + + if (words.length === 0) return true; + + // All significant words must appear somewhere in the description + if (!words.every(w => desc.includes(w))) { + tcAILogger.warn( + `[challenge-context:validate] Removing "${item}" from whatToSubmit — keyword(s) missing from spec`, + ); + return false; + } + + // At least one word must appear near a submission-related verb/phrase + const inSubmissionContext = words.some(word => { + let searchFrom = 0; + while (searchFrom < desc.length) { + const idx = desc.indexOf(word, searchFrom); + if (idx === -1) break; + const windowStart = Math.max(0, idx - 200); + const windowEnd = Math.min(desc.length, idx + word.length + 200); + const window = desc.substring(windowStart, windowEnd); + if (SUBMISSION_CONTEXT_TERMS.some(term => window.includes(term))) { + return true; + } + searchFrom = idx + 1; + } + return false; + }); + + if (!inSubmissionContext) { + tcAILogger.warn( + `[challenge-context:validate] Removing "${item}" from whatToSubmit — not in submission context`, + ); + return false; + } + + return true; + }); + + // Safety net: if everything was filtered out, keep the originals + return validated.length > 0 ? validated : items; +} + +// -- Post-extraction validation: tech_stack --------------------------------- + +/** + * Patterns that indicate a tech_stack item is platform infrastructure, + * a review tool, or a generic category rather than a build technology. + * Each entry is tested case-insensitively against the item. + */ +const TECH_STACK_EXCLUDE_PATTERNS: RegExp[] = [ + // Review / CI / quality-gate tooling + /\bsast\b/i, + /\bvulnerability\s*scanner/i, + /\bcode\s*quality\s*gate/i, + /\bstatic\s*analysis/i, + /\breview\s*(bot|tool|workflow|system)/i, + // Topcoder platform internals + /\bcopilot\b/i, + /\bscorecard\b/i, + /\btopcoder\b/i, + // Generic non-technology categories + /^security$/i, + /^testing$/i, + /^ci\/cd$/i, + /^documentation$/i, +]; + +/** + * Strips tech_stack items that are platform review infrastructure, + * Topcoder internal tooling, or generic non-technology categories. + */ +function validateTechStack(items: string[]): string[] { + const validated = items.filter(item => { + if (TECH_STACK_EXCLUDE_PATTERNS.some(pat => pat.test(item))) { + tcAILogger.warn( + `[challenge-context:validate] Removing "${item}" from tech_stack — platform/review infrastructure`, + ); + return false; + } + return true; + }); + return validated.length > 0 ? validated : items; +} + +// -- Post-extraction validation: runtime_environment ------------------------ + +type RuntimeEnvironment = z.infer; + +/** + * Heuristic signals in the challenge description that indicate the + * submission is a CLI / command-line application, not a server. + */ +const CLI_INDICATORS: RegExp[] = [ + /\bcommand[\s-]*line\s*(app|application|tool|utility|program)\b/i, + /\bcli\s*(app|application|tool|utility|program)?\b/i, + /\bconsole\s*(app|application|tool|utility|program)\b/i, + /\bscript\b.*\boutput\b/i, +]; + +/** + * Patterns that indicate the deployment target was incorrectly set to a + * submission/upload destination rather than where the code actually runs. + */ +const UPLOAD_NOT_DEPLOY_PATTERNS: RegExp[] = [ + /\btopcoder[\s_-]*(platform|upload|submission|page)\b/i, + /\bsubmission[\s_-]*(platform|portal|page)\b/i, +]; + +/** + * Applies heuristic corrections to the AI-extracted runtime environment + * by cross-referencing against the challenge description text. + */ +function validateRuntimeEnvironment( + env: RuntimeEnvironment, + descriptionText: string, +): RuntimeEnvironment { + if (!descriptionText) return env; + const desc = descriptionText.toLowerCase(); + const corrected = { ...env }; + + // If the description signals a CLI app, serverType should not be an API type + const isCli = CLI_INDICATORS.some(pat => pat.test(descriptionText)); + if (isCli) { + const serverLower = (corrected.serverType ?? '').toLowerCase(); + // Only override if the current value looks like a web server/API + if (serverLower && !['none', 'cli', 'n/a', ''].includes(serverLower)) { + tcAILogger.info( + `[challenge-context:validate] Overriding serverType "${corrected.serverType}" → "CLI" (description indicates command-line app)`, + ); + corrected.serverType = 'CLI'; + } + } + + // deploymentTarget should not be a submission upload destination + if (corrected.deploymentTarget) { + if (UPLOAD_NOT_DEPLOY_PATTERNS.some(pat => pat.test(corrected.deploymentTarget!))) { + const replacement = isCli ? 'local' : 'unknown'; + tcAILogger.info( + `[challenge-context:validate] Overriding deploymentTarget "${corrected.deploymentTarget}" → "${replacement}" (was a submission destination, not a runtime target)`, + ); + corrected.deploymentTarget = replacement; + } + } + + // os: if the description never mentions the OS value, reset to "unknown" + if (corrected.os && corrected.os.toLowerCase() !== 'unknown' && corrected.os.toLowerCase() !== 'any') { + // Split compound values like "Linux/macOS" and check each part + const osParts = corrected.os.split(/[/,\s]+/).filter(Boolean); + const anyMentioned = osParts.some(part => { + const p = part.toLowerCase(); + // Check for the OS name in the description, but exclude matches + // inside URLs (e.g. "linux-gnu" in a user-agent or URL path) + const idx = desc.indexOf(p); + if (idx === -1) return false; + // Verify it's not embedded in a URL or path-like context + const surroundStart = Math.max(0, idx - 30); + const surroundEnd = Math.min(desc.length, idx + p.length + 30); + const surround = desc.substring(surroundStart, surroundEnd); + return !surround.includes('http') && !surround.includes('://'); + }); + if (!anyMentioned) { + tcAILogger.info( + `[challenge-context:validate] Overriding os "${corrected.os}" → "unknown" (not mentioned in spec)`, + ); + corrected.os = 'unknown'; + } + } + + return corrected; +} + +// -- Orchestrator: parallel decomposed extraction + validation -------------- + +/** + * Runs four focused AI extraction calls in parallel (requirements+grouping, + * tech+runtime, codebase detection, submission guidelines), then validates + * the whatToSubmit field against the source text to prune hallucinations. + * + * Note: Ollama processes requests sequentially by default. Set + * OLLAMA_NUM_PARALLEL > 1 to benefit from true parallel inference. + */ +async function extractWithAI( + mastra: Parameters< + NonNullable[0]['execute']> + > extends [infer P, ...unknown[]] + ? P extends { mastra: infer M } + ? NonNullable + : never + : never, + data: Record, +): Promise { + const agent = mastra.getAgentById('challenge-parser-agent'); + const challengeText = buildChallengeText(data); + + tcAILogger.info('[challenge-context:extractWithAI] Starting decomposed extraction (4 focused calls)...'); + + const [reqResult, techResult, codebaseResult, guidelinesResult] = await Promise.all([ + extractRequirementsAndGroups(agent, challengeText), + extractTechAndRuntime(agent, challengeText), + extractExistingCodebase(agent, challengeText), + extractSubmissionGuidelines(agent, challengeText), + ]); + + // -- Post-extraction validations ------------------------------------------ + const descriptionText = (data.description as string) ?? ''; + + // Validate whatToSubmit + const rawDeliverables = guidelinesResult.submission_guidelines.whatToSubmit; + const validatedDeliverables = validateWhatToSubmit(rawDeliverables, descriptionText); + if (validatedDeliverables.length !== rawDeliverables.length) { + tcAILogger.info( + `[challenge-context:extractWithAI] whatToSubmit pruned from ${rawDeliverables.length} to ${validatedDeliverables.length} items`, + ); + } + + // Validate tech_stack + const rawTechStack = techResult.tech_stack; + const validatedTechStack = validateTechStack(rawTechStack); + if (validatedTechStack.length !== rawTechStack.length) { + tcAILogger.info( + `[challenge-context:extractWithAI] tech_stack pruned from ${rawTechStack.length} to ${validatedTechStack.length} items`, + ); + } + + // Validate runtime_environment + const validatedRuntime = validateRuntimeEnvironment( + techResult.runtime_environment, + descriptionText, + ); + + tcAILogger.info('[challenge-context:extractWithAI] All extractions complete — assembling result'); + + return { + requirements: reqResult.requirements, + requirement_groups: reqResult.requirement_groups, + tech_stack: validatedTechStack, + runtime_environment: validatedRuntime, + existing_codebase: codebaseResult.existing_codebase, + submission_guidelines: { + ...guidelinesResult.submission_guidelines, + whatToSubmit: validatedDeliverables, + }, + }; +} + +// --------------------------------------------------------------------------- +// Testing Exports +// --------------------------------------------------------------------------- + +export const _testing = { + buildChallengeText, + extractRequirementsAndGroups, + extractTechAndRuntime, + extractExistingCodebase, + extractSubmissionGuidelines, + validateWhatToSubmit, + validateTechStack, + validateRuntimeEnvironment, +}; + // --------------------------------------------------------------------------- // Workflow Definition // --------------------------------------------------------------------------- diff --git a/src/mastra/workflows/jd/jd-autowrite-workflow.ts b/src/mastra/workflows/jd/jd-autowrite-workflow.ts new file mode 100644 index 0000000..863fa50 --- /dev/null +++ b/src/mastra/workflows/jd/jd-autowrite-workflow.ts @@ -0,0 +1,111 @@ +import { createWorkflow, createStep } from '@mastra/core/workflows'; +import { z } from 'zod'; +import { tcAILogger } from '../../../utils/logger'; +import { generateWithStructuredOutputFallback } from '../../../utils/structured-output-wrapper'; + +// --------------------------------------------------------------------------- +// Zod Schemas +// --------------------------------------------------------------------------- + +const rewrittenJdSchema = z.object({ + title: z.string().describe('Concise, descriptive job title'), + overview: z.string().describe('2-4 sentence summary of the opportunity'), + responsibilities: z.array(z.string()).describe('Action-oriented bullet list of tasks and deliverables'), + requirements: z.array(z.string()).describe('Mandatory qualifications, skills, and experience'), + niceToHaves: z.array(z.string()).describe('Preferred but non-mandatory qualifications'), + skills: z.array(z.string()).describe('Key technical and soft skill keywords'), + formattedDescription: z.string().describe('Full markdown-formatted job description ready to post'), +}); + +export type RewrittenJobDescription = z.infer; + +// --------------------------------------------------------------------------- +// Step 1 – Preprocess the raw job description +// --------------------------------------------------------------------------- + +const preprocessJobDescription = createStep({ + id: 'preprocess-raw-jd', + description: 'Normalize whitespace and truncate the raw job description', + inputSchema: z.object({ + rawDescription: z.string().min(1).describe('Raw job description text from the talent manager'), + }), + outputSchema: z.object({ + rawDescription: z.string().min(1), + }), + execute: async ({ inputData }) => { + const maxChars = Number(process.env.JD_AUTOWRITE_MAX_CHARS ?? 8000); + const normalized = inputData.rawDescription.replace(/\s+/g, ' ').trim(); + const rawDescription = normalized.slice(0, Math.max(0, maxChars)); + + tcAILogger.info(`[jd-autowrite:preprocess] Preprocessed JD — ${rawDescription.length} chars (max: ${maxChars})`); + return { rawDescription }; + }, +}); + +// --------------------------------------------------------------------------- +// Step 2 – Rewrite the job description using AI +// --------------------------------------------------------------------------- + +const rewriteJobDescription = createStep({ + id: 'rewrite-job-description', + description: 'Uses the JD rewriter agent to produce a structured, professional job description', + inputSchema: z.object({ + rawDescription: z.string().min(1), + }), + outputSchema: rewrittenJdSchema, + execute: async ({ inputData, mastra }) => { + tcAILogger.info('[jd-autowrite:rewrite] Starting AI-powered JD rewrite...'); + + const agent = mastra!.getAgentById('jd-rewriter-agent'); + + const prompt = [ + 'Rewrite the following raw job description into a well-structured, professional format.', + 'Follow the formatting standards in your instructions exactly.', + 'After extracting the structured fields (title, overview, responsibilities, requirements,', + 'niceToHaves, skills), also produce a "formattedDescription" field that is the complete', + 'Markdown-formatted job posting assembled from those sections, ready to copy-paste.', + '', + '---BEGIN RAW JOB DESCRIPTION---', + inputData.rawDescription, + '---END RAW JOB DESCRIPTION---', + ].join('\n'); + + const { response } = await generateWithStructuredOutputFallback({ + agent, + prompt, + schema: rewrittenJdSchema, + sectionName: 'rewriteJobDescription', + }); + + if (!response.object) { + tcAILogger.error('[jd-autowrite:rewrite] Agent returned no structured output'); + throw new Error('JD rewriter agent returned no structured output'); + } + + const result = response.object; + + tcAILogger.info( + `[jd-autowrite:rewrite] JD rewrite complete — title: "${result.title}", ` + + `${result.responsibilities.length} responsibilities, ` + + `${result.requirements.length} requirements, ` + + `${result.skills.length} skills`, + ); + + return result; + }, +}); + +// --------------------------------------------------------------------------- +// Workflow Definition +// --------------------------------------------------------------------------- + +export const jdAutowriteWorkflow = createWorkflow({ + id: 'jd-autowrite', + inputSchema: z.object({ + rawDescription: z.string().min(1).describe('Raw job description text to rewrite'), + }), + outputSchema: rewrittenJdSchema, +}) + .then(preprocessJobDescription) + .then(rewriteJobDescription) + .commit(); diff --git a/src/mastra/workspaces/ai.workspace.ts b/src/mastra/workspaces/ai.workspace.ts index a9cb669..97a1f4f 100644 --- a/src/mastra/workspaces/ai.workspace.ts +++ b/src/mastra/workspaces/ai.workspace.ts @@ -6,8 +6,8 @@ export const aiWorkspace = new Workspace({ readOnly: true }), bm25: true, - autoIndexPaths: ['/'], - skills: ['/skills'], + autoIndexPaths: [''], + skills: ['skills'], }); await aiWorkspace.init(); \ No newline at end of file diff --git a/src/utils/auth/m2m.service.ts b/src/utils/auth/m2m.service.ts index ea037c5..31ce782 100644 --- a/src/utils/auth/m2m.service.ts +++ b/src/utils/auth/m2m.service.ts @@ -1,7 +1,9 @@ -// eslint-disable-next-line @typescript-eslint/no-require-imports -const m2mAuth = require('tc-core-library-js').auth.m2m; +import { createRequire } from 'node:module'; import { M2mConfig } from '../../config/m2m.config'; +const require = createRequire(import.meta.url); +const m2mAuth = require('tc-core-library-js').auth.m2m; + /** * Service to get M2M token with auth0 configs */ diff --git a/src/utils/index.ts b/src/utils/index.ts index 060d7b9..bc00a6c 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -2,4 +2,5 @@ export * from './providers/ollama'; export * from './auth'; export * from './middleware'; export * from './logger'; -export * from './auth/m2m.service' \ No newline at end of file +export * from './auth/m2m.service' +export * from './providers/wipro'; \ No newline at end of file diff --git a/src/utils/providers/wipro.ts b/src/utils/providers/wipro.ts new file mode 100644 index 0000000..638a1a8 --- /dev/null +++ b/src/utils/providers/wipro.ts @@ -0,0 +1,22 @@ +import { createWipro } from "@topcoder/wipro-ai-sdk-provider"; + +// Create provider with custom auth headers +export const wipro = createWipro({ + headers: { "x-api-key": process.env.WIPRO_API_KEY! }, + chatSettings: { + // Keep sampling deterministic to reduce malformed/shape-drifted JSON. + temperature: 0, + topP: 0.1, + topK: 20, + + maxOutputTokens: 8192, + + // Avoid repetition penalties that can destabilize strict JSON output. + frequencyPenalty: 0, + presencePenalty: 0, + + // Default JSON mode for non-structured calls. + // Structured calls can still override this when needed. + responseFormat: 'json_object', + } +}); diff --git a/src/utils/structured-output-wrapper.ts b/src/utils/structured-output-wrapper.ts new file mode 100644 index 0000000..568b16e --- /dev/null +++ b/src/utils/structured-output-wrapper.ts @@ -0,0 +1,373 @@ +import { z } from 'zod'; +import { tcAILogger } from './logger'; + +export type StructuredOutputStrategy = + | 'native' + | 'jsonPromptInjection' + | 'separate-structuring-model' + | 'prepareStep' + | 'plain-text'; + +export type CallTokenUsageSource = 'native' | 'mixed' | 'estimated' | 'none'; + +export interface TokenUsageMetrics { + inputTokens: number; + outputTokens: number; + totalTokens: number; + source: CallTokenUsageSource; +} + +interface UsageTriplet { + inputTokens: number | null; + outputTokens: number | null; + totalTokens: number | null; +} + +interface GenerateWithStructuredOutputFallbackParams { + agent: any; + prompt: string; + schema: Schema; + sectionName: string; + structuringModel?: string; + generateOptions?: Record; +} + +interface GenerateWithStructuredOutputFallbackResult { + response: any; + strategy: StructuredOutputStrategy; +} + +export function toNonNegativeInt(value: unknown): number | null { + if (typeof value === 'number' && Number.isFinite(value)) { + return Math.max(0, Math.trunc(value)); + } + if (typeof value === 'string') { + const parsed = Number(value.trim()); + return Number.isFinite(parsed) ? Math.max(0, Math.trunc(parsed)) : null; + } + return null; +} + +export function estimateTokenCount(text: string): number { + if (!text) return 0; + return Math.max(1, Math.ceil(text.length / 4)); +} + +function usageFromRecord(usage: Record | undefined): UsageTriplet { + return { + inputTokens: usage + ? toNonNegativeInt( + usage.inputTokens + ?? usage.promptTokens + ?? usage.input_tokens + ?? usage.prompt_tokens, + ) + : null, + outputTokens: usage + ? toNonNegativeInt( + usage.outputTokens + ?? usage.completionTokens + ?? usage.output_tokens + ?? usage.completion_tokens, + ) + : null, + totalTokens: usage + ? toNonNegativeInt( + usage.totalTokens + ?? usage.total_tokens, + ) + : null, + }; +} + +function mergeUsageTriplets(usages: UsageTriplet[]): UsageTriplet { + const merged: UsageTriplet = { + inputTokens: null, + outputTokens: null, + totalTokens: null, + }; + + for (const usage of usages) { + if (usage.inputTokens != null) { + merged.inputTokens = (merged.inputTokens ?? 0) + usage.inputTokens; + } + if (usage.outputTokens != null) { + merged.outputTokens = (merged.outputTokens ?? 0) + usage.outputTokens; + } + if (usage.totalTokens != null) { + merged.totalTokens = (merged.totalTokens ?? 0) + usage.totalTokens; + } + } + + return merged; +} + +function extractStepUsage(response: unknown): UsageTriplet { + const steps = + response && typeof response === 'object' && 'steps' in response && Array.isArray((response as { steps?: unknown[] }).steps) + ? (response as { steps: unknown[] }).steps + : []; + + if (steps.length === 0) { + return { + inputTokens: null, + outputTokens: null, + totalTokens: null, + }; + } + + const usageEntries: UsageTriplet[] = []; + + for (const step of steps) { + if (!step || typeof step !== 'object') continue; + const stepRecord = step as Record; + + if (stepRecord.usage && typeof stepRecord.usage === 'object') { + usageEntries.push(usageFromRecord(stepRecord.usage as Record)); + } + + const responseRecord = stepRecord.response; + if (responseRecord && typeof responseRecord === 'object') { + const nested = responseRecord as Record; + if (nested.usage && typeof nested.usage === 'object') { + usageEntries.push(usageFromRecord(nested.usage as Record)); + } + } + } + + if (usageEntries.length === 0) { + return { + inputTokens: null, + outputTokens: null, + totalTokens: null, + }; + } + + return mergeUsageTriplets(usageEntries); +} + +function chooseRichestUsage(primary: UsageTriplet, steps: UsageTriplet): UsageTriplet { + const inputTokens = + steps.inputTokens != null + ? Math.max(steps.inputTokens, primary.inputTokens ?? 0) + : primary.inputTokens; + const outputTokens = + steps.outputTokens != null + ? Math.max(steps.outputTokens, primary.outputTokens ?? 0) + : primary.outputTokens; + const totalTokens = + steps.totalTokens != null + ? Math.max(steps.totalTokens, primary.totalTokens ?? 0) + : primary.totalTokens; + + return { + inputTokens, + outputTokens, + totalTokens, + }; +} + +export function buildTokenUsageMetrics( + response: unknown, + promptText: string, + outputText: string, +): TokenUsageMetrics { + const responseUsage = + response && typeof response === 'object' && 'usage' in response + ? usageFromRecord((response as { usage?: Record }).usage) + : { inputTokens: null, outputTokens: null, totalTokens: null }; + + const stepUsage = extractStepUsage(response); + const combinedUsage = chooseRichestUsage(responseUsage, stepUsage); + + const nativeInput = combinedUsage.inputTokens; + const nativeOutput = combinedUsage.outputTokens; + const nativeTotal = combinedUsage.totalTokens; + + if (nativeInput == null && nativeOutput == null && nativeTotal == null) { + const estimatedInput = estimateTokenCount(promptText); + const estimatedOutput = estimateTokenCount(outputText); + return { + inputTokens: estimatedInput, + outputTokens: estimatedOutput, + totalTokens: estimatedInput + estimatedOutput, + source: 'estimated', + }; + } + + const inputTokens = nativeInput + ?? (nativeTotal != null && nativeOutput != null ? Math.max(0, nativeTotal - nativeOutput) : estimateTokenCount(promptText)); + const outputTokens = nativeOutput + ?? (nativeTotal != null && nativeInput != null ? Math.max(0, nativeTotal - nativeInput) : estimateTokenCount(outputText)); + const totalTokens = nativeTotal ?? Math.max(0, inputTokens + outputTokens); + + const source: CallTokenUsageSource = + nativeInput != null && nativeOutput != null && nativeTotal != null + ? 'native' + : 'mixed'; + + return { + inputTokens, + outputTokens, + totalTokens, + source, + }; +} + +function isLikelyMojoOrGemini(agent: any): boolean { + const modelId = String( + agent?.model?.modelId + ?? agent?.model?.model + ?? agent?.model?.id + ?? '', + ).toLowerCase(); + + return modelId.includes('gemini') || modelId.includes('mojo'); +} + +export function isStructuredOutputCompatibilityError(error: unknown): boolean { + if (!(error instanceof Error)) return false; + const message = error.message.toLowerCase(); + + return ( + message.includes('response_format') + || message.includes('structured output') + || message.includes('response mime type') + || message.includes('application/json') + || message.includes('function calling') + || message.includes('unsupported') + || message.includes('json schema') + ); +} + +export async function generateWithStructuredOutputFallback({ + agent, + prompt, + schema, + sectionName, + structuringModel, + generateOptions, +}: GenerateWithStructuredOutputFallbackParams): Promise { + const strictStructuredOutputBase = { + schema, + errorStrategy: 'strict' as const, + }; + + const attempts: { + strategy: StructuredOutputStrategy; + options?: Record; + }[] = []; + + const attemptedStrategies = new Set(); + const pushAttempt = ( + strategy: StructuredOutputStrategy, + options?: Record, + ): void => { + if (attemptedStrategies.has(strategy)) return; + attemptedStrategies.add(strategy); + attempts.push({ strategy, options }); + }; + + const preferPromptInjection = isLikelyMojoOrGemini(agent); + + if (preferPromptInjection) { + pushAttempt('jsonPromptInjection', { + structuredOutput: { + ...strictStructuredOutputBase, + jsonPromptInjection: true, + }, + }); + } + + pushAttempt('native', { + structuredOutput: strictStructuredOutputBase, + }); + + pushAttempt('jsonPromptInjection', { + structuredOutput: { + ...strictStructuredOutputBase, + jsonPromptInjection: true, + }, + }); + + if (structuringModel) { + pushAttempt('separate-structuring-model', { + structuredOutput: { + ...strictStructuredOutputBase, + jsonPromptInjection: true, + model: structuringModel, + }, + }); + } + + pushAttempt('prepareStep', { + maxSteps: 2, + prepareStep: async ({ stepNumber }: { stepNumber: number }) => { + if (stepNumber === 0) { + return { + structuredOutput: undefined, + }; + } + + return { + tools: undefined, + toolChoice: 'none', + structuredOutput: { + ...strictStructuredOutputBase, + jsonPromptInjection: true, + ...(structuringModel ? { model: structuringModel } : {}), + }, + }; + }, + }); + + let lastCompatibilityError: unknown = null; + + for (const attempt of attempts) { + try { + tcAILogger.info( + `[json-wrapper:structured-output] Section "${sectionName}" attempt: ${attempt.strategy}`, + ); + + const response = attempt.options + ? await agent.generate(prompt, { ...(generateOptions ?? {}), ...attempt.options }) + : generateOptions + ? await agent.generate(prompt, generateOptions) + : await agent.generate(prompt); + + return { + response, + strategy: attempt.strategy, + }; + } catch (err: unknown) { + if (!isStructuredOutputCompatibilityError(err)) { + throw err; + } + + lastCompatibilityError = err; + tcAILogger.warn( + `[json-wrapper:structured-output] Section "${sectionName}" attempt ` + + `"${attempt.strategy}" failed compatibility checks: ` + + `${err instanceof Error ? err.message : String(err)}`, + ); + } + } + + tcAILogger.warn( + `[json-wrapper:structured-output] Section "${sectionName}" exhausted structured output strategies; ` + + 'falling back to plain-text generation for JSON recovery', + ); + + if (lastCompatibilityError instanceof Error) { + tcAILogger.warn( + `[json-wrapper:structured-output] Section "${sectionName}" last compatibility error: ` + + lastCompatibilityError.message, + ); + } + + const response = await agent.generate(prompt); + return { + response, + strategy: 'plain-text', + }; +} diff --git a/tests/fixtures/github-skills-import.json b/tests/fixtures/github-skills-import.json new file mode 100644 index 0000000..6db4271 --- /dev/null +++ b/tests/fixtures/github-skills-import.json @@ -0,0 +1,47 @@ +{ + "id": "df5c70b7-e016-4a34-8b5d-2be3f94e903b", + "name": "Topcoder Skills Github Skills Import", + "description": "## Overview\n\nWe are currently expanding and cleaning up the skills associated with members on the Topcoder platform. To make it easier for members to get verified for specific skills, this challenge will implement a proof-of-concept app that can look at a Github user's profile and recommend specific skills from the Topcoder skills API that should be verified for that user.\n\n## Technology Stack\n* Github\n* Typescript\n\n## Individual Requirements\nThe overall submission should just be a simple command line app, written in Typescript, that can authorize a user and then output the list of recommended verified skills and additional information requested below.\n\n### 1. Authentication / Github API\nWe will need a way to authenticate against the Github API. Please target the Github OAuth flow: https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps. The device authorization flow is probably the easiest. We will only scrape the authenticated user ('me') using the API and the OAuth token. We won't focus on public information or users that aren't the authenticated user. We want to be able to pull as much information as possible.\n\nWhen using the Github API, please ensure that we handle rate limits gracefully and can continue / resume if we run into any limits.\n\n### 2. Standardized skills API\n\nThe Topcoder skills list can be found in our standardized skills API. All skills that are discovered and recommended by your submission must be from our standardized skills list and referenced by ID as well as the skill name.\n\n* https://github.com/topcoder-platform/standardized-skills-api\n* https://api.topcoder-dev.com/v5/standardized-skills/api-docs \n\nPlease target https://api.topcoder-dev.com/v5 for the CLI app. Our dev environment has the same list of skills as our prod environment.\n\n### 3. Skills verification\n\nWe do not have a preferred manner of verifying skills for a Github user. We are open to suggestions here, and the preferred method will be the one that is the most accurate and well documented.\n\nYour submission should output progress information while it's running so we can see what repos and other information is being parsed for a given account.\n\nThe final output should be a list of recommended skills to be verified for a given Github user based on their profile and all the information we scraped. \n\nEach recommendation should include:\n\n* Skill ID from the standardized skills API\n* Skill name from the standardized skills API\n* A score / confidence of the recommended skill (0-100)\n* Information about why this skill is recommended for this user, and why the confidence score was derived. This could be links to a specific repo, checkin, pull request, etc… We will use this for validation\n\nFor each run for an individual please, please also output a run summary: repos scanned, contributions inspected, total number of API calls, elapsed time, etc…\n\nThe more complete the parsing and investigation of a user's account, the better. We can look at individual repos they have contributed to and the percentage of specific techs for those repos. We can look at individual commits, individual pull requests, etc…\n\nSubmissions that only do a superficial job of finding skills or just do a basic tech scrape of the repos a user has access to won't be acceptable - we want a deep dive into the user's actions on Gtihub.\n\nWe will evaluate on: correctness of skill IDs, quality of evidence links, breadth of analysis, and documentation.\n\n\n#### AI Usage\n\nIf you use AI in your solution for skills matching and verification, that is alright, but the implementation **must** be provider-agnostic. Our ideal would be Ollama or Open AI API implementations, to more easily plug into our platform\n\n### Submission Guideline\n\nPlease submit the full command line app, written in Typescript. You should include a README.md including how to install dependencies, configure, and run the app. The README should also include detailed information on your approach chosen and why it meets the requirements.\n\n#### AI Reviewers\n\nWith the AI reviewers now active in the Topcoder platform, your submission must past the SAST and vulnerability scanners to be considered eligible for review.\n", + "descriptionFormat": "markdown", + "tags": [], + "skills": [ + { + "id": "609d27ae-201c-43bd-a1a9-5c795878ff46", + "name": "Github", + "category": { + "id": "aa495f25-2f2d-4334-9b6f-2ffe11d835d2", + "name": "Software Development Lifecycle (SDLC)" + } + }, + { + "id": "96452335-30c6-41bc-9c7e-cdfe56422d47", + "name": "TypeScript", + "category": { + "id": "481b5ebc-2fe6-45ed-a90c-736936d458d7", + "name": "Programming and Development" + } + }, + { + "id": "266ac85b-2ba0-4338-96a9-61a264cfd546", + "name": "REST API Development", + "category": { + "id": "481b5ebc-2fe6-45ed-a90c-736936d458d7", + "name": "Programming and Development" + } + }, + { + "id": "3167f6ae-a323-4114-a85e-497314753fff", + "name": "OAuth", + "category": { + "id": "221f4e3f-1ac8-438b-9dc1-977e30656789", + "name": "Cybersecurity" + } + } + ], + "_expectedContext": { + "techStackMustIncludeAny": ["TypeScript", "Typescript", "typescript"], + "whatToSubmitMustNotInclude": ["Test cases", "Unit tests"], + "minRequirements": 3, + "maxRequirements": 12 + } +} diff --git a/tests/integration/challenge-context/extraction.test.ts b/tests/integration/challenge-context/extraction.test.ts new file mode 100644 index 0000000..03a40df --- /dev/null +++ b/tests/integration/challenge-context/extraction.test.ts @@ -0,0 +1,414 @@ +import { describe, it, expect, beforeAll } from 'vitest'; +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { Agent } from '@mastra/core/agent'; +import { createOllama } from 'ai-sdk-ollama'; +import { _testing } from '../../../src/mastra/workflows/challenge/challenge-context-workflow'; + +const { + buildChallengeText, + extractRequirementsAndGroups, + extractTechAndRuntime, + extractExistingCodebase, + extractSubmissionGuidelines, + validateWhatToSubmit, + validateTechStack, + validateRuntimeEnvironment, +} = _testing; + +// --------------------------------------------------------------------------- +// Configuration +// --------------------------------------------------------------------------- + +const OLLAMA_URL = process.env.OLLAMA_API_URL || 'http://localhost:11434'; +const MODEL = process.env.TEST_MODEL || 'mistral:latest'; +const CALL_TIMEOUT_MS = 120_000; + +// --------------------------------------------------------------------------- +// Fixture loading +// --------------------------------------------------------------------------- + +interface Fixture { + data: Record; + challengeText: string; + description: string; + expected: { + techStackMustIncludeAny: string[]; + whatToSubmitMustNotInclude: string[]; + minRequirements: number; + maxRequirements: number; + }; +} + +function loadFixture(name: string): Fixture { + const raw = readFileSync( + resolve(__dirname, '../../fixtures', `${name}.json`), + 'utf-8', + ); + const data = JSON.parse(raw); + const expected = data._expectedContext; + return { + data, + challengeText: buildChallengeText(data), + description: data.description ?? '', + expected, + }; +} + +// --------------------------------------------------------------------------- +// Agent factory — uses local Ollama, same config as production agent +// --------------------------------------------------------------------------- + +function createTestAgent(): Agent { + const ollama = createOllama({ baseURL: OLLAMA_URL }); + return new Agent({ + id: 'test-challenge-parser-agent', + name: 'Test Challenge Parser', + model: ollama(MODEL, { + options: { + temperature: 0.1, + top_k: 40, + top_p: 0.9, + repeat_penalty: 1.15, + repeat_last_n: 192, + num_ctx: 16384, + num_predict: 8192, + num_batch: 256, + }, + }), + instructions: { + role: 'system', + content: `You are an expert Topcoder challenge specification analyst. +Your sole job is to read the FULL challenge specification and produce a structured JSON +object that captures every requirement, technology, and submission guideline. + +STRICT OUTPUT CONTRACT: Return ONLY the JSON object matching the provided schema. +Do NOT add commentary, markdown fences, or extra keys. +Every field is mandatory per the schema — never omit a key. + +CRITICAL — submission guidelines: +- List ONLY deliverables the spec EXPLICITLY asks the submitter to deliver. +- Do NOT add deliverables inferred from evaluation criteria or review rubrics. +- Do NOT include "test cases" or "unit tests" unless the spec explicitly says to submit them. +- Do NOT list "documentation" separately when "README" is already listed. +/no_think`, + }, + }); +} + +// --------------------------------------------------------------------------- +// Ollama connectivity check +// --------------------------------------------------------------------------- + +let ollamaAvailable = false; + +beforeAll(async () => { + try { + const res = await fetch(`${OLLAMA_URL}/api/tags`, { + signal: AbortSignal.timeout(5_000), + }); + ollamaAvailable = res.ok; + } catch { + ollamaAvailable = false; + } + + if (!ollamaAvailable) { + console.warn( + `\n Ollama not reachable at ${OLLAMA_URL} — AI integration tests will be skipped.\n` + + ' Start Ollama or set OLLAMA_API_URL to run these tests.\n', + ); + } +}); + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +describe('challenge-context extraction (integration)', () => { + let agent: Agent; + let fixture: Fixture; + + beforeAll(() => { + fixture = loadFixture('github-skills-import'); + if (ollamaAvailable) { + agent = createTestAgent(); + } + }); + + // -- Requirements + Grouping ----------------------------------------------- + + describe('extractRequirementsAndGroups', () => { + it('extracts requirements with valid IDs and structure', async () => { + if (!ollamaAvailable) return; + + const t0 = performance.now(); + const result = await extractRequirementsAndGroups(agent, fixture.challengeText); + const elapsed = performance.now() - t0; + console.log(` extractRequirementsAndGroups: ${(elapsed / 1000).toFixed(1)}s`); + console.log(` requirements: ${result.requirements.length}, groups: ${result.requirement_groups.length}`); + + expect(result.requirements.length).toBeGreaterThanOrEqual(fixture.expected.minRequirements); + expect(result.requirements.length).toBeLessThanOrEqual(fixture.expected.maxRequirements); + + for (const req of result.requirements) { + expect(req.id).toMatch(/^REQ_\d+$/); + expect(req.title).toBeTruthy(); + expect(req.description).toBeTruthy(); + expect(['high', 'medium', 'low']).toContain(req.priority); + expect(Array.isArray(req.constraints)).toBe(true); + } + + // Every requirement appears in exactly one group + const allGroupedReqIds = result.requirement_groups.flatMap(g => g.requirementIds); + const reqIds = result.requirements.map(r => r.id); + expect(new Set(allGroupedReqIds).size).toBe(allGroupedReqIds.length); + for (const id of reqIds) { + expect(allGroupedReqIds).toContain(id); + } + + for (const group of result.requirement_groups) { + expect(group.id).toMatch(/^GRP_\d+$/); + expect(group.name).toBeTruthy(); + expect(group.requirementIds.length).toBeGreaterThan(0); + } + }, CALL_TIMEOUT_MS); + }); + + // -- Tech Stack + Runtime -------------------------------------------------- + + describe('extractTechAndRuntime', () => { + it('extracts at least one expected technology', async () => { + if (!ollamaAvailable) return; + + const t0 = performance.now(); + const result = await extractTechAndRuntime(agent, fixture.challengeText); + const elapsed = performance.now() - t0; + console.log(` extractTechAndRuntime: ${(elapsed / 1000).toFixed(1)}s`); + console.log(` tech_stack: [${result.tech_stack.join(', ')}]`); + + expect(result.tech_stack.length).toBeGreaterThan(0); + + // At least one of the expected techs must appear (case-insensitive) + const techLower = result.tech_stack.map(t => t.toLowerCase()); + const found = fixture.expected.techStackMustIncludeAny.some( + expected => techLower.some(t => t.includes(expected.toLowerCase())), + ); + expect(found).toBe(true); + + // No exact duplicates + expect(new Set(result.tech_stack).size).toBe(result.tech_stack.length); + + // Runtime environment basic structure + expect(result.runtime_environment.programmingLanguages.length).toBeGreaterThan(0); + expect(result.runtime_environment.os).toBeTruthy(); + }, CALL_TIMEOUT_MS); + }); + + // -- Codebase Detection ---------------------------------------------------- + + describe('extractExistingCodebase', () => { + it('returns valid codebase structure with a summary', async () => { + if (!ollamaAvailable) return; + + const t0 = performance.now(); + const result = await extractExistingCodebase(agent, fixture.challengeText); + const elapsed = performance.now() - t0; + console.log(` extractExistingCodebase: ${(elapsed / 1000).toFixed(1)}s`); + console.log(` greenfield: ${result.existing_codebase.isGreenfield}, artifacts: ${result.existing_codebase.artifacts.length}`); + + expect(typeof result.existing_codebase.isGreenfield).toBe('boolean'); + expect(result.existing_codebase.summary).toBeTruthy(); + expect(Array.isArray(result.existing_codebase.artifacts)).toBe(true); + }, CALL_TIMEOUT_MS); + }); + + // -- Submission Guidelines ------------------------------------------------- + + describe('extractSubmissionGuidelines', () => { + it('does not include hallucinated deliverables', async () => { + if (!ollamaAvailable) return; + + const t0 = performance.now(); + const result = await extractSubmissionGuidelines(agent, fixture.challengeText); + const elapsed = performance.now() - t0; + console.log(` extractSubmissionGuidelines: ${(elapsed / 1000).toFixed(1)}s`); + console.log(` whatToSubmit: [${result.submission_guidelines.whatToSubmit.join(', ')}]`); + + const guidelines = result.submission_guidelines; + expect(guidelines.summary).toBeTruthy(); + expect(guidelines.whatToSubmit.length).toBeGreaterThan(0); + + const deliverablesLower = guidelines.whatToSubmit.map(d => d.toLowerCase()); + + for (const mustNot of fixture.expected.whatToSubmitMustNotInclude) { + expect( + deliverablesLower.some(d => d.includes(mustNot.toLowerCase())), + ).toBe(false); + } + }, CALL_TIMEOUT_MS); + }); + + // -- validateWhatToSubmit (deterministic, no Ollama needed) ----------------- + + describe('validateWhatToSubmit', () => { + it('prunes hallucinated deliverables', () => { + const items = ['Source code', 'README.md', 'Test cases', 'Documentation']; + const result = validateWhatToSubmit(items, fixture.description); + + const resultLower = result.map(r => r.toLowerCase()); + expect(resultLower).not.toContain('test cases'); + }); + + it('keeps canonical deliverables even if not literally in spec', () => { + const items = ['Source code', 'README.md']; + const result = validateWhatToSubmit(items, fixture.description); + expect(result.length).toBe(2); + }); + + it('returns original list when all items would be pruned', () => { + const items = ['Completely fabricated item']; + const result = validateWhatToSubmit(items, fixture.description); + expect(result).toEqual(items); + }); + + it('handles empty description gracefully', () => { + const items = ['Source code', 'Test cases']; + const result = validateWhatToSubmit(items, ''); + expect(result).toEqual(items); + }); + }); + + // -- validateTechStack (deterministic, no Ollama needed) ------------------- + + describe('validateTechStack', () => { + it('removes platform review infrastructure items', () => { + const items = ['TypeScript', 'SAST Scanner', 'Node.js', 'Vulnerability Scanner']; + const result = validateTechStack(items); + expect(result).toEqual(['TypeScript', 'Node.js']); + }); + + it('removes Topcoder platform tooling', () => { + const items = ['React', 'Topcoder Review Bot', 'PostgreSQL']; + const result = validateTechStack(items); + expect(result).toEqual(['React', 'PostgreSQL']); + }); + + it('removes generic non-technology categories', () => { + const items = ['TypeScript', 'Security', 'Testing', 'Docker', 'Documentation']; + const result = validateTechStack(items); + expect(result).toEqual(['TypeScript', 'Docker']); + }); + + it('keeps legitimate technologies untouched', () => { + const items = ['TypeScript', 'GitHub API', 'OAuth 2.0', 'REST', 'Node.js']; + const result = validateTechStack(items); + expect(result).toEqual(items); + }); + + it('returns original list if all items would be pruned', () => { + const items = ['SAST Scanner']; + const result = validateTechStack(items); + expect(result).toEqual(items); + }); + }); + + // -- validateRuntimeEnvironment (deterministic, no Ollama needed) ---------- + + describe('validateRuntimeEnvironment', () => { + const baseEnv = { + os: 'Linux/macOS', + containerized: false, + runtimeEngine: 'Node.js', + programmingLanguages: ['TypeScript'], + packageManager: 'npm', + buildTool: 'tsc', + deploymentTarget: 'topcoder_platform', + serverType: 'REST API', + databaseEngine: 'none', + additionalServices: [], + }; + + it('overrides serverType to CLI when description says "command line app"', () => { + const desc = 'Build a simple command line app that does X.'; + const result = validateRuntimeEnvironment(baseEnv, desc); + expect(result.serverType).toBe('CLI'); + }); + + it('overrides deploymentTarget from topcoder_platform to local for CLI app', () => { + const desc = 'Build a command line application that processes data.'; + const result = validateRuntimeEnvironment(baseEnv, desc); + expect(result.deploymentTarget).toBe('local'); + }); + + it('overrides os to unknown when not mentioned in description', () => { + const desc = 'Build a CLI tool that analyzes GitHub repos.'; + const result = validateRuntimeEnvironment(baseEnv, desc); + expect(result.os).toBe('unknown'); + }); + + it('keeps os when explicitly mentioned in description', () => { + const desc = 'This app must run on Linux servers.'; + const env = { ...baseEnv, os: 'Linux' }; + const result = validateRuntimeEnvironment(env, desc); + expect(result.os).toBe('Linux'); + }); + + it('does not override serverType when app is not a CLI', () => { + const desc = 'Build a REST API service that exposes endpoints.'; + const result = validateRuntimeEnvironment(baseEnv, desc); + expect(result.serverType).toBe('REST API'); + }); + + it('overrides deploymentTarget from submission_platform even for non-CLI', () => { + const desc = 'Build a web API.'; + const env = { ...baseEnv, serverType: 'Express', deploymentTarget: 'Topcoder submission page' }; + const result = validateRuntimeEnvironment(env, desc); + expect(result.deploymentTarget).toBe('unknown'); + }); + + it('handles empty description gracefully', () => { + const result = validateRuntimeEnvironment(baseEnv, ''); + expect(result).toEqual(baseEnv); + }); + + it('does not match OS names inside URLs', () => { + const desc = 'Check https://docs.example.com/linux-setup for details. Build a CLI tool.'; + const env = { ...baseEnv, os: 'Linux' }; + const result = validateRuntimeEnvironment(env, desc); + // "linux" appears but inside a URL-like context — should reset + expect(result.os).toBe('unknown'); + }); + }); + + // -- Determinism check ----------------------------------------------------- + + describe('determinism', () => { + it('produces consistent tech stack across two runs', async () => { + if (!ollamaAvailable) return; + + const [run1, run2] = await Promise.all([ + extractTechAndRuntime(agent, fixture.challengeText), + extractTechAndRuntime(agent, fixture.challengeText), + ]); + + console.log(` run1 tech_stack: [${run1.tech_stack.join(', ')}]`); + console.log(` run2 tech_stack: [${run2.tech_stack.join(', ')}]`); + + // Same count (allow +-2 for minor nondeterminism) + expect( + Math.abs(run1.tech_stack.length - run2.tech_stack.length), + ).toBeLessThanOrEqual(2); + }, CALL_TIMEOUT_MS * 2); + + it('produces consistent codebase detection across two runs', async () => { + if (!ollamaAvailable) return; + + const [cb1, cb2] = await Promise.all([ + extractExistingCodebase(agent, fixture.challengeText), + extractExistingCodebase(agent, fixture.challengeText), + ]); + + expect(cb1.existing_codebase.isGreenfield).toBe(cb2.existing_codebase.isGreenfield); + }, CALL_TIMEOUT_MS * 2); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index 2608d97..20953df 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,5 +10,5 @@ "noEmit": true, "outDir": "dist" }, - "include": ["src/**/*"] + "include": ["src/**/*", "tests/**/*"] } diff --git a/vitest.integration.config.ts b/vitest.integration.config.ts new file mode 100644 index 0000000..9447886 --- /dev/null +++ b/vitest.integration.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + include: ['tests/integration/**/*.test.ts'], + testTimeout: 120_000, + hookTimeout: 30_000, + clearMocks: true, + restoreMocks: true, + }, +}); diff --git a/workspace/skills/codebase-detection/SKILL.md b/workspace/skills/codebase-detection/SKILL.md index a83aa25..9bb566e 100644 --- a/workspace/skills/codebase-detection/SKILL.md +++ b/workspace/skills/codebase-detection/SKILL.md @@ -28,10 +28,40 @@ Look for references to: ## Greenfield Determination -Set `isGreenfield` to **true** ONLY when the challenge **explicitly** requires -building everything from scratch with **zero provided artifacts**. - -If ANY artifact exists → `isGreenfield = false`. +Set `isGreenfield` to **true** when the challenge requires building the +submission from scratch and provides **no code artifacts to build upon**. + +Set `isGreenfield` to **false** ONLY when the challenge provides actual +code, templates, or starter projects that the submitter must fork, clone, +extend, or modify. + +### What is NOT an existing artifact + +URLs and references in the spec often point to **external resources the +submission must consume or interact with**, not code to build upon: + +- **API endpoints** the submission calls (e.g. `https://api.example.com/v5`) + are external dependencies, NOT starter code. +- **Reference repositories** linked for documentation purposes (e.g. a + GitHub link to an API's source for reading its docs) are NOT artifacts + unless the spec explicitly says to fork, clone, or extend that repo. +- **Third-party services** (GitHub API, Stripe, Twilio, etc.) are + integrations, NOT existing codebase artifacts. +- **Documentation links** (Swagger/OpenAPI docs, README references) are + informational resources, NOT code artifacts. + +### Decision heuristic + +| Spec language | isGreenfield | Reasoning | +| ------------------------------------------------------ | ------------ | -------------------------------------- | +| "build a CLI app that calls https://api.example.com" | `true` | External API to consume, no code given | +| "see https://github.com/org/repo for API docs" | `true` | Reference link, not code to extend | +| "fork https://github.com/org/repo and add features" | `false` | Explicit instruction to extend code | +| "use the provided starter template in the attachment" | `false` | Starter code artifact provided | +| "extend the existing NestJS API in the repository" | `false` | Building on existing code | + +**Key rule:** If no spec language tells the submitter to fork, clone, +extend, or modify a specific codebase, default to `isGreenfield = true`. ## Artifact Classification diff --git a/workspace/skills/jd-content-rewriting/SKILL.md b/workspace/skills/jd-content-rewriting/SKILL.md new file mode 100644 index 0000000..fd783c1 --- /dev/null +++ b/workspace/skills/jd-content-rewriting/SKILL.md @@ -0,0 +1,85 @@ +--- +name: jd-content-rewriting +description: Rewrites raw, vague, or poorly written job description text into clear, professional, and specific language. Use when transforming rough JD content into polished prose while preserving all factual information from the source. +metadata: + author: topcoder + version: '1.0' + concern: jd-content-quality + priority: critical +--- + +# Job Description Content Rewriting + +Transform raw JD text into clear, professional, specific language suitable +for a public Topcoder opportunity posting. + +## Core Rewriting Principles + +1. **Preserve all facts** — Never invent requirements, technologies, + experience levels, or responsibilities not present or clearly implied + in the source material. + +2. **Clarify vagueness** — Rephrase ambiguous statements into specific, + actionable items. + + | Raw (vague) | Rewritten (specific) | + |-----------------------------------|----------------------------------------------------------------| + | "work on backend stuff" | "Design and implement RESTful API endpoints" | + | "know databases" | "Experience with relational databases (e.g. PostgreSQL, MySQL)"| + | "good with frontend" | "Proficiency in modern frontend frameworks (React, Vue, etc.)" | + | "handle the cloud" | "Deploy and manage services on AWS or equivalent cloud platform"| + | "do testing" | "Write and maintain unit and integration tests" | + +3. **Use professional tone** — Formal but approachable. No slang, no + exclamation marks, no emojis, no ALL CAPS emphasis. + +4. **Use inclusive language** — Gender-neutral throughout. Avoid "he/she", + "guys", "manpower". Use "you", "the candidate", "team members". + +5. **Eliminate redundancy** — If the same concept appears multiple times + in the raw text, consolidate into a single clear statement. + +6. **Remove filler** — Strip generic boilerplate not backed by the source + (e.g. "We are a dynamic company..." when no company context is given). + +## Handling Sparse Input + +When the raw JD is extremely short or vague (< 50 words): + +- Structure whatever information is available into the canonical format. +- In the Overview, note that the description is based on limited input. +- Do NOT pad with invented details. +- Infer reasonable responsibilities and requirements only when the role + type is clear (e.g. "React developer" implies frontend responsibilities). + +## Handling Detailed Input + +When the raw JD is long and detailed (> 500 words): + +- Distill to essential points — do not produce a longer output than input. +- Merge duplicate or overlapping items. +- Preserve technical specifics (versions, tools, frameworks) exactly. +- Move "nice to have" items that are mixed into requirements to the + correct section based on signal words (see [signal words reference](references/SIGNAL-WORDS.md)). + +## Action Verb Reference + +Start every responsibility bullet with a strong action verb: + +**Design** | **Implement** | **Develop** | **Build** | **Architect** | +**Integrate** | **Optimize** | **Maintain** | **Review** | **Test** | +**Deploy** | **Configure** | **Monitor** | **Migrate** | **Collaborate** | +**Lead** | **Mentor** | **Document** | **Analyze** | **Troubleshoot** + +Avoid weak verbs: "Handle", "Deal with", "Be responsible for", "Help with". + +## Priority and Requirement Signals + +| Signal Words | Classification | +|---------------------------------------------------------|----------------| +| "must", "required", "mandatory", "essential", "critical"| Requirement | +| "should", "ideally", "preferred", "desired" | Nice to Have | +| "bonus", "nice to have", "optional", "plus", "extra" | Nice to Have | + +When no signal word is present, default to **Requirement** if it sounds +essential for the role, **Nice to Have** if it sounds supplementary. diff --git a/workspace/skills/jd-content-rewriting/references/SIGNAL-WORDS.md b/workspace/skills/jd-content-rewriting/references/SIGNAL-WORDS.md new file mode 100644 index 0000000..c32afa5 --- /dev/null +++ b/workspace/skills/jd-content-rewriting/references/SIGNAL-WORDS.md @@ -0,0 +1,57 @@ +# Signal Words Reference for JD Classification + +## Requirement Signals (Mandatory) + +These words indicate a mandatory qualification or responsibility: + +- **must** — "Must have 3+ years of experience" +- **required** — "Required: Bachelor's degree in CS" +- **mandatory** — "Mandatory experience with Docker" +- **essential** — "Essential skills include TypeScript" +- **critical** — "Critical: understanding of security best practices" +- **need** / **needs** — "We need someone who can..." +- **will be expected** — "You will be expected to deliver..." +- **responsible for** — "Responsible for the full deployment pipeline" +- **minimum** — "Minimum 5 years of relevant experience" + +## Nice to Have Signals (Optional) + +These words indicate a preferred but non-mandatory qualification: + +- **nice to have** — "Nice to have: Kubernetes experience" +- **preferred** — "Preferred: experience with microservices" +- **ideally** — "Ideally, the candidate has worked with GraphQL" +- **bonus** — "Bonus: familiarity with Terraform" +- **plus** — "AWS certification is a plus" +- **optional** — "Optional: experience with CI/CD pipelines" +- **desired** — "Desired: understanding of event-driven architecture" +- **advantage** — "Knowledge of Go would be an advantage" +- **beneficial** — "Experience with mobile development is beneficial" +- **should** (soft) — "Should have some exposure to..." +- **extra credit** — "Extra credit for experience with..." + +## Ambiguous Signals + +These require context to classify correctly: + +- **should** — Can be mandatory or preferred depending on tone. + - "Should have 5+ years" → likely Requirement + - "Should ideally know React" → likely Nice to Have +- **expected** — Usually mandatory unless softened. + - "Expected to write tests" → Requirement + - "Would be expected to occasionally..." → Softer, could be either +- **knowledge of** — Depends on phrasing. + - "Strong knowledge of SQL required" → Requirement + - "Some knowledge of Kubernetes" → Nice to Have + +## Default Classification Rule + +When no signal word is present, classify based on role relevance: + +| Context | Default | +|--------------------------------------------|-----------------| +| Core technical skill for the role | Requirement | +| Domain expertise matching the project | Requirement | +| Adjacent or supplementary skill | Nice to Have | +| Soft skill or methodology | Nice to Have | +| Specific tool version or certification | Nice to Have | diff --git a/workspace/skills/jd-skills-extraction/SKILL.md b/workspace/skills/jd-skills-extraction/SKILL.md new file mode 100644 index 0000000..0aae0c4 --- /dev/null +++ b/workspace/skills/jd-skills-extraction/SKILL.md @@ -0,0 +1,89 @@ +--- +name: jd-skills-extraction +description: Extracts a flat list of technical and soft skill keywords from job descriptions using canonical casing. Use when identifying all skills mentioned or implied by a JD for tagging and matching purposes. +metadata: + author: topcoder + version: '1.0' + concern: skill-keyword-extraction + priority: high +--- + +# JD Skills Extraction + +Extract a flat array of skill keyword strings from the rewritten job +description content. These keywords are used for tagging, search, and +candidate matching on the Topcoder platform. + +## What to Include + +- **Programming languages**: TypeScript, JavaScript, Python, Java, Go, Rust, C#, etc. +- **Frameworks**: React, Angular, Vue, NestJS, Express, Django, Spring Boot, .NET, etc. +- **Libraries & ORMs**: Prisma, Sequelize, Mongoose, Redux, TailwindCSS, etc. +- **Cloud platforms**: AWS, GCP, Azure, Vercel, Heroku, DigitalOcean, etc. +- **Databases**: PostgreSQL, MongoDB, Redis, MySQL, DynamoDB, Elasticsearch, etc. +- **DevOps & tools**: Docker, Kubernetes, Terraform, GitHub Actions, Jenkins, etc. +- **Protocols & standards**: REST, GraphQL, gRPC, WebSocket, OAuth, JWT, OpenAPI, etc. +- **Methodologies**: Agile, Scrum, TDD, CI/CD, Microservices, etc. +- **Soft skills**: Communication, Problem Solving, Team Collaboration, Leadership, etc. + +## Canonical Casing Rules + +Always use the official casing for technology names: + +| Correct | Incorrect | +|---------------|-----------------------------------| +| TypeScript | typescript, Typescript, TS | +| JavaScript | javascript, Javascript, JS | +| PostgreSQL | postgresql, Postgres, postgres | +| NestJS | nestjs, Nest.js, nest | +| Node.js | nodejs, NodeJS, node | +| React | react, ReactJS, React.js | +| Vue | vue, VueJS, Vue.js | +| Angular | angular, AngularJS | +| Docker | docker | +| Kubernetes | kubernetes, K8s | +| OAuth | oauth, Oauth, oAuth | +| GraphQL | graphql, Graphql | +| MongoDB | mongodb, Mongodb, mongo | +| Redis | redis | +| AWS | aws, Aws | +| GCP | gcp | +| Azure | azure | +| REST | rest, Rest | +| CI/CD | cicd, Cicd, ci/cd | +| TailwindCSS | tailwindcss, Tailwind CSS | + +For soft skills, use title case: "Problem Solving", "Team Collaboration". + +## Extraction Heuristics + +### Explicit Skills + +Directly mentioned technologies and qualifications: +- "Experience with React and Node.js" → `["React", "Node.js"]` +- "PostgreSQL database" → `["PostgreSQL"]` + +### Implicit Skills + +Technologies implied but not named directly: +- "REST API development" → `["REST"]` (and the language/framework if stated) +- "containerized deployment" → `["Docker"]` (unless another container tool is specified) +- "cloud infrastructure" → extract the specific platform if mentioned, otherwise omit +- "version control" → `["Git"]` +- "CI/CD pipeline" → `["CI/CD"]` + +### Compound Terms + +Split combined technologies into separate entries: +- "React/Redux" → `["React", "Redux"]` +- "Node.js with Express" → `["Node.js", "Express"]` +- "AWS (S3, Lambda, DynamoDB)" → `["AWS", "Amazon S3", "AWS Lambda", "DynamoDB"]` + +## Output Rules + +- Return a flat array of strings. +- 5-15 keywords is ideal. +- No duplicates. +- Order: most relevant to the role first. +- Include both technical and soft skills when present in the source. +- Do NOT invent skills not supported by the source material. diff --git a/workspace/skills/jd-structure-formatting/SKILL.md b/workspace/skills/jd-structure-formatting/SKILL.md new file mode 100644 index 0000000..716b86c --- /dev/null +++ b/workspace/skills/jd-structure-formatting/SKILL.md @@ -0,0 +1,111 @@ +--- +name: jd-structure-formatting +description: Formats job descriptions into a standardized Topcoder opportunity structure with consistent sections, headings, and Markdown formatting. Use when rewriting a raw JD to ensure every output follows the canonical section order and formatting conventions. +metadata: + author: topcoder + version: '1.0' + concern: jd-formatting + priority: critical +--- + +# Job Description Structure & Formatting + +Rewrite every job description into the canonical Topcoder opportunity +format below. The raw input may be unstructured prose, bullet soup, +email fragments, or a mix — normalise it into this exact structure. + +## Canonical Section Order + +Every rewritten JD **MUST** contain these sections in this order: + +1. **Title** +2. **Overview** +3. **Responsibilities** +4. **Requirements** +5. **Nice to Have** +6. **Skills** + +Do NOT add extra sections. Do NOT reorder sections. + +## Section Formatting Rules + +### 1. Title + +- A single line, no Markdown heading prefix in the JSON field. +- Concise and descriptive (≤ 10 words). +- If the raw JD has no title, infer one from the role and domain. +- Use title case (e.g. "Senior Full-Stack Developer — Payments Platform"). + +### 2. Overview + +- 2-4 sentences maximum. +- First sentence: what the project or product is. +- Second sentence: the team, client, or business context. +- Third/fourth sentence: the primary goal of this opportunity. +- Do NOT repeat information that belongs in Responsibilities or Requirements. + +### 3. Responsibilities + +- Bullet list (Markdown `- ` prefix). +- Each bullet starts with an action verb (e.g. "Design", "Implement", + "Collaborate", "Optimize", "Review"). +- Each bullet is one concrete task or deliverable. +- Order: most important first. +- 5-10 bullets is ideal; never exceed 15. + +### 4. Requirements + +- Bullet list. +- Each bullet is a mandatory qualification: skill, experience level, + technology proficiency, certification, or domain expertise. +- Be specific: "3+ years of experience with React" not "frontend experience". +- Order: most critical first. +- 4-8 bullets is ideal; never exceed 12. + +### 5. Nice to Have + +- Bullet list. +- Preferred but non-mandatory qualifications. +- If the raw JD has no optional items, include 2-3 reasonable ones + inferred from the role context — but mark them clearly as preferred. +- 2-5 bullets is ideal. + +### 6. Skills + +- Flat array of keyword strings (not a bullet list in the formatted output). +- Use canonical casing (see jd-skills-extraction skill). +- 5-15 keywords covering both technical and soft skills. +- No duplicates. + +## Markdown Formatting in `formattedDescription` + +The `formattedDescription` field must be valid Markdown: + +``` +## Title + +[overview text] + +## Responsibilities + +- Verb-led bullet +- Verb-led bullet + +## Requirements + +- Specific qualification +- Specific qualification + +## Nice to Have + +- Preferred qualification + +## Skills + +React, Node.js, PostgreSQL, REST APIs, Agile +``` + +- Use `##` for section headings. +- One blank line between sections. +- No trailing whitespace. +- No HTML tags. diff --git a/workspace/skills/submission-guidelines-extraction/SKILL.md b/workspace/skills/submission-guidelines-extraction/SKILL.md index eed5bb6..4e62f14 100644 --- a/workspace/skills/submission-guidelines-extraction/SKILL.md +++ b/workspace/skills/submission-guidelines-extraction/SKILL.md @@ -21,8 +21,8 @@ Write a concise 1-3 sentence overview of what submitters must deliver and how. ### 2. `whatToSubmit` -List every deliverable mentioned in the spec. Each item is a separate array -entry. Common deliverables: +List ONLY deliverables the specification **explicitly asks the submitter to +deliver or include**. Each item is a separate array entry. Common deliverables: - Source code - README with setup instructions @@ -34,6 +34,21 @@ entry. Common deliverables: - Environment configuration template - Database migration scripts +#### What NOT to include + +- Do NOT add deliverables inferred from **evaluation criteria** or **review + rubrics**. If the scorecard mentions "code comments" or "security", that + does not mean "comments" or "security report" are deliverables. +- Do NOT add "test cases" or "unit tests" unless the spec explicitly says + to **submit** them (e.g. "include unit tests in your submission"). + Mentioning testing in the evaluation criteria is NOT the same as requiring + tests as a deliverable. +- Do NOT list "documentation" as a separate item when "README" or + "README.md" is already listed — the README **is** the documentation. +- Do NOT infer deliverables from general best practices. Only extract what + the challenge author explicitly requested. +- When in doubt, **leave it out**. + ### 3. `howToSubmit` How to package the submission: @@ -83,11 +98,33 @@ Where the final artifact lives: ### 7. `isPatchOfExisting` -Set to `true` when the challenge explicitly asks for a patch, diff, or -incremental change to an existing codebase. - -Set to `false` when the full codebase should be submitted or when it is -a greenfield project. +Set to `true` ONLY when ALL of the following are true: +1. The challenge explicitly asks for a patch, diff, or incremental change +2. An existing codebase is provided (repository URL, starter code, etc.) +3. The existing_codebase.isGreenfield is `false` + +Set to `false` when: +- The full codebase should be submitted +- It is a greenfield project (no existing code to patch) +- No concrete repository URL or code artifacts are referenced + +**CRITICAL CONSISTENCY CHECK:** +`isPatchOfExisting` can ONLY be `true` when there is actual code to patch. +If `existing_codebase.isGreenfield` is `true` (no existing codebase), then +`isPatchOfExisting` MUST be `false` — you cannot create a patch against +code that doesn't exist. + +| existing_codebase.isGreenfield | isPatchOfExisting | Valid? | +|-------------------------------|-------------------|--------| +| `true` | `false` | YES | +| `true` | `true` | NO - contradiction! | +| `false` | `false` | YES (full code submission) | +| `false` | `true` | YES (patch of existing) | + +**Common mistake:** Challenge mentions "enhance", "update", or "extend" +existing functionality but does NOT provide an actual repository URL or +starter code. This is still a greenfield project — the submitter must +build everything from scratch. Do NOT set `isPatchOfExisting: true`. ### 8. `eligibilityConditions` @@ -114,3 +151,22 @@ Any remaining submission information that doesn't fit the fields above. | "Deploy to Heroku and provide the URL" | `submissionType: "link_to_deployment"`, `submissionStorage: "cloud_deployment"` | | "Push your code to the provided repository" | `submissionType: "link_to_repository"`, `submissionStorage: "git_repository"` | | No submission section found | Use defaults: `topcoder_upload`, `file_upload` | + +## Common Mistakes to Avoid + +| Spec says… | Wrong whatToSubmit | Why it's wrong | +| ---------------------------------------------------------- | ------------------------ | ------------------------------------------------------------- | +| "submissions must pass SAST scanner" | "Test cases" | SAST is an eligibility condition, not a deliverable | +| "We will evaluate on: documentation" | "Documentation" | Evaluation criteria ≠ submission deliverable | +| "Include a README.md" | "README.md", "Documentation" | Redundant — README is the documentation | +| "Your code should include tests" (in evaluation section) | "Test cases" | Evaluation guidance, not an explicit submission requirement | +| "Security will be reviewed" | "Security report" | Review criteria, not a deliverable | + +## isPatchOfExisting Mistakes to Avoid + +| Spec says… | Wrong isPatchOfExisting | Why it's wrong | +| ---------------------------------------------------------- | ---------------------- | ------------------------------------------------------------- | +| "Enhance the existing processor" (no repo URL provided) | `true` | No actual repo/code to patch — this is greenfield | +| "Update the Lambda to handle X" (describes current system) | `true` | Description of current state ≠ existing codebase to patch | +| "We did a POC challenge previously" | `true` | Past work ≠ code artifact provided for this challenge | +| isGreenfield=true in existing_codebase | `true` | **CONTRADICTION** — cannot patch non-existent code | diff --git a/workspace/skills/tech-stack-extraction/SKILL.md b/workspace/skills/tech-stack-extraction/SKILL.md index 13845a6..1b505b5 100644 --- a/workspace/skills/tech-stack-extraction/SKILL.md +++ b/workspace/skills/tech-stack-extraction/SKILL.md @@ -53,6 +53,31 @@ Sometimes technologies are implied but not named. Look for: - "JWT tokens" → JWT, possibly OAuth - Database connection strings → specific database technology +## What NOT to Include + +The tech stack should only contain technologies the **submitter builds with**. +Do NOT include: + +- **Platform review / CI infrastructure** that the submission is evaluated + against but does not use at build time. Examples: SAST scanners, + vulnerability scanners, code quality gates, review bots. +- **Topcoder platform tooling**: copilot tools, scorecard systems, + challenge submission portals, review workflows. +- **Conditional / optional technologies** unless the spec makes them + mandatory. If the spec says *"if you use AI…"* or *"optionally…"*, + do NOT include those technologies as definite stack items. +- **Generic categories** that aren't specific technologies: + "Security", "Testing", "CI/CD" (unless a specific tool is named). + +### Examples of Incorrect Tech Stack Items + +| Spec says… | Wrong item | Why | +| -------------------------------------------------- | ------------------------ | -------------------------------------- | +| "must pass SAST and vulnerability scanners" | "SAST Scanner" | Platform infra, not submitter tech | +| "AI reviewers are active on the platform" | "AI Reviewer" | Topcoder tooling | +| "If you use AI, implement with Ollama or OpenAI" | "OpenAI API" | Conditional — not required | +| "We will evaluate on documentation quality" | "Documentation" | Not a technology | + ## Output Format Flat array of strings, each a technology name in canonical casing: