diff --git a/backend/src/build-system/__tests__/test-database-schemas.spec.ts b/backend/src/build-system/__tests__/test-database-schemas.spec.ts deleted file mode 100644 index b95108f8..00000000 --- a/backend/src/build-system/__tests__/test-database-schemas.spec.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BuilderContext } from 'src/build-system/context'; -import { DBSchemaHandler } from '../handlers/database/schemas/schemas'; -import { readFileSync } from 'fs'; -import markdownToTxt from 'markdown-to-txt'; - -jest.mock('fs', () => ({ - readFileSync: jest.fn(() => 'mock content'), -})); - -const RUN_INTEGRATION_TESTS = process.env.RUN_INTEGRATION_TESTS === 'true'; - -describe('DBSchemaHandler', () => { - describe('Integration Tests', () => { - (RUN_INTEGRATION_TESTS ? describe : describe.skip)( - 'Schema Generation Tests', - () => { - it('should generate schema for blog system', async () => { - const handler = new DBSchemaHandler(); - const context = new BuilderContext( - { - id: 'test', - name: 'test db schema', - version: '1.0.0', - description: 'test db schema', - steps: [], - }, - 'test-id-schema-1', - ); - - const mdFileContent = readFileSync( - './db-requirement.document.md', - 'utf-8', - ); - const plainText = markdownToTxt(mdFileContent); - const result = await handler.run(context, plainText); - console.log(result); - }, 30000); - }, - ); - }); - - describe('Unit Tests', () => { - it('should initialize correctly', () => { - const handler = new DBSchemaHandler(); - expect(handler).toBeDefined(); - expect(handler.id).toBe('OP:DATABASE:SCHEMAS'); - }); - }); -}); diff --git a/backend/src/build-system/__tests__/test-generate-doc.spec.ts b/backend/src/build-system/__tests__/test-generate-doc.spec.ts index ca84f7da..90cc1b26 100644 --- a/backend/src/build-system/__tests__/test-generate-doc.spec.ts +++ b/backend/src/build-system/__tests__/test-generate-doc.spec.ts @@ -1,22 +1,15 @@ -/* eslint-disable no-console */ -import { BuilderContext } from 'src/build-system/context'; import { BuildSequence } from '../types'; -import * as fs from 'fs'; -import * as path from 'path'; -import { writeToFile } from './utils'; +import { executeBuildSequence } from './utils'; +// TODO: adding integration flag describe('Sequence: PRD -> UXSD -> UXDD -> UXSS', () => { - // Generate a unique folder with a timestamp - const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); - const logFolderPath = `./logs/generate-docs-${timestamp}`; - fs.mkdirSync(logFolderPath, { recursive: true }); - it('should execute the full sequence and log results to individual files', async () => { const sequence: BuildSequence = { - id: 'test-sequence', + id: 'test-backend-sequence', version: '1.0.0', - name: 'Test PRD to UX Sequence', - description: 'Testing PRD to UX sequence execution', + name: 'Spotify-like Music Web', + description: 'Users can play music', + databaseType: 'SQLite', steps: [ { id: 'step-1', @@ -35,7 +28,6 @@ describe('Sequence: PRD -> UXSD -> UXDD -> UXSS', () => { { id: 'op:UX:SMD', name: 'UX Sitemap Document Node', - requires: ['op:PRD'], }, ], }, @@ -46,7 +38,6 @@ describe('Sequence: PRD -> UXSD -> UXDD -> UXSS', () => { { id: 'op:UX:SMS', name: 'UX Sitemap Structure Node', - requires: ['op:UX:SMD'], }, ], }, @@ -57,73 +48,38 @@ describe('Sequence: PRD -> UXSD -> UXDD -> UXSS', () => { { id: 'op:UX:DATAMAP:DOC', name: 'UX Data Map Document node', - requires: ['op:UX:SMD'], }, ], }, { id: 'step-5', - name: 'file structure generation', - nodes: [ - { - id: 'op:FILE:STRUCT', - name: 'file structure generation', - requires: ['op:UX:SMD', 'op:UX:DATAMAP:DOC'], - options: { - projectPart: 'frontend', - }, - }, - ], - }, - { - id: 'step-6', - name: 'File_Arch Document', + name: 'UX SMD LEVEL 2 Page Details', nodes: [ { - id: 'op:FILE:ARCH', - name: 'File_Arch', - requires: [ - 'op:FILE:STRUCT', - //TODO: here use datamap doc rather than datamap struct, we have to change this - 'op:UX:DATAMAP:DOC', - ], + id: 'op:UX:SMS:LEVEL2', + name: 'UX SMD LEVEL 2 Page Details Node', }, ], }, ], }; - const context = new BuilderContext(sequence, 'test'); - - // Set input data for context - context.setGlobalContext('projectName', 'spotify like music web'); - context.setGlobalContext('description', 'user can play music'); - context.setGlobalContext('platform', 'web'); - try { - await context.execute(); - - for (const step of sequence.steps) { - for (const node of step.nodes) { - const resultData = await context.getNodeData(node.id); - console.log(resultData); - if (resultData) { - writeToFile(logFolderPath, node.id, resultData); - } - } - } + const result = await executeBuildSequence( + 'test-generate-all-ux-part', + sequence, + ); console.log( 'Sequence completed successfully. Logs stored in:', - logFolderPath, + result.logFolderPath, ); + + if (!result.success) { + throw result.error; + } } catch (error) { console.error('Error during sequence execution:', error); - fs.writeFileSync( - path.join(logFolderPath, 'error.txt'), - `Error: ${error.message}\n${error.stack}`, - 'utf8', - ); throw error; } }, 600000); diff --git a/backend/src/build-system/__tests__/test.fullstack-gen.spec.ts b/backend/src/build-system/__tests__/test.fullstack-gen.spec.ts index cddc065a..b4ccad45 100644 --- a/backend/src/build-system/__tests__/test.fullstack-gen.spec.ts +++ b/backend/src/build-system/__tests__/test.fullstack-gen.spec.ts @@ -1,19 +1,8 @@ -/* eslint-disable no-console */ -import { BuilderContext } from 'src/build-system/context'; import { BuildSequence } from '../types'; -import * as fs from 'fs'; -import * as path from 'path'; -import { writeToFile } from './utils'; -import { BuildMonitor } from '../monitor'; +import { executeBuildSequence, objectToMarkdown, writeToFile } from './utils'; -describe('Sequence: PRD -> UXSD -> UXSS -> UXDD -> DATABASE_REQ -> DBSchemas -> Frontend_File_struct -> Frontend_File_arch -> BackendCodeGenerator', () => { - // Generate a unique folder with a timestamp - const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); - const logFolderPath = `./logs/Fullstack_code_generator-${timestamp}`; - fs.mkdirSync(logFolderPath, { recursive: true }); - - it('should execute the frontend and backend code generation sequence and log results to individual files', async () => { - // Define the build sequence up to Backend Code Generator +describe('Build Sequence Test', () => { + it('should execute build sequence successfully', async () => { const sequence: BuildSequence = { id: 'test-backend-sequence', version: '1.0.0', @@ -28,7 +17,7 @@ describe('Sequence: PRD -> UXSD -> UXSS -> UXDD -> DATABASE_REQ -> DBSchemas -> nodes: [ { id: 'op:PROJECT::STATE:SETUP', - name: 'set up project folders', + name: 'Project Folders Setup', }, ], }, @@ -39,7 +28,7 @@ describe('Sequence: PRD -> UXSD -> UXSS -> UXDD -> DATABASE_REQ -> DBSchemas -> nodes: [ { id: 'op:PRD', - name: 'PRD Generation Node', + name: 'Project Requirements Document Node', }, ], }, @@ -67,7 +56,7 @@ describe('Sequence: PRD -> UXSD -> UXSS -> UXDD -> DATABASE_REQ -> DBSchemas -> }, { id: 'op:UX:DATAMAP:DOC', - name: 'UX Data Map Document Node', + name: 'UX DataMap Document Node', requires: ['op:UX:SMD'], }, ], @@ -84,12 +73,17 @@ describe('Sequence: PRD -> UXSD -> UXSS -> UXDD -> DATABASE_REQ -> DBSchemas -> }, { id: 'op:FILE:STRUCT', - name: 'file structure generation', + name: 'File Structure Generation', requires: ['op:UX:SMD', 'op:UX:DATAMAP:DOC'], options: { projectPart: 'frontend', }, }, + { + id: 'op:UX:SMS:LEVEL2', + name: 'Level 2 UX Sitemap Structure Node details', + requires: ['op:UX:SMS'], + }, ], }, { @@ -104,7 +98,7 @@ describe('Sequence: PRD -> UXSD -> UXSS -> UXDD -> DATABASE_REQ -> DBSchemas -> }, { id: 'op:FILE:ARCH', - name: 'File_Arch', + name: 'File Arch', requires: ['op:FILE:STRUCT', 'op:UX:DATAMAP:DOC'], }, { @@ -145,104 +139,10 @@ describe('Sequence: PRD -> UXSD -> UXSS -> UXDD -> DATABASE_REQ -> DBSchemas -> }, ], }; - const context = new BuilderContext(sequence, 'test-env'); - const monitor = BuildMonitor.getInstance(); - - try { - console.time('Total Execution Time'); - - await context.execute(); - - console.timeEnd('Total Execution Time'); - - const monitorReport = monitor.generateTextReport(sequence.id); - fs.writeFileSync( - path.join(logFolderPath, 'execution-metrics.txt'), - monitorReport, - 'utf8', - ); - - const sequenceMetrics = monitor.getSequenceMetrics(sequence.id); - if (sequenceMetrics) { - const metricsJson = { - totalDuration: `${sequenceMetrics.duration}ms`, - successRate: `${sequenceMetrics.successRate.toFixed(2)}%`, - totalSteps: sequenceMetrics.totalSteps, - completedSteps: sequenceMetrics.completedSteps, - failedSteps: sequenceMetrics.failedSteps, - totalNodes: sequenceMetrics.totalNodes, - startTime: new Date(sequenceMetrics.startTime).toISOString(), - endTime: new Date(sequenceMetrics.endTime).toISOString(), - }; - - fs.writeFileSync( - path.join(logFolderPath, 'metrics.json'), - JSON.stringify(metricsJson, null, 2), - 'utf8', - ); - - console.log('\nSequence Metrics:'); - console.table(metricsJson); - } - - for (const step of sequence.steps) { - const stepMetrics = sequenceMetrics?.stepMetrics.get(step.id); - for (const node of step.nodes) { - const resultData = await context.getNodeData(node.id); - const nodeMetrics = stepMetrics?.nodeMetrics.get(node.id); - if (resultData) { - writeToFile(logFolderPath, `${node.name}`, resultData); - } else { - console.error( - ` Error: Handler ${node.name} failed to produce result data`, - ); - writeToFile(logFolderPath, `${node.name}-error`, { - error: 'No result data', - metrics: nodeMetrics, - }); - } - } - } - - const summary = { - timestamp: new Date().toISOString(), - sequenceId: sequence.id, - sequenceName: sequence.name, - totalExecutionTime: `${sequenceMetrics?.duration}ms`, - successRate: `${sequenceMetrics?.successRate.toFixed(2)}%`, - nodesExecuted: sequenceMetrics?.totalNodes, - completedNodes: sequenceMetrics?.stepMetrics.size, - logFolder: logFolderPath, - }; - - fs.writeFileSync( - path.join(logFolderPath, 'execution-summary.json'), - JSON.stringify(summary, null, 2), - 'utf8', - ); - } catch (error) { - const errorReport = { - error: { - message: error.message, - stack: error.stack, - }, - metrics: monitor.getSequenceMetrics(sequence.id), - timestamp: new Date().toISOString(), - }; - - fs.writeFileSync( - path.join(logFolderPath, 'error-with-metrics.json'), - JSON.stringify(errorReport, null, 2), - 'utf8', - ); - console.error('\nError during sequence execution:'); - console.error(error); - console.error( - '\nError report saved to:', - path.join(logFolderPath, 'error-with-metrics.json'), - ); - throw new Error('Sequence execution failed.'); - } - }, 300000); // Timeout set to 10 minutes + const result = await executeBuildSequence('fullstack-code-gen', sequence); + expect(result.success).toBe(true); + expect(result.metrics).toBeDefined(); + console.log(`Logs saved to: ${result.logFolderPath}`); + }, 300000); }); diff --git a/backend/src/build-system/__tests__/test.model-provider.spec.ts b/backend/src/build-system/__tests__/test.model-provider.spec.ts index f66df109..66314492 100644 --- a/backend/src/build-system/__tests__/test.model-provider.spec.ts +++ b/backend/src/build-system/__tests__/test.model-provider.spec.ts @@ -1,9 +1,12 @@ -import { EmbeddingProvider } from "src/common/embedding-provider"; +import { EmbeddingProvider } from 'src/common/embedding-provider'; describe('Model Provider Test', () => { - let embProvider = EmbeddingProvider.getInstance(); - it('should generate a response from the model provider', async () => { - let res = await embProvider.generateEmbResponse("Your text string goes here", "text-embedding-3-small"); - console.log(res); - }); -}); \ No newline at end of file + const embProvider = EmbeddingProvider.getInstance(); + it('should generate a response from the model provider', async () => { + const res = await embProvider.generateEmbResponse( + 'Your text string goes here', + 'text-embedding-3-small', + ); + console.log(res); + }); +}); diff --git a/backend/src/build-system/__tests__/utils.ts b/backend/src/build-system/__tests__/utils.ts index b1b4b2d3..3702d525 100644 --- a/backend/src/build-system/__tests__/utils.ts +++ b/backend/src/build-system/__tests__/utils.ts @@ -1,6 +1,9 @@ import { Logger } from '@nestjs/common'; import * as fs from 'fs'; import * as path from 'path'; +import { BuildSequence } from '../types'; +import { BuilderContext } from '../context'; +import { BuildMonitor } from '../monitor'; /** * Utility function to write content to a file in a clean, formatted manner. * @param handlerName - The name of the handler. @@ -47,3 +50,169 @@ export const formatContent = (data: string | object): string => { return String(data); } }; + +export function objectToMarkdown(obj: any, depth = 1): string { + if (!obj || typeof obj !== 'object') { + return String(obj); + } + + let markdown = ''; + const prefix = '#'.repeat(depth); + + for (const [key, value] of Object.entries(obj)) { + if (value === null || value === undefined) { + continue; + } + + markdown += `${prefix} ${key}\n`; + if (typeof value === 'object' && !Array.isArray(value)) { + markdown += objectToMarkdown(value, depth + 1); + } else if (Array.isArray(value)) { + markdown += + value + .map((item) => { + if (typeof item === 'object') { + return objectToMarkdown(item, depth + 1); + } + return String(item); + }) + .join('\n') + '\n'; + } else { + markdown += `${value}\n`; + } + markdown += '\n'; + } + + return markdown; +} + +interface TestResult { + success: boolean; + logFolderPath: string; + error?: Error; + metrics?: any; +} + +export async function executeBuildSequence( + name: string, + sequence: BuildSequence, +): Promise { + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const logFolderPath = `./logs/${name.toLocaleLowerCase().replaceAll(' ', '-')}-${timestamp}`; + fs.mkdirSync(logFolderPath, { recursive: true }); + + const context = new BuilderContext(sequence, 'test-env'); + const monitor = BuildMonitor.getInstance(); + + try { + console.time('Total Execution Time'); + await context.execute(); + console.timeEnd('Total Execution Time'); + + const monitorReport = monitor.generateTextReport(sequence.id); + fs.writeFileSync( + path.join(logFolderPath, 'execution-metrics.txt'), + monitorReport, + 'utf8', + ); + + const sequenceMetrics = monitor.getSequenceMetrics(sequence.id); + if (sequenceMetrics) { + const metricsJson = { + totalDuration: `${sequenceMetrics.duration}ms`, + successRate: `${sequenceMetrics.successRate.toFixed(2)}%`, + totalSteps: sequenceMetrics.totalSteps, + completedSteps: sequenceMetrics.completedSteps, + failedSteps: sequenceMetrics.failedSteps, + totalNodes: sequenceMetrics.totalNodes, + startTime: new Date(sequenceMetrics.startTime).toISOString(), + endTime: new Date(sequenceMetrics.endTime).toISOString(), + }; + + fs.writeFileSync( + path.join(logFolderPath, 'metrics.json'), + JSON.stringify(metricsJson, null, 2), + 'utf8', + ); + + console.log('\nSequence Metrics:'); + console.table(metricsJson); + } + + for (const step of sequence.steps) { + const stepMetrics = sequenceMetrics?.stepMetrics.get(step.id); + for (const node of step.nodes) { + const resultData = await context.getNodeData(node.id); + const nodeMetrics = stepMetrics?.nodeMetrics.get(node.id); + + if (resultData) { + const content = + typeof resultData === 'object' + ? objectToMarkdown(resultData) + : resultData; + writeToFile(logFolderPath, `${node.name}`, content); + } else { + console.error( + `Error: Handler ${node.name} failed to produce result data`, + ); + writeToFile( + logFolderPath, + `${node.name}-error`, + objectToMarkdown({ + error: 'No result data', + metrics: nodeMetrics, + }), + ); + } + } + } + + const summary = { + timestamp: new Date().toISOString(), + sequenceId: sequence.id, + sequenceName: sequence.name, + totalExecutionTime: `${sequenceMetrics?.duration}ms`, + successRate: `${sequenceMetrics?.successRate.toFixed(2)}%`, + nodesExecuted: sequenceMetrics?.totalNodes, + completedNodes: sequenceMetrics?.stepMetrics.size, + logFolder: logFolderPath, + }; + + fs.writeFileSync( + path.join(logFolderPath, 'execution-summary.json'), + JSON.stringify(summary, null, 2), + 'utf8', + ); + + return { + success: true, + logFolderPath, + metrics: sequenceMetrics, + }; + } catch (error) { + const errorReport = { + error: { + message: error.message, + stack: error.stack, + }, + metrics: monitor.getSequenceMetrics(sequence.id), + timestamp: new Date().toISOString(), + }; + + fs.writeFileSync( + path.join(logFolderPath, 'error-with-metrics.json'), + JSON.stringify(errorReport, null, 2), + 'utf8', + ); + + console.error('\nError during sequence execution:'); + console.error(error); + + return { + success: false, + logFolderPath, + error: error as Error, + metrics: monitor.getSequenceMetrics(sequence.id), + }; + } +} diff --git a/backend/src/build-system/handlers/backend/code-generate/index.ts b/backend/src/build-system/handlers/backend/code-generate/index.ts index 58a6af9d..16dec841 100644 --- a/backend/src/build-system/handlers/backend/code-generate/index.ts +++ b/backend/src/build-system/handlers/backend/code-generate/index.ts @@ -2,12 +2,13 @@ import { BuildHandler, BuildResult } from 'src/build-system/types'; import { BuilderContext } from 'src/build-system/context'; import { generateBackendCodePrompt } from './prompt'; import { Logger } from '@nestjs/common'; +import { saveGeneratedCode } from 'src/build-system/utils/files'; +import * as path from 'path'; import { + formatResponse, parseGenerateTag, removeCodeBlockFences, -} from 'src/build-system/utils/database-utils'; -import { saveGeneratedCode } from 'src/build-system/utils/files'; -import * as path from 'path'; +} from 'src/build-system/utils/strings'; /** * BackendCodeHandler is responsible for generating the backend codebase @@ -62,16 +63,12 @@ export class BackendCodeHandler implements BuildHandler { try { // Invoke the language model to generate the backend code - const modelResponse = await context.model.chatSync( - { - content: backendCodePrompt, - }, - 'gpt-4o-mini', // Specify the model variant as needed - ); + const modelResponse = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: backendCodePrompt, role: 'system' }], + }); - const generatedCode = removeCodeBlockFences( - parseGenerateTag(modelResponse), - ); + const generatedCode = formatResponse(modelResponse); const uuid = context.getGlobalContext('projectUUID'); saveGeneratedCode(path.join(uuid, 'backend', currentFile), generatedCode); diff --git a/backend/src/build-system/handlers/backend/file-review/file-review.ts b/backend/src/build-system/handlers/backend/file-review/file-review.ts index 974a9ba2..609b0577 100644 --- a/backend/src/build-system/handlers/backend/file-review/file-review.ts +++ b/backend/src/build-system/handlers/backend/file-review/file-review.ts @@ -3,11 +3,9 @@ import { BuilderContext } from 'src/build-system/context'; import { Logger } from '@nestjs/common'; import * as fs from 'fs/promises'; import * as path from 'path'; -import { - parseGenerateTag, - removeCodeBlockFences, -} from 'src/build-system/utils/database-utils'; + import { prompts } from './prompt'; +import { formatResponse } from 'src/build-system/utils/strings'; // TODO(Sma1lboy): we need a better way to handle handler pre requirements /** @@ -50,10 +48,10 @@ export class BackendFileReviewHandler implements BuildHandler { backendCode, ); - const modelResponse = await context.model.chatSync( - { content: filePrompt }, - 'gpt-4o-mini', - ); + const modelResponse = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: filePrompt, role: 'system' }], + }); const filesToModify = this.parseFileIdentificationResponse(modelResponse); this.logger.log(`Files to modify: ${filesToModify.join(', ')}`); @@ -75,13 +73,13 @@ export class BackendFileReviewHandler implements BuildHandler { ); // Get modified content - const response = await context.model.chatSync( - { content: modificationPrompt }, - 'gpt-4o-mini', - ); + const response = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: modificationPrompt, role: 'system' }], + }); // Extract new content and write back - const newContent = removeCodeBlockFences(parseGenerateTag(response)); + const newContent = formatResponse(response); await fs.writeFile(filePath, newContent, 'utf-8'); this.logger.log(`Successfully modified ${fileName}`); @@ -105,9 +103,7 @@ export class BackendFileReviewHandler implements BuildHandler { } parseFileIdentificationResponse(response: string): string[] { - const parsedResponse = JSON.parse( - removeCodeBlockFences(parseGenerateTag(response)), - ); + const parsedResponse = JSON.parse(formatResponse(response)); this.logger.log('Parsed file identification response:', parsedResponse); return parsedResponse; } diff --git a/backend/src/build-system/handlers/backend/requirements-document/index.ts b/backend/src/build-system/handlers/backend/requirements-document/index.ts index 54387c21..c5eb486a 100644 --- a/backend/src/build-system/handlers/backend/requirements-document/index.ts +++ b/backend/src/build-system/handlers/backend/requirements-document/index.ts @@ -5,6 +5,7 @@ import { generateBackendOverviewPrompt, } from './prompt'; import { Logger } from '@nestjs/common'; +import { removeCodeBlockFences } from 'src/build-system/utils/strings'; type BackendRequirementResult = { overview: string; @@ -31,7 +32,6 @@ export class BackendRequirementHandler ): Promise> { this.logger.log('Generating Backend Requirements Document...'); - // Retrieve backend configuration from context const language = context.getGlobalContext('language') || 'javascript'; const framework = context.getGlobalContext('framework') || 'express'; const packages = context.getGlobalContext('packages') || {}; @@ -54,12 +54,10 @@ export class BackendRequirementHandler let backendOverview: string; try { - backendOverview = await context.model.chatSync( - { - content: overviewPrompt, - }, - 'gpt-4o-mini', - ); + backendOverview = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: overviewPrompt, role: 'system' }], + }); } catch (error) { this.logger.error('Error generating backend overview:', error); return { @@ -98,7 +96,7 @@ export class BackendRequirementHandler return { success: true, data: { - overview: backendOverview, + overview: removeCodeBlockFences(backendOverview), // TODO: consider remove implementation implementation: '', config: { diff --git a/backend/src/build-system/handlers/database/requirements-document/index.ts b/backend/src/build-system/handlers/database/requirements-document/index.ts index 7cac15e2..4cb0dff8 100644 --- a/backend/src/build-system/handlers/database/requirements-document/index.ts +++ b/backend/src/build-system/handlers/database/requirements-document/index.ts @@ -3,6 +3,7 @@ import { BuilderContext } from 'src/build-system/context'; import { ModelProvider } from 'src/common/model-provider'; import { prompts } from './prompt'; import { Logger } from '@nestjs/common'; +import { removeCodeBlockFences } from 'src/build-system/utils/strings'; export class DatabaseRequirementHandler implements BuildHandler { readonly id = 'op:DATABASE_REQ'; @@ -19,15 +20,13 @@ export class DatabaseRequirementHandler implements BuildHandler { datamapDoc, ); const model = ModelProvider.getInstance(); - const dbRequirementsContent = await model.chatSync( - { - content: prompt, - }, - 'gpt-4o-mini', - ); + const dbRequirementsContent = await model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: prompt, role: 'system' }], + }); return { success: true, - data: dbRequirementsContent, + data: removeCodeBlockFences(dbRequirementsContent), }; } } diff --git a/backend/src/build-system/handlers/database/schemas/schemas.ts b/backend/src/build-system/handlers/database/schemas/schemas.ts index 2c551850..9acd6781 100644 --- a/backend/src/build-system/handlers/database/schemas/schemas.ts +++ b/backend/src/build-system/handlers/database/schemas/schemas.ts @@ -6,12 +6,12 @@ import { getSchemaFileExtension, getSupportedDatabaseTypes, isSupportedDatabaseType, - parseGenerateTag, } from '../../../utils/database-utils'; import { writeFile } from 'fs-extra'; import { prompts } from './prompt'; import { saveGeneratedCode } from 'src/build-system/utils/files'; import * as path from 'path'; +import { formatResponse } from 'src/build-system/utils/strings'; /** * DBSchemaHandler is responsible for generating database schemas based on provided requirements. @@ -70,10 +70,10 @@ export class DBSchemaHandler implements BuildHandler { let dbAnalysis: string; try { - const analysisResponse = await context.model.chatSync( - { content: analysisPrompt }, - 'gpt-4o-mini', - ); + const analysisResponse = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: analysisPrompt, role: 'system' }], + }); dbAnalysis = analysisResponse; } catch (error) { this.logger.error('Error during database requirements analysis:', error); @@ -103,11 +103,11 @@ export class DBSchemaHandler implements BuildHandler { let schemaContent: string; try { - const schemaResponse = await context.model.chatSync( - { content: schemaPrompt }, - 'gpt-4o-mini', - ); - schemaContent = parseGenerateTag(schemaResponse); + const schemaResponse = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: schemaPrompt, role: 'system' }], + }); + schemaContent = formatResponse(schemaResponse); } catch (error) { this.logger.error('Error during schema generation:', error); return { @@ -126,11 +126,11 @@ export class DBSchemaHandler implements BuildHandler { let validationResponse: string; try { - const validationResult = await context.model.chatSync( - { content: validationPrompt }, - 'gpt-4o-mini', - ); - validationResponse = parseGenerateTag(validationResult); + const validationResult = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: validationPrompt, role: 'system' }], + }); + validationResponse = formatResponse(validationResult); } catch (error) { this.logger.error('Error during schema validation:', error); return { diff --git a/backend/src/build-system/handlers/file-manager/file-arch/index.ts b/backend/src/build-system/handlers/file-manager/file-arch/index.ts index a3deb09d..1b82c76a 100644 --- a/backend/src/build-system/handlers/file-manager/file-arch/index.ts +++ b/backend/src/build-system/handlers/file-manager/file-arch/index.ts @@ -2,7 +2,11 @@ import { BuildHandler, BuildResult } from 'src/build-system/types'; import { BuilderContext } from 'src/build-system/context'; import { generateFileArchPrompt } from './prompt'; import { Logger } from '@nestjs/common'; -import { extractJsonFromMarkdown } from 'src/build-system/utils/strings'; +import { + extractJsonFromText, + formatResponse, + parseGenerateTag, +} from 'src/build-system/utils/strings'; export class FileArchGenerateHandler implements BuildHandler { readonly id = 'op:FILE:ARCH'; @@ -27,7 +31,7 @@ export class FileArchGenerateHandler implements BuildHandler { } const prompt = generateFileArchPrompt( - JSON.stringify(fileStructure, null, 2), + JSON.stringify(fileStructure.jsonFileStructure, null, 2), JSON.stringify(datamapDoc, null, 2), ); @@ -38,6 +42,7 @@ export class FileArchGenerateHandler implements BuildHandler { let retry = 0; const retryChances = 2; + // TODO: not ideal, should implement a better global retry mechanism while (!successBuild) { if (retry > retryChances) { this.logger.error( @@ -51,18 +56,17 @@ export class FileArchGenerateHandler implements BuildHandler { }; } try { - fileArchContent = await context.model.chatSync( - { - content: prompt, - }, - 'gpt-4o-mini', - ); + fileArchContent = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: prompt, role: 'system' }], + }); + + const tagContent = parseGenerateTag(fileArchContent); + jsonData = extractJsonFromText(tagContent); - // validation test - jsonData = extractJsonFromMarkdown(fileArchContent); if (jsonData == null) { retry += 1; - this.logger.error('Extract Json From Markdown fail'); + this.logger.error('Extract Json From Text fail'); continue; } @@ -86,7 +90,7 @@ export class FileArchGenerateHandler implements BuildHandler { this.logger.log('File architecture document generated successfully'); return { success: true, - data: fileArchContent, + data: formatResponse(fileArchContent), }; } diff --git a/backend/src/build-system/handlers/file-manager/file-arch/prompt.ts b/backend/src/build-system/handlers/file-manager/file-arch/prompt.ts index 3dee8a70..e985fe90 100644 --- a/backend/src/build-system/handlers/file-manager/file-arch/prompt.ts +++ b/backend/src/build-system/handlers/file-manager/file-arch/prompt.ts @@ -2,7 +2,7 @@ export const generateFileArchPrompt = ( fileStructure: string, datamapDoc: string, ): string => { - return `You are a File Architecture Analyzer. Your task is to analyze the given project directory structure and the detailed page-by-page analysis, then output a JSON object detailing the file dependencies. The output JSON must be wrapped in tags. + return `You are a File Architecture Analyzer. Your task is to analyze the given project directory structure and the detailed page-by-page analysis, then output a JSON object detailing the file dependencies. The output JSON must be wrapped in tags. ### Directory Structure Input The following is the project's directory structure. Use this to identify files and folders. @@ -49,7 +49,7 @@ ${datamapDoc} } } \`\`\` - - Wrap the JSON output with \`\` tags. + - Wrap the JSON output with \`\` tags. ### Notes - **CSS Dependencies**: Any file that relies on a CSS/SCSS module file (e.g., \`Header.module.css\`) must list it in the \`dependsOn\` array. @@ -58,8 +58,8 @@ ${datamapDoc} - The \`dependsOn\` field should reflect logical dependencies inferred from both the directory structure and the page-by-page analysis. - Use common project patterns to deduce dependencies (e.g., pages depend on components, contexts, hooks, and styles). - Include all files in the output, even if they have no dependencies. -- Ensure the JSON output is properly formatted and wrapped with \`\` tags. +- Ensure the JSON output is properly formatted and wrapped with \`\` tags. ### Output -Return only the JSON object wrapped in \`\` tags.`; +Return only the JSON object wrapped in \`\` tags.`; }; diff --git a/backend/src/build-system/handlers/file-manager/file-structure/index.ts b/backend/src/build-system/handlers/file-manager/file-structure/index.ts index c92d87a8..d9989cda 100644 --- a/backend/src/build-system/handlers/file-manager/file-structure/index.ts +++ b/backend/src/build-system/handlers/file-manager/file-structure/index.ts @@ -1,13 +1,19 @@ -import { BuildHandler, BuildOpts, BuildResult } from 'src/build-system/types'; +import { + BuildHandler, + BuildOpts, + BuildResult, + FileStructOutput, +} from 'src/build-system/types'; import { BuilderContext } from 'src/build-system/context'; import { prompts } from './prompt'; import { Logger } from '@nestjs/common'; +import { removeCodeBlockFences } from 'src/build-system/utils/strings'; /** * FileStructureHandler is responsible for generating the project's file and folder structure * based on the provided documentation. */ -export class FileStructureHandler implements BuildHandler { +export class FileStructureHandler implements BuildHandler { readonly id = 'op:FILE:STRUCT'; private readonly logger: Logger = new Logger('FileStructureHandler'); @@ -20,7 +26,7 @@ export class FileStructureHandler implements BuildHandler { async run( context: BuilderContext, opts?: BuildOpts, - ): Promise> { + ): Promise> { this.logger.log('Generating File Structure Document...'); // Retrieve projectName from context @@ -78,12 +84,10 @@ export class FileStructureHandler implements BuildHandler { let fileStructureContent: string; try { // Invoke the language model to generate the file structure content - fileStructureContent = await context.model.chatSync( - { - content: prompt, - }, - 'gpt-4o-mini', // Specify the model variant as needed - ); + fileStructureContent = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: prompt, role: 'system' }], + }); } catch (error) { this.logger.error('Error during file structure generation:', error); return { @@ -118,12 +122,10 @@ export class FileStructureHandler implements BuildHandler { try { // Invoke the language model to convert tree structure to JSON - fileStructureJsonContent = await context.model.chatSync( - { - content: convertToJsonPrompt, - }, - 'gpt-4o-mini', // Specify the model variant as needed - ); + fileStructureJsonContent = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: convertToJsonPrompt, role: 'system' }], + }); } catch (error) { this.logger.error('Error during tree to JSON conversion:', error); return { @@ -156,7 +158,10 @@ export class FileStructureHandler implements BuildHandler { return { success: true, - data: fileStructureJsonContent, + data: { + fileStructure: removeCodeBlockFences(fileStructureContent), + jsonFileStructure: removeCodeBlockFences(fileStructureJsonContent), + }, }; } } diff --git a/backend/src/build-system/handlers/product-manager/product-requirements-document/prd.ts b/backend/src/build-system/handlers/product-manager/product-requirements-document/prd.ts index baf10905..13018707 100644 --- a/backend/src/build-system/handlers/product-manager/product-requirements-document/prd.ts +++ b/backend/src/build-system/handlers/product-manager/product-requirements-document/prd.ts @@ -3,6 +3,7 @@ import { BuilderContext } from 'src/build-system/context'; import { prompts } from './prompt'; import { ModelProvider } from 'src/common/model-provider'; import { Logger } from '@nestjs/common'; +import { removeCodeBlockFences } from 'src/build-system/utils/strings'; export class PRDHandler implements BuildHandler { readonly id = 'op:PRD'; @@ -29,14 +30,16 @@ export class PRDHandler implements BuildHandler { return { success: true, - data: prdContent, + data: removeCodeBlockFences(prdContent), }; } private async generatePRDFromLLM(prompt: string): Promise { const modelProvider = ModelProvider.getInstance(); - const model = 'gpt-4o-mini'; - const prdContent = await modelProvider.chatSync({ content: prompt }, model); + const prdContent = await modelProvider.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: prompt, role: 'system' }], + }); this.logger.log('Received full PRD content from LLM server.'); return prdContent; } diff --git a/backend/src/build-system/handlers/ux/datamap/index.ts b/backend/src/build-system/handlers/ux/datamap/index.ts index 833628a6..4983968a 100644 --- a/backend/src/build-system/handlers/ux/datamap/index.ts +++ b/backend/src/build-system/handlers/ux/datamap/index.ts @@ -3,6 +3,7 @@ import { BuilderContext } from 'src/build-system/context'; import { ModelProvider } from 'src/common/model-provider'; import { prompts } from './prompt'; import { Logger } from '@nestjs/common'; +import { removeCodeBlockFences } from 'src/build-system/utils/strings'; /** * Handler for generating the UX Data Map document. @@ -22,17 +23,15 @@ export class UXDatamapHandler implements BuildHandler { 'web', // TODO: change platform dynamically if needed ); - const uxDatamapContent = await context.model.chatSync( - { - content: prompt, - }, - 'gpt-4o-mini', - ); + const uxDatamapContent = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: prompt, role: 'system' }], + }); Logger.log('UX Data Map Content: ', uxDatamapContent); return { success: true, - data: uxDatamapContent, + data: removeCodeBlockFences(uxDatamapContent), }; } } diff --git a/backend/src/build-system/handlers/ux/sitemap-document/uxsmd.ts b/backend/src/build-system/handlers/ux/sitemap-document/uxsmd.ts index 6fd8ac55..b2fc062f 100644 --- a/backend/src/build-system/handlers/ux/sitemap-document/uxsmd.ts +++ b/backend/src/build-system/handlers/ux/sitemap-document/uxsmd.ts @@ -3,6 +3,7 @@ import { BuilderContext } from 'src/build-system/context'; import { prompts } from './prompt'; import { ModelProvider } from 'src/common/model-provider'; import { Logger } from '@nestjs/common'; +import { removeCodeBlockFences } from 'src/build-system/utils/strings'; export class UXSMDHandler implements BuildHandler { readonly id = 'op:UX:SMD'; @@ -33,7 +34,7 @@ export class UXSMDHandler implements BuildHandler { // Return the generated document return { success: true, - data: uxsmdContent, + data: removeCodeBlockFences(uxsmdContent), }; } @@ -41,12 +42,10 @@ export class UXSMDHandler implements BuildHandler { const modelProvider = ModelProvider.getInstance(); const model = 'gpt-4o-mini'; - const uxsmdContent = await modelProvider.chatSync( - { - content: prompt, - }, + const uxsmdContent = await modelProvider.chatSync({ model, - ); + messages: [{ content: prompt, role: 'system' }], + }); this.logger.log('Received full UXSMD content from LLM server.'); return uxsmdContent; diff --git a/backend/src/build-system/handlers/ux/sitemap-structure/index.ts b/backend/src/build-system/handlers/ux/sitemap-structure/index.ts index 455cf486..4d080990 100644 --- a/backend/src/build-system/handlers/ux/sitemap-structure/index.ts +++ b/backend/src/build-system/handlers/ux/sitemap-structure/index.ts @@ -3,6 +3,7 @@ import { BuilderContext } from 'src/build-system/context'; import { ModelProvider } from 'src/common/model-provider'; import { prompts } from './prompt'; import { Logger } from '@nestjs/common'; +import { removeCodeBlockFences } from 'src/build-system/utils/strings'; // UXSMS: UX Sitemap Structure export class UXSitemapStructureHandler implements BuildHandler { @@ -30,105 +31,14 @@ export class UXSitemapStructureHandler implements BuildHandler { 'web', // TODO: Change platform dynamically if necessary ); - const uxStructureContent = await context.model.chatSync( - { - content: prompt, - }, - 'gpt-4o-mini', - ); + const uxStructureContent = await context.model.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: prompt, role: 'system' }], + }); return { success: true, - data: uxStructureContent, + data: removeCodeBlockFences(uxStructureContent), }; } } -export class Level2UXSitemapStructureHandler implements BuildHandler { - readonly id = 'op:UX:SMS:LEVEL2'; - readonly logger = new Logger('Level2UXSitemapStructureHandler'); - - async run(context: BuilderContext): Promise> { - this.logger.log('Generating Level 2 UX Sitemap Structure Document...'); - - const projectName = - context.getGlobalContext('projectName') || 'Default Project Name'; - const sitemapDoc = context.getNodeData('op:UX:SMS'); - const uxStructureDoc = context.getNodeData('op:UX:SMS'); - - if (!projectName || !sitemapDoc || !uxStructureDoc) { - return { - success: false, - data: 'Missing required arguments: projectName, sitemapDoc, or uxStructureDoc.', - }; - } - - // Extract sections from the UX Structure Document - const sections = this.extractAllSections(uxStructureDoc); - - if (sections.length === 0) { - this.logger.error( - 'No valid sections found in the UX Structure Document.', - ); - return { - success: false, - data: 'No valid sections found in the UX Structure Document.', - }; - } - - // Process each section with the refined Level 2 prompt - const modelProvider = ModelProvider.getInstance(); - const refinedSections = []; - - for (const section of sections) { - const prompt = prompts.generateLevel2UXSiteMapStructrePrompt( - projectName, - section.content, - sitemapDoc, - 'web', // TODO: Replace with dynamic platform if necessary - ); - - const refinedContent = await modelProvider.chatSync( - { content: prompt }, - 'gpt-4o-mini', - ); - - refinedSections.push({ - title: section.title, - content: refinedContent, - }); - } - - // Combine the refined sections into the final document - const refinedDocument = refinedSections - .map((section) => `## **${section.title}**\n${section.content}`) - .join('\n\n'); - - this.logger.log(refinedDocument); - - return { - success: true, - data: refinedDocument, - }; - } - - /** - * Extracts all sections from a given text. - * @param text The UX Structure Document content. - * @returns Array of extracted sections with title and content. - */ - private extractAllSections( - text: string, - ): Array<{ title: string; content: string }> { - const regex = /## \*\*(\d+\.\s.*)\*\*([\s\S]*?)(?=\n## \*\*|$)/g; - const sections = []; - let match; - - while ((match = regex.exec(text)) !== null) { - const title = match[1].trim(); - const content = match[2].trim(); - sections.push({ title, content }); - } - - return sections; - } -} diff --git a/backend/src/build-system/handlers/ux/sitemap-structure/sms-page.ts b/backend/src/build-system/handlers/ux/sitemap-structure/sms-page.ts new file mode 100644 index 00000000..28543cd0 --- /dev/null +++ b/backend/src/build-system/handlers/ux/sitemap-structure/sms-page.ts @@ -0,0 +1,96 @@ +import { Logger } from '@nestjs/common'; +import { BuilderContext } from 'src/build-system/context'; +import { BuildHandler, BuildResult } from 'src/build-system/types'; +import { ModelProvider } from 'src/common/model-provider'; +import { prompts } from './prompt'; +import { removeCodeBlockFences } from 'src/build-system/utils/strings'; + +export class Level2UXSitemapStructureHandler implements BuildHandler { + readonly id = 'op:UX:SMS:LEVEL2'; + readonly logger = new Logger('Level2UXSitemapStructureHandler'); + + async run(context: BuilderContext): Promise> { + this.logger.log('Generating Level 2 UX Sitemap Structure Document...'); + + const projectName = + context.getGlobalContext('projectName') || 'Default Project Name'; + const sitemapDoc = context.getNodeData('op:UX:SMS'); + const uxStructureDoc = context.getNodeData('op:UX:SMS'); + + if (!projectName || !sitemapDoc || !uxStructureDoc) { + return { + success: false, + data: 'Missing required arguments: projectName, sitemapDoc, or uxStructureDoc.', + }; + } + + // Extract sections from the UX Structure Document + const sections = this.extractAllSections(uxStructureDoc); + + if (sections.length === 0) { + this.logger.error( + 'No valid sections found in the UX Structure Document.', + ); + return { + success: false, + data: 'No valid sections found in the UX Structure Document.', + }; + } + + // Process each section with the refined Level 2 prompt + const modelProvider = ModelProvider.getInstance(); + const refinedSections = []; + + for (const section of sections) { + const prompt = prompts.generateLevel2UXSiteMapStructrePrompt( + projectName, + section.content, + sitemapDoc, + 'web', // TODO: Replace with dynamic platform if necessary + ); + + const refinedContent = await modelProvider.chatSync({ + model: 'gpt-4o-mini', + messages: [{ content: prompt, role: 'system' }], + }); + + refinedSections.push({ + title: section.title, + content: refinedContent, + }); + } + + // Combine the refined sections into the final document + const refinedDocument = refinedSections + .map((section) => `## **${section.title}**\n${section.content}`) + .join('\n\n'); + + this.logger.log(refinedDocument); + + return { + success: true, + data: removeCodeBlockFences(refinedDocument), + }; + } + + /** + * Extracts all sections from a given text. + * @param text The UX Structure Document content. + * @returns Array of extracted sections with title and content. + */ + private extractAllSections( + text: string, + ): Array<{ title: string; content: string }> { + const regex = /## \*\*(\d+\.\s.*)\*\*([\s\S]*?)(?=\n## \*\*|$)/g; + const sections = []; + let match; + + while ((match = regex.exec(text)) !== null) { + const title = match[1].trim(); + const content = match[2].trim(); + sections.push({ title, content }); + } + + return sections; + } +} diff --git a/backend/src/build-system/hanlder-manager.ts b/backend/src/build-system/hanlder-manager.ts index f41927d6..8434956e 100644 --- a/backend/src/build-system/hanlder-manager.ts +++ b/backend/src/build-system/hanlder-manager.ts @@ -12,6 +12,7 @@ import { DatabaseRequirementHandler } from './handlers/database/requirements-doc import { FileGeneratorHandler } from './handlers/file-manager/file-generate'; import { BackendRequirementHandler } from './handlers/backend/requirements-document'; import { BackendFileReviewHandler } from './handlers/backend/file-review/file-review'; +import { Level2UXSitemapStructureHandler } from './handlers/ux/sitemap-structure/sms-page'; /** * Manages the registration and retrieval of build handlers in the system @@ -35,6 +36,7 @@ export class BuildHandlerManager { new ProjectInitHandler(), new PRDHandler(), new UXSitemapStructureHandler(), + new Level2UXSitemapStructureHandler(), new UXDatamapHandler(), new UXSMDHandler(), new FileStructureHandler(), diff --git a/backend/src/build-system/types.ts b/backend/src/build-system/types.ts index 45f9882d..ae1066c5 100644 --- a/backend/src/build-system/types.ts +++ b/backend/src/build-system/types.ts @@ -74,6 +74,19 @@ export interface BuildHandler { run(context: BuilderContext, opts?: BuildOpts): Promise>; } +export interface FileStructOutput { + /** + * Tree File Structure: + * src: + * - components: + */ + fileStructure: string; + /** + * Example JSON file structure: + * + */ + jsonFileStructure: string; +} export interface NodeOutputMap { 'op:DATABASE_REQ': string; 'op:PRD': string; @@ -81,7 +94,7 @@ export interface NodeOutputMap { 'op:UX:SMS': string; 'op:UX:SMS:LEVEL2': string; 'op:UX:DATAMAP:DOC': string; - 'op:FILE:STRUCT': string; + 'op:FILE:STRUCT': FileStructOutput; 'op:FILE:ARCH': string; 'op:FILE:GENERATE': string; 'op:BACKEND:CODE': string; diff --git a/backend/src/build-system/utils/database-utils.ts b/backend/src/build-system/utils/database-utils.ts index e9bdd589..c6c2c70b 100644 --- a/backend/src/build-system/utils/database-utils.ts +++ b/backend/src/build-system/utils/database-utils.ts @@ -60,35 +60,3 @@ export function isSupportedDatabaseType( export function getSupportedDatabaseTypes(): string[] { return Object.values(DatabaseType); } - -/** - * Extracts content within tags from a given string. - * @param input - The input string containing tags. - * @returns The content within the tags. - * @throws Error if the tags are missing or improperly formatted. - */ -export function parseGenerateTag(input: string): string { - const generateTagRegex = /([\s\S]*?)<\/GENERATE>/; - const match = input.match(generateTagRegex); - if (!match || match.length < 2) { - throw new Error( - 'Invalid format: tags are missing or improperly formatted.', - ); - } - return match[1].trim(); -} - -/** - * Removes Markdown code block fences (e.g. ``` or ```javascript) from the given string. - * This function will remove lines that contain triple backticks, leaving only the actual code content. - * - * @param input - The input string potentially containing Markdown code fences. - * @returns The input string without Markdown code block fences. - */ -export function removeCodeBlockFences(input: string): string { - return input - .split('\n') - .filter((line) => !line.trim().startsWith('```')) - .join('\n') - .trim(); -} diff --git a/backend/src/build-system/utils/strings.ts b/backend/src/build-system/utils/strings.ts index 6ba1a896..84635a3d 100644 --- a/backend/src/build-system/utils/strings.ts +++ b/backend/src/build-system/utils/strings.ts @@ -9,9 +9,7 @@ const logger = new Logger('common-utils'); export function extractJsonFromMarkdown(markdownContent: string): { files: Record; } { - const jsonMatch = /([\s\S]*?)<\/GENERATEDCODE>/m.exec( - markdownContent, - ); + const jsonMatch = /([\s\S]*?)<\/GENERATE>/m.exec(markdownContent); if (!jsonMatch) { logger.error('No JSON found in the provided Markdown content.'); return null; @@ -24,3 +22,52 @@ export function extractJsonFromMarkdown(markdownContent: string): { return null; } } + +/** + * Extracts content within tags from a given string. + * @param input - The input string containing tags. + * @returns The content within the tags. + * @throws Error if the tags are missing or improperly formatted. + */ +export function parseGenerateTag(input: string): string { + const generateTagRegex = /([\s\S]*?)<\/GENERATE>/; + const match = input.match(generateTagRegex); + if (!match || match.length < 2) { + throw new Error( + 'Invalid format: tags are missing or improperly formatted.', + ); + } + return match[1].trim(); +} + +/** + * Removes Markdown code block fences (e.g. ``` or ```javascript) from the given string. + * This function will remove lines that contain triple backticks, leaving only the actual code content. + * + * @param input - The input string potentially containing Markdown code fences. + * @returns The input string without Markdown code block fences. + */ +export function removeCodeBlockFences(input: string): string { + return input + .split('\n') + .filter((line) => !line.trim().startsWith('```')) + .join('\n') + .trim(); +} + +export function formatResponse(response: string): string { + return removeCodeBlockFences( + parseGenerateTag(removeCodeBlockFences(response)), + ); +} + +export function extractJsonFromText(content: string): { + files: Record; +} { + try { + return JSON.parse(content); + } catch (error) { + logger.error('Invalid JSON format in the Markdown content: ' + error); + return null; + } +} diff --git a/backend/src/chat/message.model.ts b/backend/src/chat/message.model.ts index 05efb478..4824784f 100644 --- a/backend/src/chat/message.model.ts +++ b/backend/src/chat/message.model.ts @@ -1,24 +1,29 @@ -import { - Field, - InputType, - ObjectType, - ID, - registerEnumType, -} from '@nestjs/graphql'; -import { - Entity, - PrimaryGeneratedColumn, - Column, - ManyToOne, - OneToMany, - JoinColumn, -} from 'typeorm'; -import { Chat } from 'src/chat/chat.model'; +import { Field, ObjectType, ID, registerEnumType } from '@nestjs/graphql'; +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; import { SystemBaseModel } from 'src/system-base-model/system-base.model'; +/** + * Represents the different roles in a chat conversation + */ export enum MessageRole { + /** + * Represents the end user who sends queries or requests to the model. + * Contains questions, instructions, or any input that requires a response. + */ User = 'user', - Model = 'assistant', + + /** + * Represents the AI model's responses in the conversation. + * Contains generated answers, explanations, or any output based on user input. + */ + Assistant = 'assistant', + + /** + * Represents system-level instructions that define the behavior and context. + * Used to set the model's personality, constraints, and background information. + * Typically appears at the start of a conversation. + */ + System = 'system', } registerEnumType(MessageRole, { diff --git a/backend/src/common/model-provider/index.ts b/backend/src/common/model-provider/index.ts index 0e81e594..19c3f5a4 100644 --- a/backend/src/common/model-provider/index.ts +++ b/backend/src/common/model-provider/index.ts @@ -112,7 +112,7 @@ export class ModelProvider { * Stream-based chat method that returns an async iterator */ chat( - input: ChatInput | string, + input: ChatInput, model: string, chatId?: string, ): CustomAsyncIterableIterator { diff --git a/backend/src/common/model-provider/types.ts b/backend/src/common/model-provider/types.ts index 61984d3a..e8ec5ecd 100644 --- a/backend/src/common/model-provider/types.ts +++ b/backend/src/common/model-provider/types.ts @@ -1,5 +1,3 @@ -import { MessageRole } from 'src/chat/message.model'; - export interface ModelChatStreamConfig { endpoint: string; model?: string; @@ -15,7 +13,7 @@ export interface ModelProviderConfig { export interface MessageInterface { content: string; - role: MessageRole; + role: 'user' | 'assistant' | 'system'; } export interface ChatInput { diff --git a/backend/src/config/config-loader.ts b/backend/src/config/config-loader.ts index 650e207b..c1635261 100644 --- a/backend/src/config/config-loader.ts +++ b/backend/src/config/config-loader.ts @@ -118,7 +118,6 @@ export class ConfigLoader { } this.logger.log(ConfigLoader.config); - } get(path?: string): T { diff --git a/backend/src/embedding/__tests__/loadAllEmbModels.spec.ts b/backend/src/embedding/__tests__/loadAllEmbModels.spec.ts index b2d1ea89..2d0cc304 100644 --- a/backend/src/embedding/__tests__/loadAllEmbModels.spec.ts +++ b/backend/src/embedding/__tests__/loadAllEmbModels.spec.ts @@ -1,6 +1,6 @@ import { localEmbProvider } from '../local-embedding-provider'; import { EmbeddingModel } from 'fastembed'; -import { openAIEmbProvider } from '../../../../llm-server/src/embedding/openai-embedding-provider'; +import { OpenAIEmbProvider } from '../openai-embbeding-provider'; const originalIsArray = Array.isArray; Array.isArray = jest.fn((type: any): type is any[] => { @@ -16,7 +16,8 @@ Array.isArray = jest.fn((type: any): type is any[] => { }) as unknown as (arg: any) => arg is any[]; describe('testing embedding provider', () => { - it('should load real models specified in config', async () => { + let openAiProvider: OpenAIEmbProvider; + it('should load real local models specified in config', async () => { const documents = [ 'passage: Hello, World!', 'query: Hello, World!', @@ -31,7 +32,14 @@ describe('testing embedding provider', () => { ); }, 6000000); - + it('should load real openai embedding models', async () => { + openAiProvider = OpenAIEmbProvider.getInstance(); + const res = await openAiProvider.generateEmbResponse( + 'text-embedding-3-small', + 'test document', + ); + console.log(res); + }, 6000000); }); afterAll(() => { diff --git a/backend/src/embedding/openai-embbeding-provider.ts b/backend/src/embedding/openai-embbeding-provider.ts index d8ab5766..68128df1 100644 --- a/backend/src/embedding/openai-embbeding-provider.ts +++ b/backend/src/embedding/openai-embbeding-provider.ts @@ -3,29 +3,41 @@ import { EmbeddingModel } from 'fastembed'; import openai, { OpenAI } from 'openai'; import { EmbeddingDownloader } from 'src/downloader/embedding-downloader'; -export class openAIEmbProvider { - private static logger = new Logger(openAIEmbProvider.name); - - private static openai = () => { - return new OpenAI({ - apiKey: process.env.OPEN_API_KEY, +export class OpenAIEmbProvider { + private logger = new Logger(OpenAIEmbProvider.name); + private static instance: OpenAIEmbProvider; + private openAi: OpenAI; + static openAi: any; + static getInstance() { + if (this.instance) { + return this.instance; + } + return new OpenAIEmbProvider(); + } + constructor() { + this.openAi = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, }); - }; + } - static async generateEmbResponse(model: string, message: string) { - const embedding = await this.openai().embeddings.create({ + async generateEmbResponse(model: string, message: string): Promise { + const embedding = await this.openAi.embeddings.create({ model: model, input: message, encoding_format: 'float', }); console.log(embedding.data[0].embedding); + return embedding.data[0].embedding; } - static async getEmbList() { + async getEmbList(): Promise { try { - const models = await this.openai().models.list(); - Object.values(models).filter((model) => model.object === 'embedding'); + const models = await this.openAi.models.list(); + const modelList = Object.values(models).filter( + (model) => model.object === 'embedding', + ); this.logger.log(`Models fetched: ${models.data.length}`); + return modelList; } catch (error) { this.logger.error('Error fetching models:', error); } diff --git a/llm-server/src/emb-provider.ts b/llm-server/src/emb-provider.ts deleted file mode 100644 index c27fabdc..00000000 --- a/llm-server/src/emb-provider.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Response } from 'express'; -import { openAIEmbProvider } from './embedding/openai-embedding-provider'; -import { LlamaModelProvider } from './model/llama-model-provider'; // 如果支持Llama模型 -import { Logger } from '@nestjs/common'; -import { - ModelProviderType, - ModelProviderOptions, - ModelError, - GenerateMessageParams, -} from './types'; -import { ModelProvider } from './model/model-provider'; -import { EmbeddingProvider } from './embedding/emb-provider'; - -export interface EmbeddingInput { - content: string; -} - -export interface Embedding { - model: string; - embedding: number[]; -} - -export class EmbeddingModelProvider { - private readonly logger = new Logger(EmbeddingModelProvider.name); - private modelProvider: EmbeddingProvider; - private readonly options: ModelProviderOptions; - private initialized: boolean = false; - - constructor( - modelProviderType: ModelProviderType = 'openai', - options: ModelProviderOptions = {}, - ) { - this.options = { - maxConcurrentRequests: 5, - maxRetries: 3, - retryDelay: 1000, - ...options, - }; - - this.modelProvider = this.createModelProvider(modelProviderType); - } - - private createModelProvider(type: ModelProviderType): EmbeddingProvider { - switch (type) { - case 'openai': - return new openAIEmbProvider({apiKey: process.env.OPEN_API_KEY}); - // case 'llama': - // - // // return new LlamaModelProvider(); - default: - throw new Error(`Unsupported embedding model provider type: ${type}`); - } - } - - async initialize(): Promise { - try { - this.logger.log('Initializing embedding provider...'); - await this.modelProvider.initialize(); - this.initialized = true; - this.logger.log('Embedding provider fully initialized and ready.'); - } catch (error) { - const modelError = this.normalizeError(error); - this.logger.error('Failed to initialize embedding provider:', modelError); - throw modelError; - } - } - - async generateEmbeddingResponse( - params: GenerateMessageParams, - res: Response, - ): Promise { - this.ensureInitialized(); - - try { - await this.modelProvider.generateEmbResponse(params, res); - } catch (error) { - const modelError = this.normalizeError(error); - this.logger.error('Error in generating embedding response:', modelError); - - if (!res.writableEnded) { - this.sendErrorResponse(res, modelError); - } - } - } - - async getEmbeddingModels(res: Response): Promise { - this.ensureInitialized(); - - try { - await this.modelProvider.getEmbList(res); - } catch (error) { - const modelError = this.normalizeError(error); - this.logger.error('Error getting embedding models:', modelError); - - if (!res.writableEnded) { - this.sendErrorResponse(res, modelError); - } - } - } - - private ensureInitialized(): void { - if (!this.initialized) { - throw new Error('Embedding provider not initialized. Call initialize() first.'); - } - } - - private normalizeError(error: any): ModelError { - if (error instanceof Error) { - return { - ...error, - code: (error as any).code || 'UNKNOWN_ERROR', - retryable: (error as any).retryable || false, - }; - } - - return { - name: 'Error', - message: String(error), - code: 'UNKNOWN_ERROR', - retryable: false, - }; - } - - private sendErrorResponse(res: Response, error: ModelError): void { - const errorResponse = { - error: { - message: error.message, - code: error.code, - details: error.details, - }, - }; - - if (res.headersSent) { - res.write(`data: ${JSON.stringify(errorResponse)}\n\n`); - res.write('data: [DONE]\n\n'); - res.end(); - } else { - res.status(500).json(errorResponse); - } - } - - isInitialized(): boolean { - return this.initialized; - } - - getCurrentProvider(): string { - return this.modelProvider.constructor.name; - } - - getProviderOptions(): ModelProviderOptions { - return { ...this.options }; - } -} diff --git a/llm-server/src/embedding/emb-provider.ts b/llm-server/src/embedding/emb-provider.ts deleted file mode 100644 index 84d7e758..00000000 --- a/llm-server/src/embedding/emb-provider.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Response } from 'express'; -import { GenerateMessageParams } from '../types'; - -export interface EmbeddingProvider { - initialize(): Promise; - generateEmbResponse(params: GenerateMessageParams, - res: Response,): Promise; - getEmbList(res: Response): Promise; -} diff --git a/llm-server/src/embedding/openai-embedding-provider.ts b/llm-server/src/embedding/openai-embedding-provider.ts deleted file mode 100644 index 084a1394..00000000 --- a/llm-server/src/embedding/openai-embedding-provider.ts +++ /dev/null @@ -1,93 +0,0 @@ - -import { Logger } from '@nestjs/common'; -import OpenAI from 'openai'; -import PQueue from 'p-queue'; -import { Response } from 'express' -import { EmbeddingProvider } from './emb-provider'; -import { GenerateMessageParams } from '../types'; - -export class openAIEmbProvider implements EmbeddingProvider { - - private logger = new Logger(openAIEmbProvider.name); - - private openai: OpenAI; - private requestQueue: PQueue; - private readonly options: { - maxConcurrentRequests: number; - maxRetries: number; - retryDelay: number; - queueInterval: number; - intervalCap: number; - apiKey: string; - }; - - constructor(options: { apiKey?: string } = {}) { - this.options = { - maxConcurrentRequests: 5, - maxRetries: 3, - retryDelay: 1000, - queueInterval: 1000, - intervalCap: 10, - apiKey: process.env.OPEN_API_KEY || options.apiKey, - ...options, - }; - - this.requestQueue = new PQueue({ - concurrency: this.options.maxConcurrentRequests, - interval: this.options.queueInterval, - intervalCap: this.options.intervalCap, - }); - - this.requestQueue.on('active', () => { - this.logger.debug(`Queue size: ${this.requestQueue.size}, Pending: ${this.requestQueue.pending}`); - }); - } - - async initialize(): Promise { - this.logger.log('Initializing OpenAI model...'); - if (!this.options.apiKey) { - throw new Error('OpenAI API key is required'); - } - - this.openai = new OpenAI({ - apiKey: this.options.apiKey, - }); - - this.logger.log(`OpenAI model initialized with options: ${JSON.stringify(this.options)}`); - } - - async generateEmbResponse( - params: GenerateMessageParams, - res: Response, - ): Promise { - try { - const embedding = await this.openai.embeddings.create({ - model: params.model, - input: params.message, - encoding_format: "float", - }); - console.log(embedding.data[0].embedding); - res.json({ - embedding: embedding.data[0].embedding - }) - } catch (error) { - this.logger.error(`Error generating embedding for model ${params.model}:`, error); - res.status(500).json({ - error: error, - }) - } - } - - async getEmbList(res: Response): Promise { - try { - const models = await this.openai.models.list(); - const embeddingModels = models.data.filter(model => (model.object as string) === "embedding"); - - res.json({ models: embeddingModels }); - this.logger.log(`Fetched ${embeddingModels.length} embedding models.`); - } catch (error) { - this.logger.error('Error fetching models:', error); - res.status(500).json({ error: 'Error fetching models', message: error.message }); - } - } -} diff --git a/llm-server/src/main.ts b/llm-server/src/main.ts index d8398b9c..3ef22129 100644 --- a/llm-server/src/main.ts +++ b/llm-server/src/main.ts @@ -2,59 +2,58 @@ import { Logger, Module } from '@nestjs/common'; import { ChatMessageInput, LLMProvider } from './llm-provider'; import express, { Express, Request, Response } from 'express'; import { GenerateMessageParams } from './types'; -import { EmbeddingModelProvider } from './emb-provider'; export class App { private readonly logger = new Logger(App.name); private app: Express; private readonly PORT: number; private llmProvider: LLMProvider; - private embProvider: EmbeddingModelProvider; + // private embProvider: EmbeddingModelProvider; - constructor(llmProvider: LLMProvider, embProvider: EmbeddingModelProvider) { + constructor(llmProvider: LLMProvider) { this.app = express(); this.app.use(express.json()); this.PORT = parseInt(process.env.PORT || '3001', 10); this.llmProvider = llmProvider; - this.embProvider = embProvider; + // this.embProvider = embProvider; this.logger.log(`App initialized with PORT: ${this.PORT}`); } setupRoutes(): void { this.logger.log('Setting up routes...'); this.app.post('/chat/completion', this.handleChatRequest.bind(this)); - this.app.post('/embedding', this.handleEmbRequest.bind(this)); + // this.app.post('/embedding', this.handleEmbRequest.bind(this)); this.app.get('/tags', this.handleModelTagsRequest.bind(this)); this.logger.log('Routes set up successfully.'); } - private async handleEmbRequest(req: Request, res: Response): Promise { - this.logger.log('Received embedding request.'); - try { - this.logger.debug(JSON.stringify(req.body)); - const { content, model } = req.body as ChatMessageInput & { - model: string; - }; - if (!content || !model) { - res.status(400).json({ error: 'Content and model are required' }); - } - - this.logger.log(`Received chat request for model: ${model}`); - const params: GenerateMessageParams = { - model: model || 'text-embedding-ada-002', - message: content - }; + // private async handleEmbRequest(req: Request, res: Response): Promise { + // this.logger.log('Received embedding request.'); + // try { + // this.logger.debug(JSON.stringify(req.body)); + // const { content, model } = req.body as ChatMessageInput & { + // model: string; + // }; + // if (!content || !model) { + // res.status(400).json({ error: 'Content and model are required' }); + // } - this.logger.debug(`Request content: "${content}"`); - res.setHeader('Content-Type', 'application/json'); - res.setHeader('Cache-Control', 'no-cache'); - this.logger.debug('Response headers set for streaming.'); - await this.embProvider.generateEmbeddingResponse(params, res); - } catch (error) { - this.logger.error('Error in chat endpoint:', error); - res.status(500).json({ error: 'Internal server error' }); - } - } + // this.logger.log(`Received chat request for model: ${model}`); + // const params: GenerateMessageParams = { + // model: model || 'text-embedding-ada-002', + // messages: [{ content, role: 'system' }], + // }; + + // this.logger.debug(`Request content: "${content}"`); + // res.setHeader('Content-Type', 'application/json'); + // res.setHeader('Cache-Control', 'no-cache'); + // this.logger.debug('Response headers set for streaming.'); + // await this.embProvider.generateEmbeddingResponse(params, res); + // } catch (error) { + // this.logger.error('Error in chat endpoint:', error); + // res.status(500).json({ error: 'Internal server error' }); + // } + // } private async handleChatRequest(req: Request, res: Response): Promise { this.logger.log('Received chat request.'); @@ -108,10 +107,10 @@ async function main() { try { const llmProvider = new LLMProvider('openai'); await llmProvider.initialize(); - - const embProvider = new EmbeddingModelProvider('openai'); - await embProvider.initialize(); - const app = new App(llmProvider, embProvider); + + // const embProvider = new EmbeddingModelProvider('openai'); + // await embProvider.initialize(); + const app = new App(llmProvider); await app.start(); } catch (error) { logger.error('Failed to start the application:', error); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c1cf65a5..0f78af1f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,10 +14,10 @@ importers: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^8.0.0 - version: 8.18.2(@typescript-eslint/parser@8.18.2)(eslint@8.57.1)(typescript@5.6.2) + version: 8.19.1(@typescript-eslint/parser@8.19.1)(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': specifier: ^8.0.0 - version: 8.18.2(eslint@8.57.1)(typescript@5.6.2) + version: 8.19.1(eslint@8.57.1)(typescript@5.6.2) eslint: specifier: ^8.57.1 version: 8.57.1 @@ -35,7 +35,7 @@ importers: dependencies: '@apollo/server': specifier: ^4.11.0 - version: 4.11.2(graphql@16.10.0) + version: 4.11.3(graphql@16.10.0) '@huggingface/hub': specifier: latest version: 1.0.0 @@ -44,7 +44,7 @@ importers: version: 3.2.4 '@nestjs/apollo': specifier: ^12.2.0 - version: 12.2.2(@apollo/server@4.11.2)(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(@nestjs/graphql@12.2.2)(graphql@16.10.0) + version: 12.2.2(@apollo/server@4.11.3)(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(@nestjs/graphql@12.2.2)(graphql@16.10.0) '@nestjs/axios': specifier: ^3.0.3 version: 3.1.3(@nestjs/common@10.4.15)(axios@1.7.9)(rxjs@7.8.1) @@ -153,16 +153,16 @@ importers: version: 29.5.14 '@types/node': specifier: ^20.16.12 - version: 20.17.10 + version: 20.17.12 '@types/supertest': specifier: ^6.0.0 version: 6.0.2 '@typescript-eslint/eslint-plugin': specifier: ^8.0.0 - version: 8.18.2(@typescript-eslint/parser@8.18.2)(eslint@8.57.1)(typescript@5.6.3) + version: 8.19.1(@typescript-eslint/parser@8.19.1)(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/parser': specifier: ^8.0.0 - version: 8.18.2(eslint@8.57.1)(typescript@5.6.3) + version: 8.19.1(eslint@8.57.1)(typescript@5.6.3) eslint: specifier: ^8.57.1 version: 8.57.1 @@ -174,7 +174,7 @@ importers: version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.4.2) jest: specifier: ^29.5.0 - version: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.17.12)(ts-node@10.9.2) os: {specifier: ^0.1.2, version: 0.1.2} prettier: specifier: ^3.0.0 @@ -193,7 +193,7 @@ importers: version: 9.5.1(typescript@5.6.3)(webpack@5.97.1) ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.17.10)(typescript@5.6.3) + version: 10.9.2(@types/node@20.17.12)(typescript@5.6.3) ts-prune: specifier: ^0.10.3 version: 0.10.3 @@ -254,13 +254,13 @@ importers: version: 1.1.1(emoji-mart@5.6.0)(react@18.3.1) '@hookform/resolvers': specifier: ^3.9.0 - version: 3.9.1(react-hook-form@7.54.2) + version: 3.10.0(react-hook-form@7.54.2) '@langchain/community': specifier: ^0.3.1 - version: 0.3.20(@browserbasehq/stagehand@1.8.0)(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/core@0.3.26)(axios@1.7.4)(ibm-cloud-sdk-core@5.1.0)(openai@4.77.0)(ws@8.18.0) + version: 0.3.22(@browserbasehq/stagehand@1.8.0)(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/core@0.3.27)(axios@1.7.4)(ibm-cloud-sdk-core@5.1.0)(openai@4.77.3)(ws@8.18.0) '@langchain/core': specifier: ^0.3.3 - version: 0.3.26(openai@4.77.0) + version: 0.3.27(openai@4.77.3) '@nestjs/common': specifier: ^10.4.6 version: 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -311,7 +311,7 @@ importers: version: 5.6.0 framer-motion: specifier: ^11.5.6 - version: 11.15.0(react-dom@18.3.1)(react@18.3.1) + version: 11.16.0(react-dom@18.3.1)(react@18.3.1) graphql: specifier: ^16.9.0 version: 16.10.0 @@ -344,7 +344,7 @@ importers: version: 7.54.2(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.1(@types/react@18.3.18)(react@18.3.1) + version: 9.0.3(@types/react@18.3.18)(react@18.3.1) react-resizable-panels: specifier: ^2.1.3 version: 2.1.7(react-dom@18.3.1)(react@18.3.1) @@ -384,7 +384,7 @@ importers: version: 1.12.16(graphql@16.10.0)(typescript@5.6.3) '@graphql-codegen/cli': specifier: ^5.0.3 - version: 5.0.3(@parcel/watcher@2.5.0)(@types/node@22.10.2)(graphql@16.10.0)(typescript@5.6.3) + version: 5.0.3(@parcel/watcher@2.5.0)(@types/node@22.10.5)(graphql@16.10.0)(typescript@5.6.3) '@graphql-codegen/typescript': specifier: ^4.1.0 version: 4.1.2(graphql@16.10.0) @@ -414,7 +414,7 @@ importers: version: 29.5.14 '@types/node': specifier: ^22.5.5 - version: 22.10.2 + version: 22.10.5 '@types/react': specifier: ^18.3.8 version: 18.3.18 @@ -435,7 +435,7 @@ importers: version: 14.2.13(eslint@8.57.1)(typescript@5.6.3) jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2) + version: 29.7.0(@types/node@22.10.5)(ts-node@10.9.2) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -450,7 +450,7 @@ importers: version: 29.2.5(@babel/core@7.26.0)(jest@29.7.0)(typescript@5.6.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.10.2)(typescript@5.6.3) + version: 10.9.2(@types/node@22.10.5)(typescript@5.6.3) typescript: specifier: ^5.6.2 version: 5.6.3 @@ -463,6 +463,9 @@ importers: express: specifier: ^4.21.1 version: 4.21.2 + fastembed: + specifier: ^1.14.1 + version: 1.14.1 node-fetch: specifier: ^3.3.2 version: 3.3.2 @@ -481,13 +484,13 @@ importers: version: 4.17.21 '@types/node': specifier: ^16.11.12 - version: 16.18.122 + version: 16.18.123 '@typescript-eslint/eslint-plugin': specifier: ^8.0.0 - version: 8.18.2(@typescript-eslint/parser@8.18.2)(eslint@8.57.1)(typescript@5.6.3) + version: 8.19.1(@typescript-eslint/parser@8.19.1)(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/parser': specifier: ^8.0.0 - version: 8.18.2(eslint@8.57.1)(typescript@5.6.3) + version: 8.19.1(eslint@8.57.1)(typescript@5.6.3) eslint: specifier: ^8.57.1 version: 8.57.1 @@ -498,8 +501,8 @@ importers: specifier: ^5.0.0 version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@8.57.1)(prettier@3.4.2) openai: - specifier: ^4.68.1 - version: 4.77.0(zod@3.24.1) + specifier: ^4.77.0 + version: 4.77.3(zod@3.24.1) prettier: specifier: ^3.0.0 version: 3.4.2 @@ -508,7 +511,7 @@ importers: version: 9.5.1(typescript@5.6.3)(webpack@5.97.1) ts-node: specifier: ^10.4.0 - version: 10.9.2(@types/node@16.18.122)(typescript@5.6.3) + version: 10.9.2(@types/node@16.18.123)(typescript@5.6.3) typescript: specifier: ^5.6.3 version: 5.6.3 @@ -521,8 +524,8 @@ importers: packages: - /@0no-co/graphql.web@1.0.12(graphql@16.10.0): - resolution: {integrity: sha512-BTDjjsV/zSPy5fqItwm+KWUfh9CSe9tTtR6rCB72ddtkAxdcHbi4Ir4r/L1Et4lyxmL+i7Rb3m9sjLLi9tYrzA==} + /@0no-co/graphql.web@1.0.13(graphql@16.10.0): + resolution: {integrity: sha512-jqYxOevheVTU1S36ZdzAkJIdvRp2m3OYIG5SEoKDw5NI8eVwkoI0D/Q3DYNGmXCxkA6CQuoa7zvMiDPTLqUNuw==} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 peerDependenciesMeta: @@ -877,7 +880,7 @@ packages: /@anthropic-ai/sdk@0.27.3: resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} dependencies: - '@types/node': 18.19.68 + '@types/node': 18.19.70 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -888,6 +891,41 @@ packages: - encoding dev: false + /@anush008/tokenizers-darwin-universal@0.0.0: + resolution: {integrity: sha512-SACpWEooTjFX89dFKRVUhivMxxcZRtA3nJGVepdLyrwTkQ1TZQ8581B5JoXp0TcTMHfgnDaagifvVoBiFEdNCQ==} + engines: {node: '>= 10'} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@anush008/tokenizers-linux-x64-gnu@0.0.0: + resolution: {integrity: sha512-TLjByOPWUEq51L3EJkS+slyH57HKJ7lAz/aBtEt7TIPq4QsE2owOPGovByOLIq1x5Wgh9b+a4q2JasrEFSDDhg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@anush008/tokenizers-win32-x64-msvc@0.0.0: + resolution: {integrity: sha512-/5kP0G96+Cr6947F0ZetXnmL31YCaN15dbNbh2NHg7TXXRwfqk95+JtPP5Q7v4jbR2xxAmuseBqB4H/V7zKWuw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@anush008/tokenizers@0.0.0: + resolution: {integrity: sha512-IQD9wkVReKAhsEAbDjh/0KrBGTEXelqZLpOBRDaIRvlzZ9sjmUP+gKbpvzyJnei2JHQiE8JAgj7YcNloINbGBw==} + engines: {node: '>= 10'} + optionalDependencies: + '@anush008/tokenizers-darwin-universal': 0.0.0 + '@anush008/tokenizers-linux-x64-gnu': 0.0.0 + '@anush008/tokenizers-win32-x64-msvc': 0.0.0 + dev: false + /@apollo/cache-control-types@1.0.3(graphql@16.10.0): resolution: {integrity: sha512-F17/vCp7QVwom9eG7ToauIKdAxpSoadsJnqIfyryLFSkLSOEqu+eC5Z3N8OXcUVStuOMcNHlyraRsA6rRICu4g==} peerDependencies: @@ -927,7 +965,7 @@ packages: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) rehackt: 0.1.0(@types/react@18.3.18)(react@18.3.1) - response-iterator: 0.2.6 + response-iterator: 0.2.11 subscriptions-transport-ws: 0.11.0(graphql@16.10.0) symbol-observable: 4.0.0 ts-invariant: 0.10.3 @@ -968,19 +1006,19 @@ packages: graphql: 16.10.0 dev: false - /@apollo/server-plugin-landing-page-graphql-playground@4.0.0(@apollo/server@4.11.2): + /@apollo/server-plugin-landing-page-graphql-playground@4.0.0(@apollo/server@4.11.3): resolution: {integrity: sha512-PBDtKI/chJ+hHeoJUUH9Kuqu58txQl00vUGuxqiC9XcReulIg7RjsyD0G1u3drX4V709bxkL5S0nTeXfRHD0qA==} engines: {node: '>=14.0'} deprecated: The use of GraphQL Playground in Apollo Server was supported in previous versions, but this is no longer the case as of December 31, 2022. This package exists for v4 migration purposes only. We do not intend to resolve security issues or other bugs with this package if they arise, so please migrate away from this to [Apollo Server's default Explorer](https://www.apollographql.com/docs/apollo-server/api/plugin/landing-pages) as soon as possible. peerDependencies: '@apollo/server': ^4.0.0 dependencies: - '@apollo/server': 4.11.2(graphql@16.10.0) + '@apollo/server': 4.11.3(graphql@16.10.0) '@apollographql/graphql-playground-html': 1.6.29 dev: false - /@apollo/server@4.11.2(graphql@16.10.0): - resolution: {integrity: sha512-WUTHY7DDek8xAMn4Woa9Bl8duQUDzRYQkosX/d1DtCsBWESZyApR7ndnI5d6+W4KSTtqBHhJFkusEI7CWuIJXg==} + /@apollo/server@4.11.3(graphql@16.10.0): + resolution: {integrity: sha512-mW8idE2q0/BN14mimfJU5DAnoPHZRrAWgwsVLBEdACds+mxapIYxIbI6AH4AsOpxfrpvHts3PCYDbopy1XPW1g==} engines: {node: '>=14.16.0'} peerDependencies: graphql: ^16.6.0 @@ -988,7 +1026,7 @@ packages: '@apollo/cache-control-types': 1.0.3(graphql@16.10.0) '@apollo/server-gateway-interface': 1.1.1(graphql@16.10.0) '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.createhash': 2.0.1 + '@apollo/utils.createhash': 2.0.2 '@apollo/utils.fetcher': 2.0.1 '@apollo/utils.isnodelike': 2.0.1 '@apollo/utils.keyvaluecache': 2.1.1 @@ -1021,8 +1059,8 @@ packages: '@apollo/protobufjs': 1.2.7 dev: false - /@apollo/utils.createhash@2.0.1: - resolution: {integrity: sha512-fQO4/ZOP8LcXWvMNhKiee+2KuKyqIcfHrICA+M4lj/h/Lh1H10ICcUtk6N/chnEo5HXu0yejg64wshdaiFitJg==} + /@apollo/utils.createhash@2.0.2: + resolution: {integrity: sha512-UkS3xqnVFLZ3JFpEmU/2cM2iKJotQXMoSTgxXsfQgXLC5gR1WaepoXagmYnPSA7Q/2cmnyTYK5OgAgoC4RULPg==} engines: {node: '>=14'} dependencies: '@apollo/utils.isnodelike': 2.0.1 @@ -2500,7 +2538,7 @@ packages: /@browserbasehq/sdk@2.0.0: resolution: {integrity: sha512-BdPlZyn0dpXlL70gNK4acpqWIRB+edo2z0/GalQdWghRq8iQjySd9fVIF3evKH1p2wCYekZJRK6tm29YfXB67g==} dependencies: - '@types/node': 18.19.68 + '@types/node': 18.19.70 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -2511,7 +2549,7 @@ packages: - encoding dev: false - /@browserbasehq/stagehand@1.8.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.0)(zod@3.24.1): + /@browserbasehq/stagehand@1.8.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.3)(zod@3.24.1): resolution: {integrity: sha512-ozwE2imQzWhi1pir6+L7bwIWKXQQ+tX7oVRbQkcmHkj+xdDJJDMYxNMBJyt8mnAvXHvsadUowAWSIEfcTrNEqA==} peerDependencies: '@playwright/test': ^1.42.1 @@ -2525,7 +2563,7 @@ packages: '@playwright/test': 1.49.1 deepmerge: 4.3.1 dotenv: 16.4.7 - openai: 4.77.0(zod@3.24.1) + openai: 4.77.3(zod@3.24.1) sharp: 0.33.5 ws: 8.18.0 zod: 3.24.1 @@ -2536,8 +2574,8 @@ packages: - utf-8-validate dev: false - /@cfworker/json-schema@4.0.3: - resolution: {integrity: sha512-ZykIcDTVv5UNmKWSTLAs3VukO6NDJkkSKxrgUTDPBkAlORVT3H9n5DbRjRl8xIotklscHdbLIa0b9+y3mQq73g==} + /@cfworker/json-schema@4.1.0: + resolution: {integrity: sha512-/vYKi/qMxwNsuIJ9WGWwM2rflY40ZenK3Kh4uR5vB9/Nz12Y7IUN/Xf4wDA7vzPfw0VNh3b/jz4+MjcVgARKJg==} dev: false /@colors/colors@1.5.0: @@ -4067,7 +4105,7 @@ packages: graphql: ^15.5.0 || ^16.0.0 || ^17.0.0 typescript: ^5.0.0 dependencies: - '@0no-co/graphql.web': 1.0.12(graphql@16.10.0) + '@0no-co/graphql.web': 1.0.13(graphql@16.10.0) graphql: 16.10.0 typescript: 5.6.3 dev: true @@ -4082,7 +4120,7 @@ packages: tslib: 2.6.3 dev: true - /@graphql-codegen/cli@5.0.3(@parcel/watcher@2.5.0)(@types/node@22.10.2)(graphql@16.10.0)(typescript@5.6.3): + /@graphql-codegen/cli@5.0.3(@parcel/watcher@2.5.0)(@types/node@22.10.5)(graphql@16.10.0)(typescript@5.6.3): resolution: {integrity: sha512-ULpF6Sbu2d7vNEOgBtE9avQp2oMgcPY/QBYcCqk0Xru5fz+ISjcovQX29V7CS7y5wWBRzNLoXwJQGeEyWbl05g==} engines: {node: '>=16'} hasBin: true @@ -4099,16 +4137,16 @@ packages: '@graphql-codegen/client-preset': 4.5.1(graphql@16.10.0) '@graphql-codegen/core': 4.0.2(graphql@16.10.0) '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) - '@graphql-tools/apollo-engine-loader': 8.0.10(graphql@16.10.0) - '@graphql-tools/code-file-loader': 8.1.11(graphql@16.10.0) - '@graphql-tools/git-loader': 8.0.15(graphql@16.10.0) - '@graphql-tools/github-loader': 8.0.10(@types/node@22.10.2)(graphql@16.10.0) - '@graphql-tools/graphql-file-loader': 8.0.9(graphql@16.10.0) - '@graphql-tools/json-file-loader': 8.0.9(graphql@16.10.0) - '@graphql-tools/load': 8.0.10(graphql@16.10.0) - '@graphql-tools/prisma-loader': 8.0.17(@types/node@22.10.2)(graphql@16.10.0) - '@graphql-tools/url-loader': 8.0.21(@types/node@22.10.2)(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/apollo-engine-loader': 8.0.12(graphql@16.10.0) + '@graphql-tools/code-file-loader': 8.1.13(graphql@16.10.0) + '@graphql-tools/git-loader': 8.0.17(graphql@16.10.0) + '@graphql-tools/github-loader': 8.0.12(@types/node@22.10.5)(graphql@16.10.0) + '@graphql-tools/graphql-file-loader': 8.0.11(graphql@16.10.0) + '@graphql-tools/json-file-loader': 8.0.11(graphql@16.10.0) + '@graphql-tools/load': 8.0.12(graphql@16.10.0) + '@graphql-tools/prisma-loader': 8.0.17(@types/node@22.10.5)(graphql@16.10.0) + '@graphql-tools/url-loader': 8.0.23(@types/node@22.10.5)(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@parcel/watcher': 2.5.0 '@whatwg-node/fetch': 0.9.23 chalk: 4.1.2 @@ -4116,7 +4154,7 @@ packages: debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.10.0 - graphql-config: 5.1.3(@types/node@22.10.2)(graphql@16.10.0)(typescript@5.6.3) + graphql-config: 5.1.3(@types/node@22.10.5)(graphql@16.10.0)(typescript@5.6.3) inquirer: 8.2.6 is-glob: 4.0.3 jiti: 1.21.7 @@ -4128,7 +4166,7 @@ packages: string-env-interpolation: 1.0.1 ts-log: 2.2.7 tslib: 2.8.1 - yaml: 2.6.1 + yaml: 2.7.0 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' @@ -4157,7 +4195,7 @@ packages: '@graphql-codegen/typescript-operations': 4.4.0(graphql@16.10.0) '@graphql-codegen/visitor-plugin-common': 5.6.0(graphql@16.10.0) '@graphql-tools/documents': 1.0.1(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 @@ -4172,8 +4210,8 @@ packages: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) - '@graphql-tools/schema': 10.0.14(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/schema': 10.0.16(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 dev: true @@ -4186,7 +4224,7 @@ packages: dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) '@graphql-codegen/visitor-plugin-common': 5.6.0(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) auto-bind: 4.0.0 graphql: 16.10.0 tslib: 2.6.3 @@ -4229,7 +4267,7 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) change-case-all: 1.0.15 common-tags: 1.8.2 graphql: 16.10.0 @@ -4244,7 +4282,7 @@ packages: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 dev: true @@ -4309,7 +4347,7 @@ packages: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) '@graphql-codegen/typescript': 4.1.2(graphql@16.10.0) '@graphql-codegen/visitor-plugin-common': 5.6.0(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) auto-bind: 4.0.0 graphql: 16.10.0 tslib: 2.6.3 @@ -4364,8 +4402,8 @@ packages: dependencies: '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) '@graphql-tools/optimize': 2.0.0(graphql@16.10.0) - '@graphql-tools/relay-operation-optimizer': 7.0.9(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/relay-operation-optimizer': 7.0.11(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 @@ -4378,25 +4416,25 @@ packages: - supports-color dev: true - /@graphql-hive/gateway-abort-signal-any@0.0.2(graphql@16.10.0): - resolution: {integrity: sha512-Tb8T2b2jzZ68MKUObAitJIHcgvGQbRL8rOBtFFpQho2DEFo7inz5hgj1A7fn/RTSBS73AOap1kC2yAL/mrT26Q==} + /@graphql-hive/gateway-abort-signal-any@0.0.3(graphql@16.10.0): + resolution: {integrity: sha512-TLYXRiK1DxkGXEdVrwbEtQ4JrsxJ4d/zXBeTzNzvuU+doTzot0wreFgrmmOq+bvqg/E6yMs1kOvBYz477gyMjA==} engines: {node: '>=18.0.0'} peerDependencies: - graphql: ^16.9.0 || ^17.0.0 + graphql: ^15.0.0 || ^16.9.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 dev: true - /@graphql-tools/apollo-engine-loader@8.0.10(graphql@16.10.0): - resolution: {integrity: sha512-fmcyvXPbUoyQo9DmpT8kjMki1dRgshBQ7ChbEUp3g+TmjzTqUiGuC068rCJhcV14p0SJQdRsYUoaOQsByH2EBQ==} + /@graphql-tools/apollo-engine-loader@8.0.12(graphql@16.10.0): + resolution: {integrity: sha512-oPGdfixQ1/AryEywVFqVcuTheRVUjClyS04r2UUszbgF3+BlUIleGYG6LhGhMwwb1P9E8csAiFwzzFQWPzJCSQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@whatwg-node/fetch': 0.10.1 graphql: 16.10.0 tslib: 2.8.1 @@ -4410,20 +4448,20 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) dataloader: 2.2.3 graphql: 16.10.0 tslib: 2.8.1 dev: true - /@graphql-tools/code-file-loader@8.1.11(graphql@16.10.0): - resolution: {integrity: sha512-zNi4u2hbEcbQ8P2IhuHxHgrtydfjIXWcyDpniw03mJPWfJJXR9PFc36+CbrXR10JHyaP6Xtu1QYzimKBXwehTw==} + /@graphql-tools/code-file-loader@8.1.13(graphql@16.10.0): + resolution: {integrity: sha512-zEj+DJhZ8vInnCDeEcyim+LJiROPERqTCZdwHGQXKZXqab1dpyqTiIU+rjWmNUJFrqrLY15gLzrhNSLmDGDdUA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.10(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/graphql-tag-pluck': 8.3.12(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) globby: 11.1.0 graphql: 16.10.0 tslib: 2.8.1 @@ -4439,9 +4477,9 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/batch-execute': 9.0.11(graphql@16.10.0) - '@graphql-tools/executor': 1.3.10(graphql@16.10.0) - '@graphql-tools/schema': 10.0.14(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/executor': 1.3.12(graphql@16.10.0) + '@graphql-tools/schema': 10.0.16(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@repeaterjs/repeater': 3.0.6 dataloader: 2.2.3 dset: 3.1.4 @@ -4467,7 +4505,7 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@envelop/core': 5.0.2 - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 dev: true @@ -4478,7 +4516,7 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/executor-common': 0.0.1(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@whatwg-node/disposablestack': 0.0.5 graphql: 16.10.0 graphql-ws: 5.16.0(graphql@16.10.0) @@ -4490,34 +4528,34 @@ packages: - utf-8-validate dev: true - /@graphql-tools/executor-http@1.2.3(@types/node@22.10.2)(graphql@16.10.0): - resolution: {integrity: sha512-Y/jogDe2uYl8LiIA6wUrbpuIvmJm0o+wvV8FOzbqePJ8/GeO/sGsiMSWRqdH5qVgttig0Zs2IqnG63DlQx1v9A==} + /@graphql-tools/executor-http@1.2.4(@types/node@22.10.5)(graphql@16.10.0): + resolution: {integrity: sha512-2WwymmIplDdzdPgs/qcqfqYfGGfpd626VejsREylTtyrBcURtyNfGw95sHOPo1O2NEXC5wJRN2o+GQBfC3Zy0g==} engines: {node: '>=18.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-hive/gateway-abort-signal-any': 0.0.2(graphql@16.10.0) + '@graphql-hive/gateway-abort-signal-any': 0.0.3(graphql@16.10.0) '@graphql-tools/executor-common': 0.0.1(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.5 '@whatwg-node/fetch': 0.10.1 extract-files: 11.0.0 graphql: 16.10.0 - meros: 1.3.0(@types/node@22.10.2) + meros: 1.3.0(@types/node@22.10.5) tslib: 2.8.1 value-or-promise: 1.0.12 transitivePeerDependencies: - '@types/node' dev: true - /@graphql-tools/executor-legacy-ws@1.1.8(graphql@16.10.0): - resolution: {integrity: sha512-m/9fQdYNeQcX+gEDNeS99QmVP2vZZnGgqf4u/kkccPRpRRSih1T005s649vjxmmjauPgcQRbH7dSrGziN2L36g==} + /@graphql-tools/executor-legacy-ws@1.1.10(graphql@16.10.0): + resolution: {integrity: sha512-ENyCAky0PrcP0dR5ZNIsCTww3CdOECBor/VuRtxAA+BffFhofNiOKcgR6MEsAOH2jHh0K2wwK38sgrW+D3GX3w==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@types/ws': 8.5.13 graphql: 16.10.0 isomorphic-ws: 5.0.0(ws@8.18.0) @@ -4528,13 +4566,13 @@ packages: - utf-8-validate dev: true - /@graphql-tools/executor@1.3.10(graphql@16.10.0): - resolution: {integrity: sha512-MoOpeo5k5R1Yk+ubQ8bzQCyauoKczxN6/GXoZcGSKSE/3mV35tgn1e0pjZC3exGGb7+UZc+wQjeXPRNyiM3Scg==} + /@graphql-tools/executor@1.3.12(graphql@16.10.0): + resolution: {integrity: sha512-FzLXZQJOZHB75SecYFOIEEHw/qcxkRFViw0lVqHpaL07c+GqDxv6VOto0FZCIiV9RgGdyRj3O8lXDCp9Cw1MbA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.5 @@ -4543,14 +4581,14 @@ packages: value-or-promise: 1.0.12 dev: true - /@graphql-tools/git-loader@8.0.15(graphql@16.10.0): - resolution: {integrity: sha512-LVjSc2nZGCx3dinxWZa1XnTwgBgxPkXl1si1AsTmaJcPRzsXh7G8ghe4tVJE6OoVgxZFJBKclK2XGiXfZvezLQ==} + /@graphql-tools/git-loader@8.0.17(graphql@16.10.0): + resolution: {integrity: sha512-UYrZmO0LRQecWQx4jpZdUYBLrP0uBGiQks2RGLDpAokqo60rneBxlivjJS3HfMaohhiYy27nU00Ahy/9iTn79Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.10(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/graphql-tag-pluck': 8.3.12(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 is-glob: 4.0.3 micromatch: 4.0.8 @@ -4560,16 +4598,16 @@ packages: - supports-color dev: true - /@graphql-tools/github-loader@8.0.10(@types/node@22.10.2)(graphql@16.10.0): - resolution: {integrity: sha512-YKYP6ifut6TcjksB9ILWuENqkuMNOYHHjRVWffdc2tuufMz4NUGV9w4ur+m96kwKFAp+Or0zJJ6sUfGRcv1c0Q==} + /@graphql-tools/github-loader@8.0.12(@types/node@22.10.5)(graphql@16.10.0): + resolution: {integrity: sha512-KKcDqqNBdNoGf4KL7q+20dbFxBkTl63uYxI9vlaKVHvnLd/JmuopQ4lkHCBj9UWP/AVyT6mlPlWwXSBg0lci0A==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/executor-http': 1.2.3(@types/node@22.10.2)(graphql@16.10.0) - '@graphql-tools/graphql-tag-pluck': 8.3.10(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/executor-http': 1.2.4(@types/node@22.10.5)(graphql@16.10.0) + '@graphql-tools/graphql-tag-pluck': 8.3.12(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@whatwg-node/fetch': 0.10.1 graphql: 16.10.0 tslib: 2.8.1 @@ -4580,22 +4618,22 @@ packages: - supports-color dev: true - /@graphql-tools/graphql-file-loader@8.0.9(graphql@16.10.0): - resolution: {integrity: sha512-ILkYm9GqzOrbE1ZKku9LpOWt0RXD5s5MI0bvWzhcPnraKhVrNDCqPzawO/msVuGSZD8cyHOiAmpT9KSwoj6wIA==} + /@graphql-tools/graphql-file-loader@8.0.11(graphql@16.10.0): + resolution: {integrity: sha512-Rn7241tY1JFsWzLIn2pji/JWNVHnL/1+CRjdd9M7DgI8Tj5GYsD60yDQ/gmaTzBvy4mQXeyW5y3+rf8Px0pGeQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/import': 7.0.9(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/import': 7.0.11(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) globby: 11.1.0 graphql: 16.10.0 tslib: 2.8.1 unixify: 1.0.0 dev: true - /@graphql-tools/graphql-tag-pluck@8.3.10(graphql@16.10.0): - resolution: {integrity: sha512-YGl7cvUMDozwCiNxFXzwZ1J08TESLBDiB8+KhMpYhMHlyW7aBh098q155bN8phydM99GdeUzQfFrW571zsqKKg==} + /@graphql-tools/graphql-tag-pluck@8.3.12(graphql@16.10.0): + resolution: {integrity: sha512-C6Ddg5RTz1WM96LYBtMuSEwN4QHfivK/vtbiAq9Soo6SoW1vGE4gzt0QS2FDVnDeB16er3h8YQZJ0xwm4pLnfA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -4605,46 +4643,46 @@ packages: '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) '@babel/traverse': 7.26.4 '@babel/types': 7.26.3 - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color dev: true - /@graphql-tools/import@7.0.9(graphql@16.10.0): - resolution: {integrity: sha512-nGmOAYMzQ0If5XdZCBeiPjT4TTWTcSIDXtFt/Hz2ZrOPSqN+2uD5X3Bq4qXjuG6U/rKXjpyEu4JBkrMuuJzW8w==} + /@graphql-tools/import@7.0.11(graphql@16.10.0): + resolution: {integrity: sha512-zUru+YhjLUpdyNnTKHXLBjV6bh+CpxVhxJr5mgsFT/Lk6fdpjkEyk+hzdgINuo5GbIulFa6KpLZUBoZsDARBpQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 resolve-from: 5.0.0 tslib: 2.8.1 dev: true - /@graphql-tools/json-file-loader@8.0.9(graphql@16.10.0): - resolution: {integrity: sha512-u/GtgnxlV81womSbbIRcICK1EERLfQYHW+cPp77PYUq9jrKoQMD185U3RVmay3FMOynVudqGhbxgIHBCNYOi0Q==} + /@graphql-tools/json-file-loader@8.0.11(graphql@16.10.0): + resolution: {integrity: sha512-xsfIbPyxyXWnu+GSC5HCw945Gt++b+5NeEvpunw2cK9myGhF2Bkb8N4QTNwWy+7kvOAKzNopBGqGV+x3uaQAZA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) globby: 11.1.0 graphql: 16.10.0 tslib: 2.8.1 unixify: 1.0.0 dev: true - /@graphql-tools/load@8.0.10(graphql@16.10.0): - resolution: {integrity: sha512-tBINLQb6CDGYdsjhaOi6kXslUIzZ7lBZqO2MC3F+3yMeDjKpE79I24zMl/voXqs7P+vS+vgZqrFL4Sn52T1Iiw==} + /@graphql-tools/load@8.0.12(graphql@16.10.0): + resolution: {integrity: sha512-ZFqerNO7at64N4GHT76k0AkwToHNHVkpAh1iFDRHvvFpESpZ3LDz9Y6cs54Sf6zhATecDuUSwbWZoEE2WIDExA==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 10.0.14(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/schema': 10.0.16(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 p-limit: 3.1.0 tslib: 2.8.1 @@ -4671,13 +4709,13 @@ packages: tslib: 2.8.1 dev: false - /@graphql-tools/merge@9.0.15(graphql@16.10.0): - resolution: {integrity: sha512-uzegRVd4Lq4QyBA6BL3kxDetZQ6GHwNCcRbR+6YFN7Kmea/PlRX7AfmIgdpBbaUBpsDR7dFlLZKFXmYxwodohw==} + /@graphql-tools/merge@9.0.17(graphql@16.10.0): + resolution: {integrity: sha512-3K4g8KKbIqfdmK0L5+VtZsqwAeElPkvT5ejiH+KEhn2wyKNCi4HYHxpQk8xbu+dSwLlm9Lhet1hylpo/mWCkuQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 dev: true @@ -4701,14 +4739,14 @@ packages: tslib: 2.6.3 dev: true - /@graphql-tools/prisma-loader@8.0.17(@types/node@22.10.2)(graphql@16.10.0): + /@graphql-tools/prisma-loader@8.0.17(@types/node@22.10.5)(graphql@16.10.0): resolution: {integrity: sha512-fnuTLeQhqRbA156pAyzJYN0KxCjKYRU5bz1q/SKOwElSnAU4k7/G1kyVsWLh7fneY78LoMNH5n+KlFV8iQlnyg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/url-loader': 8.0.21(@types/node@22.10.2)(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/url-loader': 8.0.23(@types/node@22.10.5)(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.10.1 chalk: 4.1.2 @@ -4746,14 +4784,14 @@ packages: - supports-color dev: true - /@graphql-tools/relay-operation-optimizer@7.0.9(graphql@16.10.0): - resolution: {integrity: sha512-VF+0kn+j1zAgVsN5abzoERDqx4vsGBkQ+5urhJV6gvRJTDm4sd72+ccZEhES7GPflxAgtYeL2fQNWgign5Ieag==} + /@graphql-tools/relay-operation-optimizer@7.0.11(graphql@16.10.0): + resolution: {integrity: sha512-98w541PwpVP/fmdE1RMH7CVQxTu8VojFaMHuFAw9hhM9r5aqmS0YXMHTTxnZVJRTTweBAjT+cWsig63wbhnnOQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/relay-compiler': 12.0.0(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 transitivePeerDependencies: @@ -4774,14 +4812,14 @@ packages: value-or-promise: 1.0.12 dev: false - /@graphql-tools/schema@10.0.14(graphql@16.10.0): - resolution: {integrity: sha512-BbttXi4xHocecYkOb2Ng/b9LQHfYPfk13gABE5iEOWX1GnJHnWr+2m81cUx9foocxEGaV+agXWUW804b4DcqqQ==} + /@graphql-tools/schema@10.0.16(graphql@16.10.0): + resolution: {integrity: sha512-G2zgb8hNg9Sx6Z2FSXm57ToNcwMls9A9cUm+EsCrnGGDsryzN5cONYePUpSGj5NCFivVp3o1FT5dg19P/1qeqQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 9.0.15(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/merge': 9.0.17(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 value-or-promise: 1.0.12 @@ -4799,17 +4837,17 @@ packages: value-or-promise: 1.0.12 dev: false - /@graphql-tools/url-loader@8.0.21(@types/node@22.10.2)(graphql@16.10.0): - resolution: {integrity: sha512-MAJB6aCAMj0Uj3Jp7wm/mb/TeMFe6hjueyCEA03UBjw5PdoptSWMxKpZA3eZCY99U0zNixrMRdfUFtLvxTqxHg==} + /@graphql-tools/url-loader@8.0.23(@types/node@22.10.5)(graphql@16.10.0): + resolution: {integrity: sha512-WSrsUkuXXInET7i+da/qEOYfEGVtsG58Kgl/1XpEatFSL5qL5NWbuS0Xadi+p1gF6sy+VhPfvncLqhRjGWyvyQ==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 '@graphql-tools/executor-graphql-ws': 1.3.7(graphql@16.10.0) - '@graphql-tools/executor-http': 1.2.3(@types/node@22.10.2)(graphql@16.10.0) - '@graphql-tools/executor-legacy-ws': 1.1.8(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/executor-http': 1.2.4(@types/node@22.10.5)(graphql@16.10.0) + '@graphql-tools/executor-legacy-ws': 1.1.10(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) '@graphql-tools/wrap': 10.0.27(graphql@16.10.0) '@types/ws': 8.5.13 '@whatwg-node/fetch': 0.10.1 @@ -4838,8 +4876,8 @@ packages: tslib: 2.8.1 dev: false - /@graphql-tools/utils@10.7.0(graphql@16.10.0): - resolution: {integrity: sha512-tCO0cZsnioXJBcN7geeER50PRZaKTq1zsSBg/aXe+u/ZkTiEyj6Hyu4Co39SNeG0mURoS2jhxsG03eYjTxloIg==} + /@graphql-tools/utils@10.7.2(graphql@16.10.0): + resolution: {integrity: sha512-Wn85S+hfkzfVFpXVrQ0hjnePa3p28aB6IdAGCiD1SqBCSMDRzL+OFEtyAyb30nV9Mqflqs9lCqjqlR2puG857Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -4876,8 +4914,8 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@graphql-tools/delegate': 10.2.9(graphql@16.10.0) - '@graphql-tools/schema': 10.0.14(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/schema': 10.0.16(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 dev: true @@ -4897,8 +4935,8 @@ packages: dependencies: '@hapi/hoek': 9.3.0 - /@hookform/resolvers@3.9.1(react-hook-form@7.54.2): - resolution: {integrity: sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==} + /@hookform/resolvers@3.10.0(react-hook-form@7.54.2): + resolution: {integrity: sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==} peerDependencies: react-hook-form: ^7.0.0 dependencies: @@ -4953,7 +4991,7 @@ packages: resolution: {integrity: sha512-V4PorMPhxwYiayWxycryun4Bjxn3PJrQqJGca+maQd61Q7s+/PUJAHWjwzVSVHxiher17zFHf4NwqB8J6bWj4w==} engines: {node: '>=18.0.0'} dependencies: - '@types/node': 18.19.68 + '@types/node': 18.19.70 extend: 3.0.2 ibm-cloud-sdk-core: 5.1.0 transitivePeerDependencies: @@ -5179,7 +5217,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -5200,14 +5238,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@22.10.5)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -5235,7 +5273,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 jest-mock: 29.7.0 dev: true @@ -5262,7 +5300,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.10.2 + '@types/node': 22.10.5 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -5295,7 +5333,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.10.2 + '@types/node': 22.10.5 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -5382,7 +5420,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -5439,8 +5477,8 @@ packages: resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} dev: false - /@langchain/community@0.3.20(@browserbasehq/stagehand@1.8.0)(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/core@0.3.26)(axios@1.7.4)(ibm-cloud-sdk-core@5.1.0)(openai@4.77.0)(ws@8.18.0): - resolution: {integrity: sha512-5XmguFWVrfYJ8s9kHPAmC1bTGfdVOKqzWVCoTolSXMVMDaVn+LVvCJxEedO01kU1y2AS4pUl5MDI9wssKS1Ehg==} + /@langchain/community@0.3.22(@browserbasehq/stagehand@1.8.0)(@ibm-cloud/watsonx-ai@1.3.0)(@langchain/core@0.3.27)(axios@1.7.4)(ibm-cloud-sdk-core@5.1.0)(openai@4.77.3)(ws@8.18.0): + resolution: {integrity: sha512-RGfmG3sfJhVpdFHyPwdQhrzGXdGoCoBh6zWB79/4WaMVU0q0Uo1Y/NeeslSxp778sWEeJkRcXZC73dR8lwOFjw==} engines: {node: '>=18'} peerDependencies: '@arcjet/redact': ^v1.0.0-alpha.23 @@ -5471,6 +5509,7 @@ packages: '@google-cloud/storage': ^6.10.1 || ^7.7.0 '@gradientai/nodejs-sdk': ^1.2.0 '@huggingface/inference': ^2.6.4 + '@huggingface/transformers': ^3.2.3 '@ibm-cloud/watsonx-ai': '*' '@lancedb/lancedb': ^0.12.0 '@langchain/core': '>=0.2.21 <0.4.0' @@ -5500,11 +5539,10 @@ packages: '@upstash/ratelimit': ^1.1.3 || ^2.0.3 '@upstash/redis': ^1.20.6 '@upstash/vector': ^1.1.1 - '@vercel/kv': ^0.2.3 - '@vercel/postgres': ^0.5.0 + '@vercel/kv': '*' + '@vercel/postgres': '*' '@writerai/writer-sdk': ^0.40.2 '@xata.io/client': ^0.28.0 - '@xenova/transformers': ^2.17.2 '@zilliz/milvus2-sdk-node': '>=2.3.5' apify-client: ^2.7.1 assemblyai: ^4.6.0 @@ -5566,6 +5604,7 @@ packages: voy-search: 0.6.2 weaviate-ts-client: '*' web-auth-library: ^1.0.3 + word-extractor: '*' ws: ^8.14.2 youtube-transcript: ^1.0.6 youtubei.js: ^9.1.0 @@ -5624,6 +5663,8 @@ packages: optional: true '@huggingface/inference': optional: true + '@huggingface/transformers': + optional: true '@lancedb/lancedb': optional: true '@layerup/layerup-security': @@ -5686,8 +5727,6 @@ packages: optional: true '@xata.io/client': optional: true - '@xenova/transformers': - optional: true '@zilliz/milvus2-sdk-node': optional: true apify-client: @@ -5806,6 +5845,8 @@ packages: optional: true web-auth-library: optional: true + word-extractor: + optional: true ws: optional: true youtube-transcript: @@ -5813,18 +5854,18 @@ packages: youtubei.js: optional: true dependencies: - '@browserbasehq/stagehand': 1.8.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.0)(zod@3.24.1) + '@browserbasehq/stagehand': 1.8.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.77.3)(zod@3.24.1) '@ibm-cloud/watsonx-ai': 1.3.0 - '@langchain/core': 0.3.26(openai@4.77.0) - '@langchain/openai': 0.3.16(@langchain/core@0.3.26) + '@langchain/core': 0.3.27(openai@4.77.3) + '@langchain/openai': 0.3.16(@langchain/core@0.3.27) binary-extensions: 2.3.0 expr-eval: 2.0.2 flat: 5.0.2 ibm-cloud-sdk-core: 5.1.0 js-yaml: 4.1.0 - langchain: 0.3.8(@langchain/core@0.3.26)(axios@1.7.4)(openai@4.77.0) - langsmith: 0.2.14(openai@4.77.0) - openai: 4.77.0(zod@3.24.1) + langchain: 0.3.10(@langchain/core@0.3.27)(axios@1.7.4)(openai@4.77.3) + langsmith: 0.2.14(openai@4.77.3) + openai: 4.77.3(zod@3.24.1) uuid: 10.0.0 ws: 8.18.0 zod: 3.24.1 @@ -5832,9 +5873,11 @@ packages: transitivePeerDependencies: - '@langchain/anthropic' - '@langchain/aws' + - '@langchain/cerebras' - '@langchain/cohere' - '@langchain/google-genai' - '@langchain/google-vertexai' + - '@langchain/google-vertexai-web' - '@langchain/groq' - '@langchain/mistralai' - '@langchain/ollama' @@ -5844,16 +5887,16 @@ packages: - peggy dev: false - /@langchain/core@0.3.26(openai@4.77.0): - resolution: {integrity: sha512-6RUQHEp8wv+JwtYIIEBYBzbLlcAQZFc7EDOgAM0ukExjh9HiXoJzoWpgMRRCrr/koIbtwXPJUqBprZK1I1CXHQ==} + /@langchain/core@0.3.27(openai@4.77.3): + resolution: {integrity: sha512-jtJKbJWB1NPU1YvtrExOB2rumvUFgkJwlWGxyjSIV9A6zcLVmUbcZGV8fCSuXgl5bbzOIQLJ1xcLYQmbW9TkTg==} engines: {node: '>=18'} dependencies: - '@cfworker/json-schema': 4.0.3 + '@cfworker/json-schema': 4.1.0 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.16 - langsmith: 0.2.14(openai@4.77.0) + langsmith: 0.2.14(openai@4.77.3) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -5864,28 +5907,28 @@ packages: - openai dev: false - /@langchain/openai@0.3.16(@langchain/core@0.3.26): + /@langchain/openai@0.3.16(@langchain/core@0.3.27): resolution: {integrity: sha512-Om9HRlTeI0Ou6D4pfxbWHop4WGfkCdV/7v1W/+Jr7NSf0BNoA9jk5GqGms8ZtOYSGgPvizDu3i0TrM3B4cN4NA==} engines: {node: '>=18'} peerDependencies: '@langchain/core': '>=0.2.26 <0.4.0' dependencies: - '@langchain/core': 0.3.26(openai@4.77.0) + '@langchain/core': 0.3.27(openai@4.77.3) js-tiktoken: 1.0.16 - openai: 4.77.0(zod@3.24.1) + openai: 4.77.3(zod@3.24.1) zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) transitivePeerDependencies: - encoding dev: false - /@langchain/textsplitters@0.1.0(@langchain/core@0.3.26): + /@langchain/textsplitters@0.1.0(@langchain/core@0.3.27): resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==} engines: {node: '>=18'} peerDependencies: '@langchain/core': '>=0.2.21 <0.4.0' dependencies: - '@langchain/core': 0.3.26(openai@4.77.0) + '@langchain/core': 0.3.27(openai@4.77.3) js-tiktoken: 1.0.16 dev: false @@ -5964,7 +6007,7 @@ packages: react: 18.3.1 dev: false - /@nestjs/apollo@12.2.2(@apollo/server@4.11.2)(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(@nestjs/graphql@12.2.2)(graphql@16.10.0): + /@nestjs/apollo@12.2.2(@apollo/server@4.11.3)(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(@nestjs/graphql@12.2.2)(graphql@16.10.0): resolution: {integrity: sha512-gsDqSfsmTSvF0k3XaRESRgM3uE/YFO+59txCsq7T1EadDOVOuoF3zVQiFmi6D50Rlnqohqs63qjjf46mgiiXgQ==} peerDependencies: '@apollo/gateway': ^2.0.0 @@ -5983,8 +6026,8 @@ packages: '@as-integrations/fastify': optional: true dependencies: - '@apollo/server': 4.11.2(graphql@16.10.0) - '@apollo/server-plugin-landing-page-graphql-playground': 4.0.0(@apollo/server@4.11.2) + '@apollo/server': 4.11.3(graphql@16.10.0) + '@apollo/server-plugin-landing-page-graphql-playground': 4.0.0(@apollo/server@4.11.3) '@nestjs/common': 10.4.15(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.15(@nestjs/common@10.4.15)(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/graphql': 12.2.2(@nestjs/common@10.4.15)(@nestjs/core@10.4.15)(class-validator@0.14.1)(graphql@16.10.0)(reflect-metadata@0.2.2) @@ -6513,9 +6556,9 @@ packages: dependencies: '@octokit/auth-app': 7.1.3 '@octokit/auth-unauthenticated': 6.1.0 - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.3 '@octokit/oauth-app': 7.1.4 - '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.2) + '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.3) '@octokit/types': 13.6.2 '@octokit/webhooks': 13.4.1 dev: false @@ -6538,18 +6581,18 @@ packages: resolution: {integrity: sha512-5UtmxXAvU2wfcHIPPDWzVSAWXVJzG3NWsxb7zCFplCWEmMCArSZV0UQu5jw5goLQXbFyOr5onzEH37UJB3zQQg==} engines: {node: '>= 18'} dependencies: - '@octokit/auth-oauth-device': 7.1.1 + '@octokit/auth-oauth-device': 7.1.2 '@octokit/auth-oauth-user': 5.1.1 '@octokit/request': 9.1.4 '@octokit/types': 13.6.2 universal-user-agent: 7.0.2 dev: false - /@octokit/auth-oauth-device@7.1.1: - resolution: {integrity: sha512-HWl8lYueHonuyjrKKIup/1tiy0xcmQCdq5ikvMO1YwkNNkxb6DXfrPjrMYItNLyCP/o2H87WuijuE+SlBTT8eg==} + /@octokit/auth-oauth-device@7.1.2: + resolution: {integrity: sha512-gTOIzDeV36OhVfxCl69FmvJix7tJIiU6dlxuzLVAzle7fYfO8UDyddr9B+o4CFQVaMBLMGZ9ak2CWMYcGeZnPw==} engines: {node: '>= 18'} dependencies: - '@octokit/oauth-methods': 5.1.2 + '@octokit/oauth-methods': 5.1.3 '@octokit/request': 9.1.4 '@octokit/types': 13.6.2 universal-user-agent: 7.0.2 @@ -6559,8 +6602,8 @@ packages: resolution: {integrity: sha512-rRkMz0ErOppdvEfnemHJXgZ9vTPhBuC6yASeFaB7I2yLMd7QpjfrL1mnvRPlyKo+M6eeLxrKanXJ9Qte29SRsw==} engines: {node: '>= 18'} dependencies: - '@octokit/auth-oauth-device': 7.1.1 - '@octokit/oauth-methods': 5.1.2 + '@octokit/auth-oauth-device': 7.1.2 + '@octokit/oauth-methods': 5.1.3 '@octokit/request': 9.1.4 '@octokit/types': 13.6.2 universal-user-agent: 7.0.2 @@ -6579,12 +6622,12 @@ packages: '@octokit/types': 13.6.2 dev: false - /@octokit/core@6.1.2: - resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==} + /@octokit/core@6.1.3: + resolution: {integrity: sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==} engines: {node: '>= 18'} dependencies: '@octokit/auth-token': 5.1.1 - '@octokit/graphql': 8.1.1 + '@octokit/graphql': 8.1.2 '@octokit/request': 9.1.4 '@octokit/request-error': 6.1.6 '@octokit/types': 13.6.2 @@ -6592,16 +6635,16 @@ packages: universal-user-agent: 7.0.2 dev: false - /@octokit/endpoint@10.1.1: - resolution: {integrity: sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==} + /@octokit/endpoint@10.1.2: + resolution: {integrity: sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==} engines: {node: '>= 18'} dependencies: '@octokit/types': 13.6.2 universal-user-agent: 7.0.2 dev: false - /@octokit/graphql@8.1.1: - resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==} + /@octokit/graphql@8.1.2: + resolution: {integrity: sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==} engines: {node: '>= 18'} dependencies: '@octokit/request': 9.1.4 @@ -6616,10 +6659,10 @@ packages: '@octokit/auth-oauth-app': 8.1.1 '@octokit/auth-oauth-user': 5.1.1 '@octokit/auth-unauthenticated': 6.1.0 - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.3 '@octokit/oauth-authorization-url': 7.1.1 - '@octokit/oauth-methods': 5.1.2 - '@types/aws-lambda': 8.10.146 + '@octokit/oauth-methods': 5.1.3 + '@types/aws-lambda': 8.10.147 universal-user-agent: 7.0.2 dev: false @@ -6628,8 +6671,8 @@ packages: engines: {node: '>= 18'} dev: false - /@octokit/oauth-methods@5.1.2: - resolution: {integrity: sha512-C5lglRD+sBlbrhCUTxgJAFjWgJlmTx5bQ7Ch0+2uqRjYv7Cfb5xpX4WuSC9UgQna3sqRGBL9EImX9PvTpMaQ7g==} + /@octokit/oauth-methods@5.1.3: + resolution: {integrity: sha512-M+bDBi5H8FnH0xhCTg0m9hvcnppdDnxUqbZyOkxlLblKpLAR+eT2nbDPvJDp0eLrvJWA1I8OX0KHf/sBMQARRA==} engines: {node: '>= 18'} dependencies: '@octokit/oauth-authorization-url': 7.1.1 @@ -6646,54 +6689,54 @@ packages: resolution: {integrity: sha512-i3h1b5zpGSB39ffBbYdSGuAd0NhBAwPyA3QV3LYi/lx4lsbZiu7u2UHgXVUR6EpvOI8REOuVh1DZTRfHoJDvuQ==} dev: false - /@octokit/plugin-paginate-graphql@5.2.4(@octokit/core@6.1.2): + /@octokit/plugin-paginate-graphql@5.2.4(@octokit/core@6.1.3): resolution: {integrity: sha512-pLZES1jWaOynXKHOqdnwZ5ULeVR6tVVCMm+AUbp0htdcyXDU95WbkYdU4R2ej1wKj5Tu94Mee2Ne0PjPO9cCyA==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' dependencies: - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.3 dev: false - /@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.2): + /@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.3): resolution: {integrity: sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' dependencies: - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.3 '@octokit/types': 13.6.2 dev: false - /@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.2): + /@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.3): resolution: {integrity: sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' dependencies: - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.3 '@octokit/types': 13.6.2 dev: false - /@octokit/plugin-retry@7.1.2(@octokit/core@6.1.2): + /@octokit/plugin-retry@7.1.2(@octokit/core@6.1.3): resolution: {integrity: sha512-XOWnPpH2kJ5VTwozsxGurw+svB2e61aWlmk5EVIYZPwFK5F9h4cyPyj9CIKRyMXMHSwpIsI3mPOdpMmrRhe7UQ==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' dependencies: - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.3 '@octokit/request-error': 6.1.6 '@octokit/types': 13.6.2 bottleneck: 2.19.5 dev: false - /@octokit/plugin-throttling@9.3.2(@octokit/core@6.1.2): + /@octokit/plugin-throttling@9.3.2(@octokit/core@6.1.3): resolution: {integrity: sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': ^6.0.0 dependencies: - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.3 '@octokit/types': 13.6.2 bottleneck: 2.19.5 dev: false @@ -6709,10 +6752,10 @@ packages: resolution: {integrity: sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==} engines: {node: '>= 18'} dependencies: - '@octokit/endpoint': 10.1.1 + '@octokit/endpoint': 10.1.2 '@octokit/request-error': 6.1.6 '@octokit/types': 13.6.2 - fast-content-type-parse: 2.0.0 + fast-content-type-parse: 2.0.1 universal-user-agent: 7.0.2 dev: false @@ -8082,7 +8125,7 @@ packages: /@ts-morph/common@0.12.3: resolution: {integrity: sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w==} dependencies: - fast-glob: 3.3.2 + fast-glob: 3.3.3 minimatch: 3.1.2 mkdirp: 1.0.4 path-browserify: 1.0.1 @@ -8109,8 +8152,8 @@ packages: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} dev: true - /@types/aws-lambda@8.10.146: - resolution: {integrity: sha512-3BaDXYTh0e6UCJYL/jwV/3+GRslSc08toAiZSmleYtkAUyV5rtvdPYxrG/88uqvTuT6sb27WE9OS90ZNTIuQ0g==} + /@types/aws-lambda@8.10.147: + resolution: {integrity: sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==} dev: false /@types/babel__core@7.20.5: @@ -8145,32 +8188,32 @@ packages: /@types/bcrypt@5.0.2: resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 dev: false /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.17.10 + '@types/node': 20.17.12 /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 dev: false /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 5.0.2 - '@types/node': 22.10.2 + '@types/express-serve-static-core': 5.0.3 + '@types/node': 22.10.5 dev: false /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 /@types/cookiejar@2.1.5: resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} @@ -8208,15 +8251,15 @@ packages: /@types/express-serve-static-core@4.19.6: resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - /@types/express-serve-static-core@5.0.2: - resolution: {integrity: sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==} + /@types/express-serve-static-core@5.0.3: + resolution: {integrity: sha512-JEhMNwUJt7bw728CydvYzntD0XJeTmDnvwLlbfbAhE7Tbslm/ax6bdIiUwTgeVlZTsJQPwZwKpAkyDtIjsvx3g==} dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -8233,7 +8276,7 @@ packages: resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 5.0.2 + '@types/express-serve-static-core': 5.0.3 '@types/qs': 6.9.17 '@types/serve-static': 1.15.7 dev: true @@ -8242,13 +8285,13 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.17.10 + '@types/node': 20.17.12 dev: false /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 dev: true /@types/gtag.js@0.0.12: @@ -8283,7 +8326,7 @@ packages: /@types/http-proxy@1.17.15: resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 dev: false /@types/istanbul-lib-coverage@2.0.6: @@ -8313,7 +8356,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 dev: true @@ -8328,13 +8371,13 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 dev: false /@types/jsonwebtoken@9.0.5: resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 dev: false /@types/long@4.0.2: @@ -8362,38 +8405,38 @@ packages: /@types/node-fetch@2.6.12: resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 form-data: 4.0.1 /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 dev: false /@types/node@10.14.22: resolution: {integrity: sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw==} dev: false - /@types/node@16.18.122: - resolution: {integrity: sha512-rF6rUBS80n4oK16EW8nE75U+9fw0SSUgoPtWSvHhPXdT7itbvmS7UjB/jyM8i3AkvI6yeSM5qCwo+xN0npGDHg==} + /@types/node@16.18.123: + resolution: {integrity: sha512-/n7I6V/4agSpJtFDKKFEa763Hc1z3hmvchobHS1TisCOTKD5nxq8NJ2iK7SRIMYL276Q9mgWOx2AWp5n2XI6eA==} /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: false - /@types/node@18.19.68: - resolution: {integrity: sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==} + /@types/node@18.19.70: + resolution: {integrity: sha512-RE+K0+KZoEpDUbGGctnGdkrLFwi1eYKTlIHNl2Um98mUkGsm1u2Ff6Ltd0e8DktTtC98uy7rSj+hO8t/QuLoVQ==} dependencies: undici-types: 5.26.5 - /@types/node@20.17.10: - resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} + /@types/node@20.17.12: + resolution: {integrity: sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw==} dependencies: undici-types: 6.19.8 - /@types/node@22.10.2: - resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} + /@types/node@22.10.5: + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} dependencies: undici-types: 6.20.0 @@ -8457,14 +8500,14 @@ packages: /@types/sax@1.2.7: resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 dev: false /@types/send@0.17.4: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.17.10 + '@types/node': 20.17.12 /@types/serve-index@1.9.4: resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} @@ -8476,13 +8519,13 @@ packages: resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/send': 0.17.4 /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 dev: false /@types/stack-utils@2.0.3: @@ -8498,7 +8541,7 @@ packages: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 20.17.10 + '@types/node': 20.17.12 form-data: 4.0.1 dev: true @@ -8531,7 +8574,7 @@ packages: /@types/ws@8.5.13: resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -8541,8 +8584,8 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2)(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} + /@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1)(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -8550,23 +8593,23 @@ packages: typescript: '>=4.8.4 <5.8.0' dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.18.2(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 8.18.2(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/parser': 8.19.1(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/type-utils': 8.19.1(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 8.19.1(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.19.1 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.6.2) + ts-api-utils: 2.0.0(typescript@5.6.2) typescript: 5.6.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2)(eslint@8.57.1)(typescript@5.6.3): - resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} + /@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1)(eslint@8.57.1)(typescript@5.6.3): + resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -8574,32 +8617,32 @@ packages: typescript: '>=4.8.4 <5.8.0' dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.18.2(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/utils': 8.18.2(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/parser': 8.19.1(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/type-utils': 8.19.1(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/utils': 8.19.1(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.19.1 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.6.3) + ts-api-utils: 2.0.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} + /@typescript-eslint/parser@8.19.1(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' dependencies: - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0(supports-color@5.5.0) eslint: 8.57.1 typescript: 5.6.2 @@ -8607,17 +8650,17 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.6.3): - resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} + /@typescript-eslint/parser@8.19.1(eslint@8.57.1)(typescript@5.6.3): + resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' dependencies: - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0(supports-color@5.5.0) eslint: 8.57.1 typescript: 5.6.3 @@ -8625,130 +8668,130 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@8.18.2: - resolution: {integrity: sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==} + /@typescript-eslint/scope-manager@8.19.1: + resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 dev: true - /@typescript-eslint/type-utils@8.18.2(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} + /@typescript-eslint/type-utils@8.19.1(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' dependencies: - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.2) - '@typescript-eslint/utils': 8.18.2(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.2) + '@typescript-eslint/utils': 8.19.1(eslint@8.57.1)(typescript@5.6.2) debug: 4.4.0(supports-color@5.5.0) eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.6.2) + ts-api-utils: 2.0.0(typescript@5.6.2) typescript: 5.6.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@8.18.2(eslint@8.57.1)(typescript@5.6.3): - resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} + /@typescript-eslint/type-utils@8.19.1(eslint@8.57.1)(typescript@5.6.3): + resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' dependencies: - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) - '@typescript-eslint/utils': 8.18.2(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.3) + '@typescript-eslint/utils': 8.19.1(eslint@8.57.1)(typescript@5.6.3) debug: 4.4.0(supports-color@5.5.0) eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.6.3) + ts-api-utils: 2.0.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@8.18.2: - resolution: {integrity: sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==} + /@typescript-eslint/types@8.19.1: + resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true - /@typescript-eslint/typescript-estree@8.18.2(typescript@5.6.2): - resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} + /@typescript-eslint/typescript-estree@8.19.1(typescript@5.6.2): + resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' dependencies: - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0(supports-color@5.5.0) - fast-glob: 3.3.2 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.6.2) + ts-api-utils: 2.0.0(typescript@5.6.2) typescript: 5.6.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@8.18.2(typescript@5.6.3): - resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} + /@typescript-eslint/typescript-estree@8.19.1(typescript@5.6.3): + resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' dependencies: - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/visitor-keys': 8.18.2 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/visitor-keys': 8.19.1 debug: 4.4.0(supports-color@5.5.0) - fast-glob: 3.3.2 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.6.3) + ts-api-utils: 2.0.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@8.18.2(eslint@8.57.1)(typescript@5.6.2): - resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} + /@typescript-eslint/utils@8.19.1(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.2) eslint: 8.57.1 typescript: 5.6.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@8.18.2(eslint@8.57.1)(typescript@5.6.3): - resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} + /@typescript-eslint/utils@8.19.1(eslint@8.57.1)(typescript@5.6.3): + resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.19.1 + '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.6.3) eslint: 8.57.1 typescript: 5.6.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/visitor-keys@8.18.2: - resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} + /@typescript-eslint/visitor-keys@8.19.1: + resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.18.2 + '@typescript-eslint/types': 8.19.1 eslint-visitor-keys: 4.2.0 dev: true @@ -9093,7 +9136,7 @@ packages: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.3 + fast-uri: 3.0.5 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -9284,9 +9327,9 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 is-string: 1.1.1 dev: true @@ -9304,7 +9347,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 @@ -9316,7 +9359,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 @@ -9328,7 +9371,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 dev: true @@ -9338,7 +9381,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 dev: true @@ -9348,7 +9391,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 dev: true @@ -9360,9 +9403,9 @@ packages: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 is-array-buffer: 3.0.5 dev: true @@ -9773,7 +9816,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001690 - electron-to-chromium: 1.5.76 + electron-to-chromium: 1.5.77 node-releases: 2.0.19 update-browserslist-db: 1.1.1(browserslist@4.24.3) @@ -9884,7 +9927,7 @@ packages: dependencies: call-bind-apply-helpers: 1.0.1 es-define-property: 1.0.1 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 set-function-length: 1.2.2 /call-bound@1.0.3: @@ -9892,7 +9935,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind-apply-helpers: 1.0.1 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -10055,7 +10098,7 @@ packages: css-what: 6.1.0 domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.2.1 + domutils: 3.2.2 dev: false /cheerio@1.0.0-rc.12: @@ -10065,7 +10108,7 @@ packages: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 - domutils: 3.2.1 + domutils: 3.2.2 htmlparser2: 8.0.2 parse5: 7.2.1 parse5-htmlparser2-tree-adapter: 7.1.0 @@ -10522,7 +10565,7 @@ packages: peerDependencies: webpack: ^5.1.0 dependencies: - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob-parent: 6.0.2 globby: 13.2.2 normalize-path: 3.0.0 @@ -10610,7 +10653,7 @@ packages: typescript: 5.7.2 dev: true - /create-jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.17.12)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -10619,7 +10662,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.17.12)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10629,7 +10672,7 @@ packages: - ts-node dev: true - /create-jest@29.7.0(@types/node@22.10.2)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@22.10.5)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -10638,7 +10681,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@22.10.5)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10807,7 +10850,7 @@ packages: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 - domutils: 3.2.1 + domutils: 3.2.2 nth-check: 2.1.1 dev: false @@ -11338,8 +11381,8 @@ packages: domhandler: 4.3.1 dev: false - /domutils@3.2.1: - resolution: {integrity: sha512-xWXmuRnN9OMP6ptPd2+H0cCbcYBULa5YDTbMm/2lvkWvNA3O4wcW+GvzooqBuNM8yy6pl3VIAeJTUUWUbfI5Fw==} + /domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -11409,8 +11452,8 @@ packages: jake: 10.9.2 dev: true - /electron-to-chromium@1.5.76: - resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} + /electron-to-chromium@1.5.77: + resolution: {integrity: sha512-AnJSrt5JpRVgY6dgd5yccguLc5A7oMSF0Kt3fcW+Hp5WTuFbl5upeSFZbMZYy2o7jhmIhU8Ekrd82GhyXUqUUg==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -11509,8 +11552,8 @@ packages: dependencies: is-arrayish: 0.2.1 - /es-abstract@1.23.8: - resolution: {integrity: sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==} + /es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.2 @@ -11524,10 +11567,11 @@ packages: es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 get-symbol-description: 1.1.0 globalthis: 1.0.4 gopd: 1.2.0 @@ -11549,10 +11593,11 @@ packages: object-keys: 1.1.1 object.assign: 4.1.7 own-keys: 1.0.1 - regexp.prototype.flags: 1.5.3 + regexp.prototype.flags: 1.5.4 safe-array-concat: 1.1.3 safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 + set-proto: 1.0.0 string.prototype.trim: 1.2.10 string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 @@ -11579,18 +11624,18 @@ packages: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 globalthis: 1.0.4 gopd: 1.2.0 has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 internal-slot: 1.1.0 - iterator.prototype: 1.1.4 + iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 dev: true @@ -11603,11 +11648,12 @@ packages: dependencies: es-errors: 1.3.0 - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + /es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.6 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 has-tostringtag: 1.0.2 hasown: 2.0.2 dev: true @@ -11696,12 +11742,12 @@ packages: dependencies: '@next/eslint-plugin-next': 14.2.13 '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2)(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/parser': 8.18.2(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1)(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.19.1(eslint@8.57.1)(typescript@5.6.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.2)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.1)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.3(eslint@8.57.1) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.57.1) @@ -11748,8 +11794,8 @@ packages: debug: 4.4.0(supports-color@5.5.0) enhanced-resolve: 5.18.0 eslint: 8.57.1 - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.2)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) - fast-glob: 3.3.2 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.1)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) + fast-glob: 3.3.3 get-tsconfig: 4.8.1 is-bun-module: 1.3.0 is-glob: 4.0.3 @@ -11758,7 +11804,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1): + /eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1): resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: @@ -11779,7 +11825,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 8.18.2(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.19.1(eslint@8.57.1)(typescript@5.6.3) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -11788,7 +11834,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.2)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1): + /eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.1)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1): resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: @@ -11799,7 +11845,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 8.18.2(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 8.19.1(eslint@8.57.1)(typescript@5.6.3) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.3 @@ -11808,7 +11854,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -12081,7 +12127,7 @@ packages: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 require-like: 0.1.2 dev: false @@ -12206,8 +12252,8 @@ packages: engines: {node: ^12.20 || >= 14.13} dev: true - /fast-content-type-parse@2.0.0: - resolution: {integrity: sha512-fCqg/6Sps8tqk8p+kqyKqYfOF0VjPNYrqpLiqNl0RBKmD80B080AJWVV6EkSkscjToNExcXg1+Mfzftrx6+iSA==} + /fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} dev: false /fast-decode-uri-component@1.0.1: @@ -12230,6 +12276,17 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 + dev: false + + /fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -12246,8 +12303,17 @@ packages: /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - /fast-uri@3.0.3: - resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + /fast-uri@3.0.5: + resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} + + /fastembed@1.14.1: + resolution: {integrity: sha512-Y14v+FWZwjNUpQ7mRGYu4N5yF+hZkF7zqzPWzzLbwdIEtYsHy0DSpiVJ+Fg6Oi1fQjrBKASQt0hdSMSjw1/Wtw==} + dependencies: + '@anush008/tokenizers': 0.0.0 + onnxruntime-node: 1.15.1 + progress: 2.0.3 + tar: 6.2.1 + dev: false /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} @@ -12597,8 +12663,8 @@ packages: /fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - /framer-motion@11.15.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-MLk8IvZntxOMg7lDBLw2qgTHHv664bYoYmnFTmE0Gm/FW67aOJk0WM3ctMcG+Xhcv+vh5uyyXwxvxhSeJzSe+w==} + /framer-motion@11.16.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-oL2AWqLQuw0+CNEUa0sz3mWC/n3i147CckvpQn8bLRs30b+HxTxlRi0YR2FpHHhAbWV7DKjNdHU42KHLfBWh/g==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -12611,8 +12677,8 @@ packages: react-dom: optional: true dependencies: - motion-dom: 11.14.3 - motion-utils: 11.14.3 + motion-dom: 11.16.0 + motion-utils: 11.16.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -12745,16 +12811,16 @@ packages: engines: {node: '>=18'} dev: false - /get-intrinsic@1.2.6: - resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} + /get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} dependencies: call-bind-apply-helpers: 1.0.1 - dunder-proto: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.0.0 function-bind: 1.1.2 + get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 hasown: 2.0.2 @@ -12774,6 +12840,13 @@ packages: engines: {node: '>=8.0.0'} dev: true + /get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.0.0 + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -12784,7 +12857,7 @@ packages: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 dev: true /get-tsconfig@4.8.1: @@ -12902,7 +12975,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -12912,7 +12985,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -12949,7 +13022,7 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /graphql-config@5.1.3(@types/node@22.10.2)(graphql@16.10.0)(typescript@5.6.3): + /graphql-config@5.1.3(@types/node@22.10.5)(graphql@16.10.0)(typescript@5.6.3): resolution: {integrity: sha512-RBhejsPjrNSuwtckRlilWzLVt2j8itl74W9Gke1KejDTz7oaA5kVd6wRn9zK9TS5mcmIYGxf7zN7a1ORMdxp1Q==} engines: {node: '>= 16.0.0'} peerDependencies: @@ -12959,12 +13032,12 @@ packages: cosmiconfig-toml-loader: optional: true dependencies: - '@graphql-tools/graphql-file-loader': 8.0.9(graphql@16.10.0) - '@graphql-tools/json-file-loader': 8.0.9(graphql@16.10.0) - '@graphql-tools/load': 8.0.10(graphql@16.10.0) - '@graphql-tools/merge': 9.0.15(graphql@16.10.0) - '@graphql-tools/url-loader': 8.0.21(@types/node@22.10.2)(graphql@16.10.0) - '@graphql-tools/utils': 10.7.0(graphql@16.10.0) + '@graphql-tools/graphql-file-loader': 8.0.11(graphql@16.10.0) + '@graphql-tools/json-file-loader': 8.0.11(graphql@16.10.0) + '@graphql-tools/load': 8.0.12(graphql@16.10.0) + '@graphql-tools/merge': 9.0.17(graphql@16.10.0) + '@graphql-tools/url-loader': 8.0.23(@types/node@22.10.5)(graphql@16.10.0) + '@graphql-tools/utils': 10.7.2(graphql@16.10.0) cosmiconfig: 8.3.6(typescript@5.6.3) graphql: 16.10.0 jiti: 2.4.2 @@ -13143,8 +13216,8 @@ packages: zwitch: 2.0.4 dev: false - /hast-util-to-estree@3.1.0: - resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} + /hast-util-to-estree@3.1.1: + resolution: {integrity: sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ==} dependencies: '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 @@ -13159,7 +13232,7 @@ packages: mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 + style-to-object: 1.0.8 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: @@ -13363,7 +13436,7 @@ packages: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.2.1 + domutils: 3.2.2 entities: 4.5.0 dev: false @@ -13638,9 +13711,6 @@ packages: engines: {node: '>=10'} dev: false - /inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - /inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -13790,7 +13860,7 @@ packages: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 dev: true /is-arrayish@0.2.1: @@ -13800,11 +13870,14 @@ packages: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} dev: false - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + /is-async-function@2.1.0: + resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} engines: {node: '>= 0.4'} dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 dev: true /is-bigint@1.1.0: @@ -13857,7 +13930,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bound: 1.0.3 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 is-typed-array: 1.1.15 dev: true @@ -13914,11 +13987,14 @@ packages: engines: {node: '>=6'} dev: true - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + /is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} dependencies: + call-bound: 1.0.3 + get-proto: 1.0.1 has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 dev: true /is-glob@4.0.3: @@ -14140,7 +14216,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bound: 1.0.3 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 dev: true /is-windows@1.0.2: @@ -14262,15 +14338,15 @@ packages: resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} engines: {node: '>=6'} - /iterator.prototype@1.1.4: - resolution: {integrity: sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==} + /iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 has-symbols: 1.1.0 - reflect.getprototypeof: 1.0.9 set-function-name: 2.0.2 dev: true @@ -14318,7 +14394,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -14339,7 +14415,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.17.10)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.17.12)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -14353,10 +14429,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.17.12)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.17.12)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -14367,7 +14443,7 @@ packages: - ts-node dev: true - /jest-cli@29.7.0(@types/node@22.10.2)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@22.10.5)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -14381,10 +14457,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@22.10.5)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@22.10.5)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -14395,7 +14471,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.17.10)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.17.12)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -14410,7 +14486,7 @@ packages: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.10 + '@types/node': 20.17.12 babel-jest: 29.7.0(@babel/core@7.26.0) chalk: 4.1.2 ci-info: 3.9.0 @@ -14430,13 +14506,13 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.17.10)(typescript@5.6.3) + ts-node: 10.9.2(@types/node@20.17.12)(typescript@5.6.3) transitivePeerDependencies: - babel-plugin-macros - supports-color dev: true - /jest-config@29.7.0(@types/node@22.10.2)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@22.10.5)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -14451,7 +14527,7 @@ packages: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 babel-jest: 29.7.0(@babel/core@7.26.0) chalk: 4.1.2 ci-info: 3.9.0 @@ -14471,7 +14547,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.17.10)(typescript@5.6.3) + ts-node: 10.9.2(@types/node@20.17.12)(typescript@5.6.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -14518,7 +14594,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.10.2 + '@types/node': 22.10.5 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -14535,7 +14611,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -14551,7 +14627,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.10.2 + '@types/node': 22.10.5 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -14602,7 +14678,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 jest-util: 29.7.0 dev: true @@ -14657,7 +14733,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -14688,7 +14764,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.10 + '@types/node': 22.10.5 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -14740,7 +14816,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.10 + '@types/node': 20.17.12 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -14764,7 +14840,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.2 + '@types/node': 22.10.5 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -14776,7 +14852,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.18.122 + '@types/node': 16.18.123 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -14784,12 +14860,12 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.17.12)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -14802,7 +14878,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.17.12)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -14810,7 +14886,7 @@ packages: - ts-node dev: true - /jest@29.7.0(@types/node@22.10.2)(ts-node@10.9.2): + /jest@29.7.0(@types/node@22.10.5)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -14823,7 +14899,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@22.10.5)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -15042,16 +15118,18 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - /langchain@0.3.8(@langchain/core@0.3.26)(axios@1.7.4)(openai@4.77.0): - resolution: {integrity: sha512-EiAHFgBdThuXFmIx9j81wjdPItpRsw0Ck4r5dyhB74gyhehRGna/UK2CTqeKVnIUM/f4g4JbxUgAU4voXljDMw==} + /langchain@0.3.10(@langchain/core@0.3.27)(axios@1.7.4)(openai@4.77.3): + resolution: {integrity: sha512-dZXdhs81NU/PS2WfECCLJszx4to3ELK7qTMbumD0rAKx3mQb0sqr8M9MiVCcPgTZ1J1pzoDr5yCSdsmm9UsNXA==} engines: {node: '>=18'} peerDependencies: '@langchain/anthropic': '*' '@langchain/aws': '*' + '@langchain/cerebras': '*' '@langchain/cohere': '*' '@langchain/core': '>=0.2.21 <0.4.0' '@langchain/google-genai': '*' '@langchain/google-vertexai': '*' + '@langchain/google-vertexai-web': '*' '@langchain/groq': '*' '@langchain/mistralai': '*' '@langchain/ollama': '*' @@ -15065,12 +15143,16 @@ packages: optional: true '@langchain/aws': optional: true + '@langchain/cerebras': + optional: true '@langchain/cohere': optional: true '@langchain/google-genai': optional: true '@langchain/google-vertexai': optional: true + '@langchain/google-vertexai-web': + optional: true '@langchain/groq': optional: true '@langchain/mistralai': @@ -15088,18 +15170,18 @@ packages: typeorm: optional: true dependencies: - '@langchain/core': 0.3.26(openai@4.77.0) - '@langchain/openai': 0.3.16(@langchain/core@0.3.26) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.26) + '@langchain/core': 0.3.27(openai@4.77.3) + '@langchain/openai': 0.3.16(@langchain/core@0.3.27) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.27) axios: 1.7.4(debug@4.4.0) js-tiktoken: 1.0.16 js-yaml: 4.1.0 jsonpointer: 5.0.1 - langsmith: 0.2.14(openai@4.77.0) + langsmith: 0.2.14(openai@4.77.3) openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 10.0.0 - yaml: 2.6.1 + yaml: 2.7.0 zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) transitivePeerDependencies: @@ -15107,7 +15189,7 @@ packages: - openai dev: false - /langsmith@0.2.14(openai@4.77.0): + /langsmith@0.2.14(openai@4.77.3): resolution: {integrity: sha512-ClAuAgSf3m9miMYotLEaZKQyKdaWlfjhebCuYco8bc6g72dU2VwTg31Bv4YINBq7EH2i1cMwbOiJxbOXPqjGig==} peerDependencies: openai: '*' @@ -15117,7 +15199,7 @@ packages: dependencies: '@types/uuid': 10.0.0 commander: 10.0.1 - openai: 4.77.0(zod@3.24.1) + openai: 4.77.3(zod@3.24.1) p-queue: 6.6.2 p-retry: 4.6.2 semver: 7.6.3 @@ -15528,8 +15610,8 @@ packages: - supports-color dev: false - /mdast-util-find-and-replace@3.0.1: - resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + /mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 @@ -15574,7 +15656,7 @@ packages: '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.1 + mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 dev: false @@ -15761,7 +15843,7 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - /meros@1.3.0(@types/node@22.10.2): + /meros@1.3.0(@types/node@22.10.5): resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} engines: {node: '>=13'} peerDependencies: @@ -15770,7 +15852,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.5 dev: true /methods@1.1.2: @@ -16341,12 +16423,14 @@ packages: hasBin: true dev: false - /motion-dom@11.14.3: - resolution: {integrity: sha512-lW+D2wBy5vxLJi6aCP0xyxTxlTfiu+b+zcpVbGVFUxotwThqhdpPRSmX8xztAgtZMPMeU0WGVn/k1w4I+TbPqA==} + /motion-dom@11.16.0: + resolution: {integrity: sha512-4bmEwajSdrljzDAYpu6ceEdtI4J5PH25fmN8YSx7Qxk6OMrC10CXM0D5y+VO/pFZjhmCvm2bGf7Rus482kwhzA==} + dependencies: + motion-utils: 11.16.0 dev: false - /motion-utils@11.14.3: - resolution: {integrity: sha512-Xg+8xnqIJTpr0L/cidfTTBFkvRw26ZtGGuIhA94J9PQ2p4mEa06Xx7QVYZH0BP+EpMSaDlu+q0I0mmvwADPsaQ==} + /motion-utils@11.16.0: + resolution: {integrity: sha512-ngdWPjg31rD4WGXFi0eZ00DQQqKKu04QExyv/ymlC+3k+WIgYVFbt6gS5JsFPbJODTF/r8XiE/X+SsoT9c0ocw==} dev: false /mrmime@2.0.0: @@ -16791,7 +16875,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-object-atoms: 1.0.0 dev: true @@ -16801,7 +16885,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 dev: true /object.values@1.2.1: @@ -16823,13 +16907,13 @@ packages: engines: {node: '>= 18'} dependencies: '@octokit/app': 15.1.1 - '@octokit/core': 6.1.2 + '@octokit/core': 6.1.3 '@octokit/oauth-app': 7.1.4 - '@octokit/plugin-paginate-graphql': 5.2.4(@octokit/core@6.1.2) - '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.2) - '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.2) - '@octokit/plugin-retry': 7.1.2(@octokit/core@6.1.2) - '@octokit/plugin-throttling': 9.3.2(@octokit/core@6.1.2) + '@octokit/plugin-paginate-graphql': 5.2.4(@octokit/core@6.1.3) + '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.3) + '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.3) + '@octokit/plugin-retry': 7.1.2(@octokit/core@6.1.3) + '@octokit/plugin-throttling': 9.3.2(@octokit/core@6.1.3) '@octokit/request-error': 6.1.6 '@octokit/types': 13.6.2 dev: false @@ -16863,6 +16947,10 @@ packages: mimic-function: 5.0.1 dev: false + /onnxruntime-common@1.15.1: + resolution: {integrity: sha512-Y89eJ8QmaRsPZPWLaX7mfqhj63ny47rSkQe80hIo+lvBQdrdXYR9VO362xvZulk9DFkCnXmGidprvgJ07bKsIQ==} + dev: false + /onnxruntime-common@1.20.1: resolution: {integrity: sha512-YiU0s0IzYYC+gWvqD1HzLc46Du1sXpSiwzKb63PACIJr6LfL27VsXSXQvt68EzD3V0D5Bc0vyJTjmMxp0ylQiw==} dev: false @@ -16871,6 +16959,13 @@ packages: resolution: {integrity: sha512-U4DGq/dZiboIEK0Zv1KUuWJesJ/txUALpWSXwI8kqOCSxe8GrI65xfRFeMbqYFhPVGAWZPsBpT1zo1s4ksrlrg==} dev: false + /onnxruntime-node@1.15.1: + resolution: {integrity: sha512-wzhVELulmrvNoMZw0/HfV+9iwgHX+kPS82nxodZ37WCXmbeo1jp3thamTsNg8MGhxvv4GmEzRum5mo40oqIsqw==} + os: [win32, darwin, linux] + dependencies: + onnxruntime-common: 1.15.1 + dev: false + /onnxruntime-node@1.20.1: resolution: {integrity: sha512-di/I4HDXRw+FLgq+TyHmQEDd3cEp9iFFZm0r4uJ1Wd7b/WE1VXtKWo8yemex347c6GNF/3Pv86ZfPhIWxORr0w==} os: [win32, darwin, linux] @@ -16900,8 +16995,8 @@ packages: is-wsl: 2.2.0 dev: false - /openai@4.77.0(zod@3.24.1): - resolution: {integrity: sha512-WWacavtns/7pCUkOWvQIjyOfcdr9X+9n9Vvb0zFeKVDAqwCMDHB+iSr24SVaBAhplvSG6JrRXFpcNM9gWhOGIw==} + /openai@4.77.3(zod@3.24.1): + resolution: {integrity: sha512-wLDy4+KWHz31HRFMW2+9KQuVuT2QWhs0z94w1Gm1h2Ut9vIHr9/rHZggbykZEfyiaJRVgw8ZS9K6AylDWzvPYw==} hasBin: true peerDependencies: zod: ^3.23.8 @@ -16909,7 +17004,7 @@ packages: zod: optional: true dependencies: - '@types/node': 18.19.68 + '@types/node': 18.19.70 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -16992,7 +17087,7 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 object-keys: 1.1.1 safe-push-apply: 1.0.0 dev: true @@ -17071,7 +17166,7 @@ packages: engines: {node: '>=18'} dependencies: eventemitter3: 5.0.1 - p-timeout: 6.1.3 + p-timeout: 6.1.4 dev: false /p-retry@4.6.2: @@ -17089,8 +17184,8 @@ packages: p-finally: 1.0.0 dev: false - /p-timeout@6.1.3: - resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} + /p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} dev: false @@ -17658,8 +17753,8 @@ packages: dependencies: lilconfig: 3.1.3 postcss: 8.4.49 - ts-node: 10.9.2(@types/node@22.10.2)(typescript@5.6.3) - yaml: 2.6.1 + ts-node: 10.9.2(@types/node@22.10.5)(typescript@5.6.3) + yaml: 2.7.0 /postcss-loader@7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.97.1): resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} @@ -18289,6 +18384,11 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: false + /promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} requiresBuild: true @@ -18366,7 +18466,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.17.10 + '@types/node': 20.17.12 long: 5.2.3 dev: false @@ -18484,7 +18584,7 @@ packages: '@babel/runtime': 7.26.0 react: 18.3.1 react-syntax-highlighter: 15.6.1(react@18.3.1) - styled-components: 6.1.13(react-dom@18.3.1)(react@18.3.1) + styled-components: 6.1.14(react-dom@18.3.1)(react@18.3.1) tslib: 2.8.1 transitivePeerDependencies: - react-dom @@ -18625,8 +18725,8 @@ packages: webpack: 5.97.1(webpack-cli@5.1.4) dev: false - /react-markdown@9.0.1(@types/react@18.3.18)(react@18.3.1): - resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==} + /react-markdown@9.0.3(@types/react@18.3.18)(react@18.3.1): + resolution: {integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==} peerDependencies: '@types/react': '>=18' react: '>=18' @@ -18896,17 +18996,17 @@ packages: /reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - /reflect.getprototypeof@1.0.9: - resolution: {integrity: sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==} + /reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - dunder-proto: 1.0.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.6 - gopd: 1.2.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.7 + get-proto: 1.0.1 which-builtin-type: 1.2.1 dev: true @@ -18938,13 +19038,15 @@ packages: '@babel/runtime': 7.26.0 dev: false - /regexp.prototype.flags@1.5.3: - resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + /regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 set-function-name: 2.0.2 dev: true @@ -19013,7 +19115,7 @@ packages: dependencies: '@types/estree': 1.0.6 '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.0 + hast-util-to-estree: 3.1.1 transitivePeerDependencies: - supports-color @@ -19049,7 +19151,7 @@ packages: dependencies: '@types/mdast': 4.0.4 emoticon: 4.1.0 - mdast-util-find-and-replace: 3.0.1 + mdast-util-find-and-replace: 3.0.2 node-emoji: 2.2.0 unified: 11.0.5 dev: false @@ -19207,8 +19309,8 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /response-iterator@0.2.6: - resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} + /response-iterator@0.2.11: + resolution: {integrity: sha512-5tdhcAeGMSyM0/FoxAYjoOxQZ2tRR2H/S/t6kGRXu6iiWcGY5UnZgkVANbTwBVUSGqWu0ADctmoi6lOCIF8uKQ==} engines: {node: '>=0.8'} dev: false @@ -19317,7 +19419,7 @@ packages: dependencies: call-bind: 1.0.8 call-bound: 1.0.3 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 has-symbols: 1.1.0 isarray: 2.0.5 dev: true @@ -19515,7 +19617,7 @@ packages: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -19529,6 +19631,15 @@ packages: has-property-descriptors: 1.0.2 dev: true + /set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + dev: true + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: true @@ -19624,7 +19735,7 @@ packages: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 object-inspect: 1.13.3 /side-channel-weakmap@1.0.2: @@ -19633,7 +19744,7 @@ packages: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 object-inspect: 1.13.3 side-channel-map: 1.0.1 @@ -20014,7 +20125,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 dev: true /string.prototype.matchall@4.0.12: @@ -20024,14 +20135,14 @@ packages: call-bind: 1.0.8 call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.6 + get-intrinsic: 1.2.7 gopd: 1.2.0 has-symbols: 1.1.0 internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.3 + regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 side-channel: 1.1.0 dev: true @@ -20040,7 +20151,7 @@ packages: resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} dependencies: define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 dev: true /string.prototype.trim@1.2.10: @@ -20051,7 +20162,7 @@ packages: call-bound: 1.0.3 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.8 + es-abstract: 1.23.9 es-object-atoms: 1.0.0 has-property-descriptors: 1.0.2 dev: true @@ -20155,18 +20266,13 @@ packages: peek-readable: 4.1.0 dev: false - /style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - dependencies: - inline-style-parser: 0.1.1 - /style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} dependencies: inline-style-parser: 0.2.4 - /styled-components@6.1.13(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==} + /styled-components@6.1.14(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-KtfwhU5jw7UoxdM0g6XU9VZQFV4do+KrM8idiVCH5h4v49W+3p3yMe0icYwJgZQZepa5DbH04Qv8P0/RdcLcgg==} engines: {node: '>= 16'} peerDependencies: react: '>= 16.8.0' @@ -20364,7 +20470,7 @@ packages: chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob-parent: 6.0.2 is-glob: 4.0.3 jiti: 1.21.7 @@ -20598,20 +20704,20 @@ packages: engines: {node: 10.* || >= 12.*} dev: true - /ts-api-utils@1.4.3(typescript@5.6.2): - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} + /ts-api-utils@2.0.0(typescript@5.6.2): + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' dependencies: typescript: 5.6.2 dev: true - /ts-api-utils@1.4.3(typescript@5.6.3): - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} + /ts-api-utils@2.0.0(typescript@5.6.3): + resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' dependencies: typescript: 5.6.3 dev: true @@ -20654,7 +20760,7 @@ packages: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.17.12)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -20691,7 +20797,7 @@ packages: code-block-writer: 11.0.3 dev: true - /ts-node@10.9.2(@types/node@16.18.122)(typescript@5.6.3): + /ts-node@10.9.2(@types/node@16.18.123)(typescript@5.6.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20710,7 +20816,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.122 + '@types/node': 16.18.123 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -20722,7 +20828,7 @@ packages: yn: 3.1.1 dev: true - /ts-node@10.9.2(@types/node@20.17.10)(typescript@5.6.3): + /ts-node@10.9.2(@types/node@20.17.12)(typescript@5.6.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20741,7 +20847,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.17.10 + '@types/node': 20.17.12 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -20752,7 +20858,7 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.3): + /ts-node@10.9.2(@types/node@22.10.5)(typescript@5.6.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20771,7 +20877,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.10.2 + '@types/node': 22.10.5 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -20968,7 +21074,7 @@ packages: gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.9 + reflect.getprototypeof: 1.0.10 dev: true /typed-array-length@1.0.7: @@ -20980,7 +21086,7 @@ packages: gopd: 1.2.0 is-typed-array: 1.1.15 possible-typed-array-names: 1.0.0 - reflect.getprototypeof: 1.0.9 + reflect.getprototypeof: 1.0.10 dev: true /typedarray-to-buffer@3.1.5: @@ -21063,7 +21169,7 @@ packages: reflect-metadata: 0.2.2 sha.js: 2.4.11 sqlite3: 5.1.7 - ts-node: 10.9.2(@types/node@20.17.10)(typescript@5.6.3) + ts-node: 10.9.2(@types/node@20.17.12)(typescript@5.6.3) tslib: 2.8.1 uuid: 9.0.1 yargs: 17.7.2 @@ -21795,10 +21901,10 @@ packages: call-bound: 1.0.3 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.0.0 + is-async-function: 2.1.0 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.0.10 + is-generator-function: 1.1.0 is-regex: 1.2.1 is-weakref: 1.1.0 isarray: 2.0.5 @@ -22007,8 +22113,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + /yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true