diff --git a/.yarnrc.yml b/.yarnrc.yml index 3186f3f..dd46ee1 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -1 +1,2 @@ nodeLinker: node-modules +enableHardenedMode: true diff --git a/packages/agent-experiments/jest.config.ts b/packages/agent-experiments/jest.config.ts index 0734800..51f4565 100644 --- a/packages/agent-experiments/jest.config.ts +++ b/packages/agent-experiments/jest.config.ts @@ -5,7 +5,6 @@ export default { transform: { "^.+\\.[tj]s$": ["ts-jest", { tsconfig: "/tsconfig.spec.json" }] }, - transformIgnorePatterns: ["node_modules/(?!unpdf)"], - moduleFileExtensions: ["ts", "js", "mjs", "html"], + moduleFileExtensions: ["ts", "js", "html"], coverageDirectory: "../../coverage/packages/agent-experiments" }; diff --git a/packages/agent-experiments/package.json b/packages/agent-experiments/package.json index 975c2cb..2633002 100644 --- a/packages/agent-experiments/package.json +++ b/packages/agent-experiments/package.json @@ -5,11 +5,11 @@ "type": "commonjs", "main": "./src/index.ts", "dependencies": { - "pdfkit": "^0.16.0", - "unpdf": "^1.4.0" + "pdfkit": "^0.16.0" }, "devDependencies": { - "@zeroshotbuilders/commons-testing": "^0.0.3" + "@zeroshotbuilders/commons-testing": "^0.0.3", + "@zeroshotbuilders/docling-utils": "^0.0.3" }, "peerDependencies": { "@nestjs/common": ">=10.0.0", diff --git a/packages/agent-experiments/src/salary-extraction/prompts/calculateSalary.md b/packages/agent-experiments/src/salary-extraction/prompts/calculateSalary.md deleted file mode 100644 index f772ee4..0000000 --- a/packages/agent-experiments/src/salary-extraction/prompts/calculateSalary.md +++ /dev/null @@ -1,39 +0,0 @@ -You are a salary calculation agent. Your job is to determine an employee's annual salary from multiple extracted document data points. - -## Input - -You will receive a JSON array of extracted pay data from multiple documents. Each entry contains fields like: -- `documentType`, `employeeName`, `employerName` -- `payFrequency`, `grossPayThisPeriod`, `grossPayYtd` -- `annualSalaryStated`, `hourlyRate`, `hoursWorked` - -## Task - -Analyze all the extracted data and compute the annual salary. Use the following strategies: - -1. **Direct statement**: If any document explicitly states an annual salary (offer letter, W-2 Box 1, employment verification), use that as a strong signal. - -2. **Period-to-annual calculation**: For paystubs, multiply the gross pay per period by the number of periods per year: - - Weekly: multiply by 52 - - Biweekly: multiply by 26 - - Semi-monthly: multiply by 24 - - Monthly: multiply by 12 - -3. **Hourly calculation**: If hourly rate is given, calculate as: hourlyRate * hoursWorked * periodsPerYear - -4. **YTD extrapolation**: Use YTD gross and the pay period date to extrapolate (less reliable). - -5. **Cross-validation**: If multiple documents reference the same employee/employer, cross-validate the figures. Flag discrepancies. - -If documents are for different employees at different companies, pick the one with the most supporting evidence or calculate for each separately. If there are multiple employees, focus on the one with the most documents. - -## Output - -Return a JSON object with: -- `annualSalary`: the computed annual salary (best estimate) -- `confidence`: 0-1 confidence score -- `methodology`: brief description of how you arrived at the number -- `employeeName`: the employee name -- `employerName`: the employer name -- `documentsAnalyzed`: number of documents used -- `breakdown`: array of objects with `source` (filename), `derivedAnnualSalary` (if calculable), and `notes` diff --git a/packages/agent-experiments/src/salary-extraction/salary-extraction-agent.ts b/packages/agent-experiments/src/salary-extraction/salary-extraction-agent.ts index b11f3c0..a94b186 100644 --- a/packages/agent-experiments/src/salary-extraction/salary-extraction-agent.ts +++ b/packages/agent-experiments/src/salary-extraction/salary-extraction-agent.ts @@ -1,70 +1,27 @@ import { - AgenticWorkflow, Agent, + AgenticWorkflow, AgentRunResult, - AiAgentService, - AI_AGENT_SERVICE + AI_AGENT_SERVICE, + AiAgentService } from "@zeroshotbuilders/agentic-workflows"; import { Inject, Injectable } from "@nestjs/common"; import { createLogger, transports } from "winston"; -import { z } from "zod"; - -// ── Output Schemas ────────────────────────────────────────────────────────── - -export const DocumentClassificationSchema = z.object({ - documentType: z.enum([ - "paystub", - "w2", - "offer_letter", - "employment_verification", - "tax_return", - "unknown" - ]), - employeeName: z.string(), - employerName: z.string(), - confidence: z.number().min(0).max(1) -}); - -export type DocumentClassification = z.infer< - typeof DocumentClassificationSchema ->; - -export const PayDataExtractionSchema = z.object({ - documentType: z.string(), - employeeName: z.string(), - employerName: z.string(), - payPeriod: z.string().nullable(), - payFrequency: z - .enum(["weekly", "biweekly", "semi_monthly", "monthly", "annual", "unknown"]) - .nullable(), - grossPayThisPeriod: z.number().nullable(), - grossPayYtd: z.number().nullable(), - annualSalaryStated: z.number().nullable(), - hourlyRate: z.number().nullable(), - hoursWorked: z.number().nullable() -}); - -export type PayDataExtraction = z.infer; - -export const SalaryCalculationSchema = z.object({ - annualSalary: z.number(), - confidence: z.number().min(0).max(1), - methodology: z.string(), - employeeName: z.string(), - employerName: z.string(), - documentsAnalyzed: z.number(), - breakdown: z.array( - z.object({ - source: z.string(), - derivedAnnualSalary: z.number().nullable(), - notes: z.string() - }) - ) -}); - -export type SalaryCalculation = z.infer; - -// ── Agent Pipeline ────────────────────────────────────────────────────────── +import { + DocumentClassification, + DocumentClassificationSchema, + PayDataExtraction, + PayDataExtractionSchema, + SalaryCalculation +} from "./salary-extraction-schemas"; + +const PERIODS_PER_YEAR: Record = { + weekly: 52, + biweekly: 26, + semi_monthly: 24, + monthly: 12, + annual: 1 +}; @AgenticWorkflow({ promptsDirectory: `${__dirname}/prompts` @@ -80,38 +37,17 @@ export class SalaryExtractionAgent { private readonly aiAgentService: AiAgentService ) {} - /** - * Main pipeline entry point: takes an array of document texts and returns - * the computed annual salary. - */ async extractSalary( documents: Array<{ filename: string; text: string }> ): Promise { - this.logger.info( - `Starting salary extraction pipeline with ${documents.length} documents` - ); - // Phase 1: Classify all documents const classifications = await Promise.all( documents.map(async (doc) => { const result = await this.classifyDocument(doc.filename, doc.text); - if (!result.success) { - this.logger.warn( - `Classification failed for ${doc.filename}: ${result.error}` - ); - } return { ...doc, classification: result.output }; }) ); - this.logger.info( - "Classifications complete", - classifications.map((c) => ({ - file: c.filename, - type: c.classification?.documentType - })) - ); - // Phase 2: Extract pay data from each document const extractions = await Promise.all( classifications.map(async (doc) => { @@ -120,42 +56,108 @@ export class SalaryExtractionAgent { doc.filename, doc.text ); - if (!result.success) { - this.logger.warn( - `Extraction failed for ${doc.filename}: ${result.error}` - ); - } return { filename: doc.filename, extraction: result.output }; }) ); - this.logger.info("Extractions complete"); + // Phase 3: Calculate annual salary deterministically + return this.calculateSalary(extractions); + } - // Phase 3: Calculate annual salary from all extractions - const extractionSummary = JSON.stringify( - extractions.map((e) => ({ - filename: e.filename, - ...e.extraction - })), - null, - 2 - ); + private calculateSalary( + extractions: Array<{ filename: string; extraction: PayDataExtraction }> + ): SalaryCalculation { + const breakdown: SalaryCalculation["breakdown"] = []; + let bestSalary: number | null = null; + let bestConfidence = 0; + let methodology = ""; + let employeeName = ""; + let employerName = ""; + + for (const { filename, extraction } of extractions) { + if (!employeeName && extraction.employeeName) { + employeeName = extraction.employeeName; + } + if (!employerName && extraction.employerName) { + employerName = extraction.employerName; + } + + let derived: number | null = null; + let notes = ""; + + // Priority 1: Directly stated annual salary (pick the highest across docs) + if (extraction.annualSalaryStated != null) { + derived = extraction.annualSalaryStated; + notes = `Directly stated annual salary: $${derived.toLocaleString()}`; + if (bestConfidence < 1 || derived > (bestSalary ?? 0)) { + bestSalary = derived; + bestConfidence = 1; + methodology = `Directly stated in ${filename}`; + } + } + + // Priority 2: Gross pay * periods per year + if ( + derived == null && + extraction.grossPayThisPeriod != null && + extraction.payFrequency != null && + PERIODS_PER_YEAR[extraction.payFrequency] != null + ) { + const periods = PERIODS_PER_YEAR[extraction.payFrequency]; + derived = extraction.grossPayThisPeriod * periods; + notes = + `$${extraction.grossPayThisPeriod.toLocaleString()} × ` + + `${periods} (${extraction.payFrequency}) = $${derived.toLocaleString()}`; + if (bestConfidence < 0.9) { + bestSalary = derived; + bestConfidence = 0.9; + methodology = `Period-to-annual from ${filename}: ${notes}`; + } + } + + // Priority 3: Hourly rate * hours * periods + if ( + derived == null && + extraction.hourlyRate != null && + extraction.hoursWorked != null && + extraction.payFrequency != null && + PERIODS_PER_YEAR[extraction.payFrequency] != null + ) { + const periods = PERIODS_PER_YEAR[extraction.payFrequency]; + derived = extraction.hourlyRate * extraction.hoursWorked * periods; + notes = + `$${extraction.hourlyRate}/hr × ${extraction.hoursWorked}hrs × ` + + `${periods} periods = $${derived.toLocaleString()}`; + if (bestConfidence < 0.8) { + bestSalary = derived; + bestConfidence = 0.8; + methodology = `Hourly calculation from ${filename}: ${notes}`; + } + } + + if (derived == null) { + notes = "Could not derive annual salary from this document"; + } - const result = await this.calculateSalary(extractionSummary); - if (!result.success) { - throw new Error(`Salary calculation failed: ${result.error}`); + breakdown.push({ source: filename, derivedAnnualSalary: derived, notes }); } this.logger.info("Salary calculation complete", { - annualSalary: result.output.annualSalary, - confidence: result.output.confidence + annualSalary: bestSalary, + confidence: bestConfidence }); - return result.output; + return { + annualSalary: bestSalary ?? 0, + confidence: bestConfidence, + methodology, + employeeName, + employerName, + documentsAnalyzed: extractions.length, + breakdown + }; } - // ── Agent Methods (intercepted by decorator) ───────────────────────────── - @Agent({ outputSchema: DocumentClassificationSchema }) @@ -163,7 +165,7 @@ export class SalaryExtractionAgent { filename: string, documentText: string ): Promise> { - return null as any; + return null; } @Agent({ @@ -174,15 +176,6 @@ export class SalaryExtractionAgent { filename: string, documentText: string ): Promise> { - return null as any; - } - - @Agent({ - outputSchema: SalaryCalculationSchema - }) - private async calculateSalary( - extractedData: string - ): Promise> { - return null as any; + return null; } } diff --git a/packages/agent-experiments/src/salary-extraction/salary-extraction-schemas.ts b/packages/agent-experiments/src/salary-extraction/salary-extraction-schemas.ts new file mode 100644 index 0000000..4c71071 --- /dev/null +++ b/packages/agent-experiments/src/salary-extraction/salary-extraction-schemas.ts @@ -0,0 +1,54 @@ +import {z} from "zod"; + +export const DocumentClassificationSchema = z.object({ + documentType: z.enum([ + "paystub", + "w2", + "offer_letter", + "employment_verification", + "tax_return", + "unknown" + ]), + employeeName: z.string(), + employerName: z.string(), + confidence: z.number().min(0).max(1) +}); + +export type DocumentClassification = z.infer< + typeof DocumentClassificationSchema +>; + +export const PayDataExtractionSchema = z.object({ + documentType: z.string(), + employeeName: z.string(), + employerName: z.string(), + payPeriod: z.string().nullable(), + payFrequency: z + .enum(["weekly", "biweekly", "semi_monthly", "monthly", "annual", "unknown"]) + .nullable(), + grossPayThisPeriod: z.number().nullable(), + grossPayYtd: z.number().nullable(), + annualSalaryStated: z.number().nullable(), + hourlyRate: z.number().nullable(), + hoursWorked: z.number().nullable() +}); + +export type PayDataExtraction = z.infer; + +export const SalaryCalculationSchema = z.object({ + annualSalary: z.number(), + confidence: z.number().min(0).max(1), + methodology: z.string(), + employeeName: z.string(), + employerName: z.string(), + documentsAnalyzed: z.number(), + breakdown: z.array( + z.object({ + source: z.string(), + derivedAnnualSalary: z.number().nullable(), + notes: z.string() + }) + ) +}); + +export type SalaryCalculation = z.infer; diff --git a/packages/agent-experiments/test/assets/extract-pdf-text.mjs b/packages/agent-experiments/test/assets/extract-pdf-text.mjs deleted file mode 100644 index 3d6b1a7..0000000 --- a/packages/agent-experiments/test/assets/extract-pdf-text.mjs +++ /dev/null @@ -1,7 +0,0 @@ -import { extractText } from "unpdf"; -import { readFileSync } from "fs"; - -const filePath = process.argv[2]; -const buffer = readFileSync(filePath); -const result = await extractText(new Uint8Array(buffer)); -process.stdout.write(result.text.join("\n")); diff --git a/packages/agent-experiments/test/assets/fixtures/employment-verification-techforward.pdf b/packages/agent-experiments/test/assets/fixtures/employment-verification-techforward.pdf index 2a5326f..13f13ed 100644 Binary files a/packages/agent-experiments/test/assets/fixtures/employment-verification-techforward.pdf and b/packages/agent-experiments/test/assets/fixtures/employment-verification-techforward.pdf differ diff --git a/packages/agent-experiments/test/assets/fixtures/offer-letter-acme.pdf b/packages/agent-experiments/test/assets/fixtures/offer-letter-acme.pdf index f3d7a27..e740574 100644 Binary files a/packages/agent-experiments/test/assets/fixtures/offer-letter-acme.pdf and b/packages/agent-experiments/test/assets/fixtures/offer-letter-acme.pdf differ diff --git a/packages/agent-experiments/test/assets/fixtures/paystub-acme-biweekly.pdf b/packages/agent-experiments/test/assets/fixtures/paystub-acme-biweekly.pdf index 1669b2b..1544040 100644 Binary files a/packages/agent-experiments/test/assets/fixtures/paystub-acme-biweekly.pdf and b/packages/agent-experiments/test/assets/fixtures/paystub-acme-biweekly.pdf differ diff --git a/packages/agent-experiments/test/assets/fixtures/paystub-greenleaf-weekly.pdf b/packages/agent-experiments/test/assets/fixtures/paystub-greenleaf-weekly.pdf index e8db276..2e4d2d0 100644 Binary files a/packages/agent-experiments/test/assets/fixtures/paystub-greenleaf-weekly.pdf and b/packages/agent-experiments/test/assets/fixtures/paystub-greenleaf-weekly.pdf differ diff --git a/packages/agent-experiments/test/assets/fixtures/paystub-techforward-monthly.pdf b/packages/agent-experiments/test/assets/fixtures/paystub-techforward-monthly.pdf index a759da9..88ce31c 100644 Binary files a/packages/agent-experiments/test/assets/fixtures/paystub-techforward-monthly.pdf and b/packages/agent-experiments/test/assets/fixtures/paystub-techforward-monthly.pdf differ diff --git a/packages/agent-experiments/test/assets/fixtures/w2-acme-2024.pdf b/packages/agent-experiments/test/assets/fixtures/w2-acme-2024.pdf index 291b32f..c56435a 100644 Binary files a/packages/agent-experiments/test/assets/fixtures/w2-acme-2024.pdf and b/packages/agent-experiments/test/assets/fixtures/w2-acme-2024.pdf differ diff --git a/packages/agent-experiments/test/salary-extraction.eval.spec.ts b/packages/agent-experiments/test/salary-extraction.eval.spec.ts index 39a953d..74b7322 100644 --- a/packages/agent-experiments/test/salary-extraction.eval.spec.ts +++ b/packages/agent-experiments/test/salary-extraction.eval.spec.ts @@ -2,54 +2,78 @@ import { SalaryExtractionAgent, SalaryExtractionModule } from "@zeroshotbuilders/agent-experiments"; +import { Closer } from "@zeroshotbuilders/commons"; +import { + BeforeAllTimeout, + DoclingContainer +} from "@zeroshotbuilders/commons-testing"; +import { DoclingServiceRemote } from "@zeroshotbuilders/docling-utils"; import { NestFactory } from "@nestjs/core"; -import { execFileSync } from "child_process"; +import fs from "fs"; import path from "path"; import { generateAllFixtures } from "./assets/generate-fixtures"; const FIXTURES_DIR = path.join(__dirname, "assets", "fixtures"); -const EXTRACT_SCRIPT = path.join(__dirname, "assets", "extract-pdf-text.mjs"); const APPLICATION_ROOT = path.join(__dirname, "..", "assets"); -function readPdf(filePath: string): string { - return execFileSync("node", [EXTRACT_SCRIPT, filePath], { - encoding: "utf-8", - timeout: 15_000 - }); -} - -function loadDocuments( - filenames: string[] -): Array<{ filename: string; text: string }> { - return filenames.map((filename) => ({ - filename, - text: readPdf(path.join(FIXTURES_DIR, filename)) - })); -} - jest.setTimeout(300_000); describe("Salary Extraction Pipeline", () => { let agent: SalaryExtractionAgent; - let app: any; + let closer: Closer; + let doclingService: DoclingServiceRemote; + const docling = new DoclingContainer(); + + async function convertPdf(filePath: string): Promise { + const file = fs.readFileSync(filePath); + const filename = path.basename(filePath); + + const result = await doclingService.convert({ file, filename }); + return result.content; + } + + function loadDocuments( + filenames: string[] + ): Promise> { + return Promise.all( + filenames.map(async (filename) => ({ + filename, + text: await convertPdf(path.join(FIXTURES_DIR, filename)) + })) + ); + } beforeAll(async () => { await generateAllFixtures(); + await docling.start(); - app = await NestFactory.createApplicationContext( + doclingService = new DoclingServiceRemote({ + baseUrl: docling.getBaseUrl() + } as any); + + const app = await NestFactory.createApplicationContext( SalaryExtractionModule.forApplicationRoot(APPLICATION_ROOT) ); agent = app.get(SalaryExtractionAgent); - }); + + closer = Closer.create( + { + resource: app, + closingFunction: async (a) => await a.close() + }, + { + resource: docling, + closingFunction: async (d) => await d.stop() + } + ); + }, BeforeAllTimeout); afterAll(async () => { - if (app) { - await app.close(); - } + if (closer) await closer.close(); }); it("should extract salary from ACME paystub + W-2 + offer letter", async () => { - const documents = loadDocuments([ + const documents = await loadDocuments([ "paystub-acme-biweekly.pdf", "w2-acme-2024.pdf", "offer-letter-acme.pdf" @@ -67,7 +91,7 @@ describe("Salary Extraction Pipeline", () => { }); it("should extract salary from TechForward monthly paystub + verification letter", async () => { - const documents = loadDocuments([ + const documents = await loadDocuments([ "paystub-techforward-monthly.pdf", "employment-verification-techforward.pdf" ]); @@ -83,7 +107,7 @@ describe("Salary Extraction Pipeline", () => { }); it("should extract salary from Greenleaf weekly paystub alone", async () => { - const documents = loadDocuments(["paystub-greenleaf-weekly.pdf"]); + const documents = await loadDocuments(["paystub-greenleaf-weekly.pdf"]); const result = await agent.extractSalary(documents); @@ -95,7 +119,7 @@ describe("Salary Extraction Pipeline", () => { }); it("should handle all documents together and pick best estimate", async () => { - const documents = loadDocuments([ + const documents = await loadDocuments([ "paystub-acme-biweekly.pdf", "w2-acme-2024.pdf", "offer-letter-acme.pdf", diff --git a/packages/commons-testing/index.ts b/packages/commons-testing/index.ts index 2139886..c371cb1 100644 --- a/packages/commons-testing/index.ts +++ b/packages/commons-testing/index.ts @@ -1,5 +1,6 @@ export * from "./src/postgres/postgres-container"; export * from "./src/redis/redis-container"; +export * from "./src/docling/docling-container"; export * from "./src/async/async-test-utils"; export * from "./src/booter/booter-configuration"; export * from "./src/exceptions/jest-exception"; diff --git a/packages/commons-testing/src/docling/docling-container.ts b/packages/commons-testing/src/docling/docling-container.ts new file mode 100644 index 0000000..7dde6c6 --- /dev/null +++ b/packages/commons-testing/src/docling/docling-container.ts @@ -0,0 +1,48 @@ +import { GenericContainer, StartedTestContainer, Wait } from "testcontainers"; +import { createLogger, transports } from "winston"; + +export class DoclingContainer { + public static readonly PORT = 5001; + public static readonly IMAGE = "quay.io/docling-project/docling-serve:latest"; + + private readonly logger = createLogger({ + transports: [new transports.Console()] + }); + + private readonly container: GenericContainer; + private startedContainer: StartedTestContainer; + + constructor() { + this.container = new GenericContainer(DoclingContainer.IMAGE) + .withWaitStrategy( + Wait.forLogMessage(/Uvicorn running on/, 1) + ) + .withExposedPorts(DoclingContainer.PORT); + } + + public async start() { + this.logger.info("Starting Docling container..."); + this.startedContainer = await this.container.start(); + this.logger.info( + `Docling container started on port ${this.getMappedPort()}` + ); + } + + public async stop() { + if (this.startedContainer) { + await this.startedContainer.stop(); + } + } + + public getBaseUrl(): string { + return `http://${this.startedContainer.getHost()}:${this.getMappedPort()}`; + } + + public getMappedPort(): number { + return this.startedContainer.getMappedPort(DoclingContainer.PORT); + } + + public getHost(): string { + return this.startedContainer.getHost(); + } +} diff --git a/packages/docling-utils/.eslintrc.json b/packages/docling-utils/.eslintrc.json new file mode 100644 index 0000000..f1ff0d9 --- /dev/null +++ b/packages/docling-utils/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "rules": {} + } + ] +} diff --git a/packages/docling-utils/index.ts b/packages/docling-utils/index.ts new file mode 100644 index 0000000..b7c1df5 --- /dev/null +++ b/packages/docling-utils/index.ts @@ -0,0 +1,7 @@ +export const DOCLING_APPLICATION_ROOT = "DoclingApplicationRoot"; +export * from "./src/docling-client-module"; +export * from "./src/docling-client-factory"; +export * from "./src/config/docling-client-config"; +export * from "./src/service/docling-service"; +export * from "./src/service/docling-service-local"; +export * from "./src/service/docling-service-remote"; diff --git a/packages/docling-utils/jest.config.ts b/packages/docling-utils/jest.config.ts new file mode 100644 index 0000000..62c0003 --- /dev/null +++ b/packages/docling-utils/jest.config.ts @@ -0,0 +1,10 @@ +export default { + displayName: "docling-utils", + preset: "../../jest.preset.js", + testEnvironment: "node", + transform: { + "^.+\\.[tj]s$": "ts-jest" + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/packages/docling-utils" +}; diff --git a/packages/docling-utils/package.json b/packages/docling-utils/package.json new file mode 100644 index 0000000..3d22713 --- /dev/null +++ b/packages/docling-utils/package.json @@ -0,0 +1,15 @@ +{ + "name": "@zeroshotbuilders/docling-utils", + "version": "0.0.3", + "type": "commonjs", + "main": "./src/index.ts", + "publishConfig": { + "main": "./index.js", + "types": "./index.d.ts", + "access": "public" + }, + "peerDependencies": { + "@nestjs/common": ">=10.0.0", + "@zeroshotbuilders/commons": ">=0.0.1" + } +} diff --git a/packages/docling-utils/project.json b/packages/docling-utils/project.json new file mode 100644 index 0000000..0d85104 --- /dev/null +++ b/packages/docling-utils/project.json @@ -0,0 +1,29 @@ +{ + "name": "docling-utils", + "sourceRoot": "packages/docling-utils/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "options": { + "outputPath": "dist/packages/docling-utils", + "main": "packages/docling-utils/src/index.ts", + "tsConfig": "packages/docling-utils/tsconfig.lib.json" + } + }, + "test": { + "executor": "@nx/jest:jest", + "options": { + "jestConfig": "packages/docling-utils/jest.config.ts", + "passWithNoTests": true + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "options": { + "lintFilePatterns": ["packages/docling-utils/**/*.ts"] + } + } + }, + "tags": [] +} diff --git a/packages/docling-utils/src/config/docling-client-config.ts b/packages/docling-utils/src/config/docling-client-config.ts new file mode 100644 index 0000000..ee1f13d --- /dev/null +++ b/packages/docling-utils/src/config/docling-client-config.ts @@ -0,0 +1,20 @@ +import { ApplicationConfig, loadConfig } from "@zeroshotbuilders/commons"; +import { Injectable } from "@nestjs/common"; + +@Injectable() +export class DoclingClientConfig { + private static readonly CONFIG_KEY = "docling"; + + readonly baseUrl: string; + + constructor(applicationConfig: ApplicationConfig) { + const config = loadConfig( + applicationConfig.applicationRoot, + DoclingClientConfig.CONFIG_KEY + ); + + return { + baseUrl: config.baseUrl + }; + } +} diff --git a/packages/docling-utils/src/docling-client-factory.ts b/packages/docling-utils/src/docling-client-factory.ts new file mode 100644 index 0000000..dc00d86 --- /dev/null +++ b/packages/docling-utils/src/docling-client-factory.ts @@ -0,0 +1,21 @@ +import { ApplicationConfig } from "@zeroshotbuilders/commons"; +import { Injectable } from "@nestjs/common"; +import { DoclingClientConfig } from "./config/docling-client-config"; +import { DoclingService } from "./service/docling-service"; +import { DoclingServiceLocal } from "./service/docling-service-local"; +import { DoclingServiceRemote } from "./service/docling-service-remote"; + +@Injectable() +export class DoclingClientFactory { + constructor( + private readonly applicationConfig: ApplicationConfig, + private readonly config: DoclingClientConfig + ) {} + + public makeDoclingService(): DoclingService { + if (this.applicationConfig.local) { + return DoclingServiceLocal.getInstance(); + } + return new DoclingServiceRemote(this.config); + } +} diff --git a/packages/docling-utils/src/docling-client-module.ts b/packages/docling-utils/src/docling-client-module.ts new file mode 100644 index 0000000..764850f --- /dev/null +++ b/packages/docling-utils/src/docling-client-module.ts @@ -0,0 +1,34 @@ +import { ConfigModule } from "@zeroshotbuilders/commons"; +import { DynamicModule, Module } from "@nestjs/common"; +import { DOCLING_APPLICATION_ROOT } from "../index"; +import { DoclingClientConfig } from "./config/docling-client-config"; +import { DoclingClientFactory } from "./docling-client-factory"; + +export const DOCLING_CLIENT = "DOCLING_CLIENT"; + +@Module({}) +export class DoclingClientModule { + public static forApplicationRoot(applicationRoot: string): DynamicModule { + return { + module: DoclingClientModule, + imports: [ + ConfigModule.forApplicationRoot(applicationRoot) + ], + providers: [ + { + provide: DOCLING_APPLICATION_ROOT, + useValue: applicationRoot + }, + DoclingClientConfig, + DoclingClientFactory, + { + provide: DOCLING_CLIENT, + useFactory: (doclingClientFactory: DoclingClientFactory) => + doclingClientFactory.makeDoclingService(), + inject: [DoclingClientFactory] + } + ], + exports: [DOCLING_CLIENT] + }; + } +} diff --git a/packages/docling-utils/src/index.ts b/packages/docling-utils/src/index.ts new file mode 100644 index 0000000..a55fe0f --- /dev/null +++ b/packages/docling-utils/src/index.ts @@ -0,0 +1,6 @@ +export * from "./docling-client-module"; +export * from "./docling-client-factory"; +export * from "./config/docling-client-config"; +export * from "./service/docling-service"; +export * from "./service/docling-service-local"; +export * from "./service/docling-service-remote"; diff --git a/packages/docling-utils/src/service/docling-service-local.ts b/packages/docling-utils/src/service/docling-service-local.ts new file mode 100644 index 0000000..093b43a --- /dev/null +++ b/packages/docling-utils/src/service/docling-service-local.ts @@ -0,0 +1,53 @@ +import { + ConvertOptions, + ConvertRequest, + ConvertResponse, + DoclingService +} from "./docling-service"; + +export class DoclingServiceLocal implements DoclingService { + private static instance: DoclingServiceLocal = new DoclingServiceLocal(); + + private static convertOverride: + | (( + request: ConvertRequest, + options?: ConvertOptions + ) => Promise) + | undefined; + + public static getInstance(): DoclingServiceLocal { + return DoclingServiceLocal.instance; + } + + public static setConvertOverride( + override: ( + request: ConvertRequest, + options?: ConvertOptions + ) => Promise + ): void { + this.convertOverride = override; + } + + public static clearConvertOverride(): void { + this.convertOverride = undefined; + } + + public static clearAllOverrides(): void { + this.convertOverride = undefined; + } + + async convert( + request: ConvertRequest, + options?: ConvertOptions + ): Promise { + if (DoclingServiceLocal.convertOverride) { + return DoclingServiceLocal.convertOverride(request, options); + } + + return { + content: `Mock converted content for ${request.filename}`, + format: options?.format ?? "markdown", + pages: 1 + }; + } +} diff --git a/packages/docling-utils/src/service/docling-service-remote.ts b/packages/docling-utils/src/service/docling-service-remote.ts new file mode 100644 index 0000000..b15ddd4 --- /dev/null +++ b/packages/docling-utils/src/service/docling-service-remote.ts @@ -0,0 +1,81 @@ +import { createLogger, transports } from "winston"; +import { DoclingClientConfig } from "../config/docling-client-config"; +import { + ConvertOptions, + ConvertRequest, + ConvertResponse, + DoclingService +} from "./docling-service"; + +export class DoclingServiceRemote implements DoclingService { + private readonly logger = createLogger({ + transports: [new transports.Console()] + }); + + private readonly baseUrl: string; + + constructor(config: DoclingClientConfig) { + this.baseUrl = config.baseUrl; + } + + async convert( + request: ConvertRequest, + options?: ConvertOptions + ): Promise { + const format = options?.format ?? "markdown"; + + const formData = new FormData(); + formData.append( + "files", + new Blob([request.file]), + request.filename + ); + + const response = await fetch( + `${this.baseUrl}/v1/convert/file`, + { + method: "POST", + body: formData, + headers: { + Accept: "application/json" + } + } + ); + + if (!response.ok) { + const body = await response.text(); + throw new Error( + `Docling conversion failed (${response.status}): ${body}` + ); + } + + const result = await response.json() as any; + const document = result.document ?? result; + + const content = this.extractContent(document, format); + + return { + content, + format, + pages: document.pages?.length ?? document.num_pages ?? 1 + }; + } + + private extractContent(document: any, format: string): string { + if (format === "markdown" && document.md_content) { + return document.md_content; + } + if (format === "text" && document.text_content) { + return document.text_content; + } + if (document.export_to_markdown) { + return document.export_to_markdown; + } + if (document.content) { + return typeof document.content === "string" + ? document.content + : JSON.stringify(document.content); + } + return JSON.stringify(document); + } +} diff --git a/packages/docling-utils/src/service/docling-service.ts b/packages/docling-utils/src/service/docling-service.ts new file mode 100644 index 0000000..0088e30 --- /dev/null +++ b/packages/docling-utils/src/service/docling-service.ts @@ -0,0 +1,21 @@ +export interface ConvertRequest { + file: Buffer; + filename: string; +} + +export interface ConvertOptions { + format?: "markdown" | "text" | "json"; +} + +export interface ConvertResponse { + content: string; + format: string; + pages: number; +} + +export interface DoclingService { + convert( + request: ConvertRequest, + options?: ConvertOptions + ): Promise; +} diff --git a/packages/docling-utils/tsconfig.json b/packages/docling-utils/tsconfig.json new file mode 100644 index 0000000..46167d5 --- /dev/null +++ b/packages/docling-utils/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc" + }, + "files": [], + "include": [], + "references": [ + { "path": "./tsconfig.lib.json" }, + { "path": "./tsconfig.spec.json" } + ] +} diff --git a/packages/docling-utils/tsconfig.lib.json b/packages/docling-utils/tsconfig.lib.json new file mode 100644 index 0000000..e927de6 --- /dev/null +++ b/packages/docling-utils/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node", "reflect-metadata"] + }, + "include": ["index.ts", "src/**/*.ts"], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/packages/docling-utils/tsconfig.spec.json b/packages/docling-utils/tsconfig.spec.json new file mode 100644 index 0000000..b52d392 --- /dev/null +++ b/packages/docling-utils/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node", "reflect-metadata"] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 571d702..5c623bf 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -30,6 +30,7 @@ "@zeroshotbuilders/openai-utils": ["packages/openai-utils/index.ts"], "@zeroshotbuilders/sql-decorators": ["packages/sql-decorators/index.ts"], "@zeroshotbuilders/tavily-utils": ["packages/tavily-utils/index.ts"], + "@zeroshotbuilders/docling-utils": ["packages/docling-utils/index.ts"], "@zeroshotbuilders/agent-experiments": ["packages/agent-experiments/index.ts"] } }, diff --git a/yarn.lock b/yarn.lock index a18fec8..e5f65db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1573,11 +1573,11 @@ __metadata: linkType: hard "@hono/node-server@npm:^1.19.9": - version: 1.19.12 - resolution: "@hono/node-server@npm:1.19.12" + version: 1.19.14 + resolution: "@hono/node-server@npm:1.19.14" peerDependencies: hono: ^4 - checksum: 10c0/06b5c7ba775d585abebe1ece155f3b00cc9013319818c58bba6f1b1e71df44d1d0d6c6e66cd50350ab6f0b9219a182f83c9fe3074b81a1d1ebb0a1493a73db9e + checksum: 10c0/41a099bb3705d96aac44b7a8db8805f2a22ce8a0f767a27b6d10b74a9964925df01c5f35d3631e882f8bcdeee3518884c30f40588ac8c960d88bf71048ba0df3 languageName: node linkType: hard @@ -1924,9 +1924,9 @@ __metadata: linkType: hard "@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a + version: 0.1.6 + resolution: "@istanbuljs/schema@npm:0.1.6" + checksum: 10c0/bb0d370bf3dd454d2f37f1bccb8921e2da99adacef2da56ef47850e25d7a4de69cf639ead8c189755aef38921369024b4afea3535a5c2ac9082b3e1171bcbc3a languageName: node linkType: hard @@ -2454,13 +2454,6 @@ __metadata: languageName: node linkType: hard -"@ltd/j-toml@npm:^1.38.0": - version: 1.38.0 - resolution: "@ltd/j-toml@npm:1.38.0" - checksum: 10c0/6db2b203e21c6bc2e781ad76f3e798ae9c4b9d83205070f482602a30f3d1c37dde8c8c72575bdc505c1b8c228c5e81171a4557f0d76b814da0fb91cdd21f6194 - languageName: node - linkType: hard - "@lukeed/csprng@npm:^1.0.0": version: 1.1.0 resolution: "@lukeed/csprng@npm:1.1.0" @@ -2651,8 +2644,8 @@ __metadata: linkType: hard "@nestjs/testing@npm:^11.1.18": - version: 11.1.18 - resolution: "@nestjs/testing@npm:11.1.18" + version: 11.1.19 + resolution: "@nestjs/testing@npm:11.1.19" dependencies: tslib: "npm:2.8.1" peerDependencies: @@ -2665,7 +2658,7 @@ __metadata: optional: true "@nestjs/platform-express": optional: true - checksum: 10c0/49addd548fbf8881181b4e467a713835190cb79e24cd3a9ad643d6c7b7bca1688547ce0a7dffe453d811fb85f5aad75d247d6d04bbceb36136dd3724d1e8509f + checksum: 10c0/58c1d8249384ca22dd68af20d8cbd555328e8c2bbecd64c2785964ef75a084c94b760edf08cc7085896496292bc6e5ec42e018e7743a99bb2f1bb23ba2ec5b55 languageName: node linkType: hard @@ -2977,12 +2970,12 @@ __metadata: languageName: node linkType: hard -"@nx/devkit@npm:22.6.4, @nx/devkit@npm:>=21.5.2 < 23.0.0": - version: 22.6.4 - resolution: "@nx/devkit@npm:22.6.4" +"@nx/devkit@npm:22.6.5, @nx/devkit@npm:>=21.5.2 < 23.0.0": + version: 22.6.5 + resolution: "@nx/devkit@npm:22.6.5" dependencies: "@zkochan/js-yaml": "npm:0.0.7" - ejs: "npm:^3.1.7" + ejs: "npm:5.0.1" enquirer: "npm:~2.3.6" minimatch: "npm:10.2.4" semver: "npm:^7.6.3" @@ -2990,16 +2983,16 @@ __metadata: yargs-parser: "npm:21.1.1" peerDependencies: nx: ">= 21 <= 23 || ^22.0.0-0" - checksum: 10c0/1484e229eded11c0f125f566fd96e47c845dc47692070892faaea02c91db4db62335268c7e59d42032c66f00f5fd08cdef513b6d6f12ddae2f41a79291843422 + checksum: 10c0/bff5f51cf2041f2d0f08ff1e93984c0e1def2e554b5f2edbcc5240a18a3b434ef6059898c87bbd2a5f9b84b5ef04e66f8607e5dcf7f26bf44e0009796ea7a628 languageName: node linkType: hard "@nx/eslint@npm:^22.6.4": - version: 22.6.4 - resolution: "@nx/eslint@npm:22.6.4" + version: 22.6.5 + resolution: "@nx/eslint@npm:22.6.5" dependencies: - "@nx/devkit": "npm:22.6.4" - "@nx/js": "npm:22.6.4" + "@nx/devkit": "npm:22.6.5" + "@nx/js": "npm:22.6.5" semver: "npm:^7.6.3" tslib: "npm:^2.3.0" typescript: "npm:~5.9.2" @@ -3009,18 +3002,18 @@ __metadata: peerDependenciesMeta: "@zkochan/js-yaml": optional: true - checksum: 10c0/a1da4abb86327882e0ca315d45fa4bd73156643719520a0e2f64dc7942e3f1f3d6c77985cc50be4c12f00f460c7893a2daf588621bfe18f9e56e0fac2546403c + checksum: 10c0/dd760f73a2b66d968c773a2ce4182b0208ff9bce6f649e5d548af59f8d0c86a4d9ca48951c8ad0e94525134fb81e3ef628ea26f5b8e9e6843337619a420d9655 languageName: node linkType: hard "@nx/jest@npm:^22.6.4": - version: 22.6.4 - resolution: "@nx/jest@npm:22.6.4" + version: 22.6.5 + resolution: "@nx/jest@npm:22.6.5" dependencies: "@jest/reporters": "npm:^30.0.2" "@jest/test-result": "npm:^30.0.2" - "@nx/devkit": "npm:22.6.4" - "@nx/js": "npm:22.6.4" + "@nx/devkit": "npm:22.6.5" + "@nx/js": "npm:22.6.5" "@phenomnomnominal/tsquery": "npm:~6.1.4" identity-obj-proxy: "npm:3.0.0" jest-config: "npm:^30.0.2" @@ -3032,13 +3025,13 @@ __metadata: semver: "npm:^7.6.3" tslib: "npm:^2.3.0" yargs-parser: "npm:21.1.1" - checksum: 10c0/3ec599c18d2a38a9b49cb876f7df53edbc70f9e3a49f6d4f972da0e966a38e1450f2cc7e6c8cb909530d00b43646b0574af6e60e161873bc3211f2a122df37a0 + checksum: 10c0/512c49c12089530442d43b3d3b74cf59d00c0450d51c6e56f476b2602aa5a8e1d8bdc10c259b42f21959fdf866cd4af057998aab2c55a0351a73775cf45d5959 languageName: node linkType: hard -"@nx/js@npm:22.6.4, @nx/js@npm:^22.6.4": - version: 22.6.4 - resolution: "@nx/js@npm:22.6.4" +"@nx/js@npm:22.6.5, @nx/js@npm:^22.6.4": + version: 22.6.5 + resolution: "@nx/js@npm:22.6.5" dependencies: "@babel/core": "npm:^7.23.2" "@babel/plugin-proposal-decorators": "npm:^7.22.7" @@ -3047,8 +3040,8 @@ __metadata: "@babel/preset-env": "npm:^7.23.2" "@babel/preset-typescript": "npm:^7.22.5" "@babel/runtime": "npm:^7.22.6" - "@nx/devkit": "npm:22.6.4" - "@nx/workspace": "npm:22.6.4" + "@nx/devkit": "npm:22.6.5" + "@nx/workspace": "npm:22.6.5" "@zkochan/js-yaml": "npm:0.0.7" babel-plugin-const-enum: "npm:^1.0.1" babel-plugin-macros: "npm:^3.1.0" @@ -3071,94 +3064,94 @@ __metadata: peerDependenciesMeta: verdaccio: optional: true - checksum: 10c0/5608b3a2f5134508671e05f51ce0250fd63e3402596e3efac2560a9927781eef52c7458191c09f1fe76a05e3f65c557aadd3a83c8f288c501bdf9504bf7a676e + checksum: 10c0/05a0fa1884899cca77c2f3f199c0d9780a4f466ff6c3d358f5b0544b8805603b481307391ba6947fea074cb9cd6b345823efff6fefc3ed5c8961f87a93001173 languageName: node linkType: hard -"@nx/nx-darwin-arm64@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-darwin-arm64@npm:22.6.4" +"@nx/nx-darwin-arm64@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-darwin-arm64@npm:22.6.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@nx/nx-darwin-x64@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-darwin-x64@npm:22.6.4" +"@nx/nx-darwin-x64@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-darwin-x64@npm:22.6.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@nx/nx-freebsd-x64@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-freebsd-x64@npm:22.6.4" +"@nx/nx-freebsd-x64@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-freebsd-x64@npm:22.6.5" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@nx/nx-linux-arm-gnueabihf@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:22.6.4" +"@nx/nx-linux-arm-gnueabihf@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:22.6.5" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@nx/nx-linux-arm64-gnu@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-linux-arm64-gnu@npm:22.6.4" +"@nx/nx-linux-arm64-gnu@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-linux-arm64-gnu@npm:22.6.5" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-arm64-musl@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-linux-arm64-musl@npm:22.6.4" +"@nx/nx-linux-arm64-musl@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-linux-arm64-musl@npm:22.6.5" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@nx/nx-linux-x64-gnu@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-linux-x64-gnu@npm:22.6.4" +"@nx/nx-linux-x64-gnu@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-linux-x64-gnu@npm:22.6.5" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-x64-musl@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-linux-x64-musl@npm:22.6.4" +"@nx/nx-linux-x64-musl@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-linux-x64-musl@npm:22.6.5" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@nx/nx-win32-arm64-msvc@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-win32-arm64-msvc@npm:22.6.4" +"@nx/nx-win32-arm64-msvc@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-win32-arm64-msvc@npm:22.6.5" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@nx/nx-win32-x64-msvc@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/nx-win32-x64-msvc@npm:22.6.4" +"@nx/nx-win32-x64-msvc@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/nx-win32-x64-msvc@npm:22.6.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@nx/workspace@npm:22.6.4": - version: 22.6.4 - resolution: "@nx/workspace@npm:22.6.4" +"@nx/workspace@npm:22.6.5": + version: 22.6.5 + resolution: "@nx/workspace@npm:22.6.5" dependencies: - "@nx/devkit": "npm:22.6.4" + "@nx/devkit": "npm:22.6.5" "@zkochan/js-yaml": "npm:0.0.7" chalk: "npm:^4.1.0" enquirer: "npm:~2.3.6" - nx: "npm:22.6.4" + nx: "npm:22.6.5" picomatch: "npm:4.0.4" semver: "npm:^7.6.3" tslib: "npm:^2.3.0" yargs-parser: "npm:21.1.1" - checksum: 10c0/7982c937915181a5f6c6070056a69dff8f2463faca43903a46aefdc7f79075e1f588ec3c9b3031533afe2bf2aeb0f9abca7cf8478297d19b5a237d67c556ca55 + checksum: 10c0/9f7749103df1af31e15a2ed7832914e9c595c3c98e9fe9ed65f5f5d955ddf7168a7938e0af9abf48ebdb072d9e51f38b59c7b02e93c2088219a3fcb59369cf0f languageName: node linkType: hard @@ -3527,9 +3520,9 @@ __metadata: linkType: hard "@sigstore/protobuf-specs@npm:^0.5.0": - version: 0.5.0 - resolution: "@sigstore/protobuf-specs@npm:0.5.0" - checksum: 10c0/03c188ce9943a8a89fb5b0257556dcfa9bb4b0bd70c9fa1ab19d26c378870e02d295ba024b89b8c80dc7e856dee046cdd25f6a94473d14d2b383d7b905d62de8 + version: 0.5.1 + resolution: "@sigstore/protobuf-specs@npm:0.5.1" + checksum: 10c0/4284797bcac5f7250b7cb7000a67e76045d38da05a24a5912085b2472e0635efe4db3c6dd118e4023d7ba7ec5adc06cc8c35bf750cf2b39743e73c9f35311fe0 languageName: node linkType: hard @@ -3601,11 +3594,11 @@ __metadata: linkType: hard "@sinonjs/fake-timers@npm:^15.0.0": - version: 15.3.0 - resolution: "@sinonjs/fake-timers@npm:15.3.0" + version: 15.3.2 + resolution: "@sinonjs/fake-timers@npm:15.3.2" dependencies: "@sinonjs/commons": "npm:^3.0.1" - checksum: 10c0/172d21f5200069727f2aa90b35ab60068c1f0652c7d2a43f03bd6c2c2d75b87f4daa9fc7f1402f8c10e0849bb888d15d3364a194339b62307abd3a60cefbb929 + checksum: 10c0/fea39af47e70acf7f6b431b857dc5b50886e1a19d48189bc7f9cf90806a9fdfd4931c04343558724772d429c47fb53df640fc8c8d6ddf6ad66164bd7cbd3220a languageName: node linkType: hard @@ -3917,11 +3910,11 @@ __metadata: linkType: hard "@types/node@npm:*, @types/node@npm:>=13.7.0": - version: 25.5.2 - resolution: "@types/node@npm:25.5.2" + version: 25.6.0 + resolution: "@types/node@npm:25.6.0" dependencies: - undici-types: "npm:~7.18.0" - checksum: 10c0/11e41a85401724cd1a4de6fb7bd4264ec46db10c09fc8cf8d41de4ede0a7063db458348f859ead4ec0929906aa26aaf45a5fef3aa59742ca0521cda9cee52377 + undici-types: "npm:~7.19.0" + checksum: 10c0/d2d2015630ff098a201407f55f5077a20270ae4f465c739b40865cd9933b91b9c5d2b85568eadaf3db0801b91e267333ca7eb39f007428b173d1cdab4b339ac5 languageName: node linkType: hard @@ -4048,104 +4041,104 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^8": - version: 8.58.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.58.0" + version: 8.58.2 + resolution: "@typescript-eslint/eslint-plugin@npm:8.58.2" dependencies: "@eslint-community/regexpp": "npm:^4.12.2" - "@typescript-eslint/scope-manager": "npm:8.58.0" - "@typescript-eslint/type-utils": "npm:8.58.0" - "@typescript-eslint/utils": "npm:8.58.0" - "@typescript-eslint/visitor-keys": "npm:8.58.0" + "@typescript-eslint/scope-manager": "npm:8.58.2" + "@typescript-eslint/type-utils": "npm:8.58.2" + "@typescript-eslint/utils": "npm:8.58.2" + "@typescript-eslint/visitor-keys": "npm:8.58.2" ignore: "npm:^7.0.5" natural-compare: "npm:^1.4.0" ts-api-utils: "npm:^2.5.0" peerDependencies: - "@typescript-eslint/parser": ^8.58.0 + "@typescript-eslint/parser": ^8.58.2 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/ac45c30f6ba9e188a01144708aa845e7ee8bb8a4d4f9aa6d2dce7784852d0821d42b031fee6832069935c3b885feff6d4014e30145b99693d25d7f563266a9f8 + checksum: 10c0/87dd29c7a87461c586e3025cde2a6e35c7cc99e69c3a93ee8254f1523ab6d4d5d322cacd476e42a3aa87581fbcf9039ef528a638a80a5c9beb1c5ebb4cc557e2 languageName: node linkType: hard "@typescript-eslint/parser@npm:^8": - version: 8.58.0 - resolution: "@typescript-eslint/parser@npm:8.58.0" + version: 8.58.2 + resolution: "@typescript-eslint/parser@npm:8.58.2" dependencies: - "@typescript-eslint/scope-manager": "npm:8.58.0" - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/typescript-estree": "npm:8.58.0" - "@typescript-eslint/visitor-keys": "npm:8.58.0" + "@typescript-eslint/scope-manager": "npm:8.58.2" + "@typescript-eslint/types": "npm:8.58.2" + "@typescript-eslint/typescript-estree": "npm:8.58.2" + "@typescript-eslint/visitor-keys": "npm:8.58.2" debug: "npm:^4.4.3" peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/56c7ec21675cec4730760bfa37c29e42e80b4d6444e2beca55fad9ef53731392270d142797482ea798405be0d7e28ec6c9c16a1ee2ee1c94f73d3bf0ed29763c + checksum: 10c0/7ce3e5086b5376a91f2932fda6e0d6777ff457535eff9c133852b21c895dc56933dcda173430352850e77c2437f81c5699fac9c70207abbbd087882766b88758 languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/project-service@npm:8.58.0" +"@typescript-eslint/project-service@npm:8.58.2": + version: 8.58.2 + resolution: "@typescript-eslint/project-service@npm:8.58.2" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.58.0" - "@typescript-eslint/types": "npm:^8.58.0" + "@typescript-eslint/tsconfig-utils": "npm:^8.58.2" + "@typescript-eslint/types": "npm:^8.58.2" debug: "npm:^4.4.3" peerDependencies: typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/e6d0cb2f7708ccb31a2ff9eb35817d4999c26e1f1cd3c607539e21d0c73a234daa77c73ee1163bc4e8b139252d619823c444759f1ddabdd138cab4885e9c9794 + checksum: 10c0/57fa2a54452f9d9058781feb8d99d7a25096d55db15783a552b242d144992ccf893548672d3bc554c1bc0768cd8c80dbb467e9aff0db471ebcc876d4409cf75e languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/scope-manager@npm:8.58.0" +"@typescript-eslint/scope-manager@npm:8.58.2": + version: 8.58.2 + resolution: "@typescript-eslint/scope-manager@npm:8.58.2" dependencies: - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/visitor-keys": "npm:8.58.0" - checksum: 10c0/bd5c16780f22d62359af0f69909f38a15fa3c55e609124a7cd5c2a04322fe41e586d81066f3ad1dcc3c1eff24dbcb48b78d099626d611fbd680c20c005d48f1d + "@typescript-eslint/types": "npm:8.58.2" + "@typescript-eslint/visitor-keys": "npm:8.58.2" + checksum: 10c0/9bf17c32d99db840500dfa4f0504635f6422fa435e0d2f3c58c36a88434d7af7ffe7ba9a6b13bd105dfa0f36a74307955ef2837ec5f1855e34c3af1843c11d36 languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.58.0, @typescript-eslint/tsconfig-utils@npm:^8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.58.0" +"@typescript-eslint/tsconfig-utils@npm:8.58.2, @typescript-eslint/tsconfig-utils@npm:^8.58.2": + version: 8.58.2 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.58.2" peerDependencies: typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/0a07fe1a28b2513e625882bc8d4c4e0c5a105cdbcb987beae12fc66dbe71dc9638013e4d1fa8ad10d828a2acd5e3fed987c189c00d41fed0e880009f99adf1b2 + checksum: 10c0/d3dc874ab43af39245ee8383bb6d39c985e64c43b81a7bbf18b7982047473366c252e19a9fbfe38df30c677b42133aa43a1c0a75e92b8de5d2e64defd4b3a05e languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/type-utils@npm:8.58.0" +"@typescript-eslint/type-utils@npm:8.58.2": + version: 8.58.2 + resolution: "@typescript-eslint/type-utils@npm:8.58.2" dependencies: - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/typescript-estree": "npm:8.58.0" - "@typescript-eslint/utils": "npm:8.58.0" + "@typescript-eslint/types": "npm:8.58.2" + "@typescript-eslint/typescript-estree": "npm:8.58.2" + "@typescript-eslint/utils": "npm:8.58.2" debug: "npm:^4.4.3" ts-api-utils: "npm:^2.5.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/1223733d41f8463be92ef1ad048d546f9663152212b22dc968abbd9f8e4486bd4082e16baa51d2d281e0d4815563bc4b1ecf01684e2940b7897ba17aa26d1196 + checksum: 10c0/1e7248694c15b5e78aeb573aef755513910f6a7ec1842223ec0c8429b6abd7342996de215aefab78520e64d2e8600c9829bdf56132476cb86703fd54f2492467 languageName: node linkType: hard -"@typescript-eslint/types@npm:8.58.0, @typescript-eslint/types@npm:^8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/types@npm:8.58.0" - checksum: 10c0/f2fe1321758a04591c20d77caba956ae76b77cff0b976a0224b37077d80b1ebd826874d15ec79c3a3b7d57ee5679e5d10756db1b082bde3d51addbd3a8431d38 +"@typescript-eslint/types@npm:8.58.2, @typescript-eslint/types@npm:^8.58.2": + version: 8.58.2 + resolution: "@typescript-eslint/types@npm:8.58.2" + checksum: 10c0/6707c1a2ec921b9ae441b35d9cb4e0af11673a67e332a366e3033f1d558ff5db4f39021872c207fb361841670e9ffcc4981f19eb21e4495a3a031d02015637a7 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.58.0" +"@typescript-eslint/typescript-estree@npm:8.58.2": + version: 8.58.2 + resolution: "@typescript-eslint/typescript-estree@npm:8.58.2" dependencies: - "@typescript-eslint/project-service": "npm:8.58.0" - "@typescript-eslint/tsconfig-utils": "npm:8.58.0" - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/visitor-keys": "npm:8.58.0" + "@typescript-eslint/project-service": "npm:8.58.2" + "@typescript-eslint/tsconfig-utils": "npm:8.58.2" + "@typescript-eslint/types": "npm:8.58.2" + "@typescript-eslint/visitor-keys": "npm:8.58.2" debug: "npm:^4.4.3" minimatch: "npm:^10.2.2" semver: "npm:^7.7.3" @@ -4153,32 +4146,32 @@ __metadata: ts-api-utils: "npm:^2.5.0" peerDependencies: typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/a8cb94cb765b27740a54f9b5378bd8f0dc49e301ceed99a0791dc9d1f61c2a54e3212f7ed9120c8c2df80104ad3117150cf5e7fe8a0b7eec3ed04969a79b103e + checksum: 10c0/60a323f60eff9b4bb6eb3121c5f6292e7962517a329a8a9f828e8f07516de78e6a7c1b1b1cfd732f39edf184fe57828ca557fbc63b74c61b54bcb679a69e249c languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/utils@npm:8.58.0" +"@typescript-eslint/utils@npm:8.58.2": + version: 8.58.2 + resolution: "@typescript-eslint/utils@npm:8.58.2" dependencies: "@eslint-community/eslint-utils": "npm:^4.9.1" - "@typescript-eslint/scope-manager": "npm:8.58.0" - "@typescript-eslint/types": "npm:8.58.0" - "@typescript-eslint/typescript-estree": "npm:8.58.0" + "@typescript-eslint/scope-manager": "npm:8.58.2" + "@typescript-eslint/types": "npm:8.58.2" + "@typescript-eslint/typescript-estree": "npm:8.58.2" peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - checksum: 10c0/457e01a6e6d954dbfe13c49ece3cf8a55e5d8cf19ea9ae7086c0e205d89e3cdbb91153062ab440d2e78ad3f077b174adc42bfb1b6fc24299020a0733e7f9c11c + checksum: 10c0/d83e6c7c1b01236d255cabe2a5dc5384eedebc9f9af6aa19cc2ab7d8b280f86912f2b1a87659b2754919afd2606820b4e53862ac91970794e2980bc97487537c languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.58.0": - version: 8.58.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.58.0" +"@typescript-eslint/visitor-keys@npm:8.58.2": + version: 8.58.2 + resolution: "@typescript-eslint/visitor-keys@npm:8.58.2" dependencies: - "@typescript-eslint/types": "npm:8.58.0" + "@typescript-eslint/types": "npm:8.58.2" eslint-visitor-keys: "npm:^5.0.0" - checksum: 10c0/75f3c9c097a308cc6450822a0f81d44c8b79b524e99dd2c41ded347b12f148ab3bd459ce9cc6bd00f8f0725c5831baab6d2561596ead3394ab76dddbeb32cce1 + checksum: 10c0/6775a63dbafe7a305f0cf3f0c5eb077e30dba8a60022e4ce3220669c7f1e742c6ea2ebff8c6c0288dc17eeef8f4015089a23abbdc82a6a9382abe4a77950b695 languageName: node linkType: hard @@ -4345,9 +4338,9 @@ __metadata: version: 0.0.0-use.local resolution: "@zeroshotbuilders/agent-experiments@workspace:packages/agent-experiments" dependencies: - "@zeroshotbuilders/commons-testing": "npm:*" + "@zeroshotbuilders/commons-testing": "npm:^0.0.3" + "@zeroshotbuilders/docling-utils": "npm:^0.0.3" pdfkit: "npm:^0.16.0" - unpdf: "npm:^1.4.0" peerDependencies: "@nestjs/common": ">=10.0.0" "@nestjs/core": ">=10.0.0" @@ -4369,7 +4362,7 @@ __metadata: languageName: unknown linkType: soft -"@zeroshotbuilders/commons-testing@npm:*, @zeroshotbuilders/commons-testing@workspace:packages/commons-testing": +"@zeroshotbuilders/commons-testing@npm:^0.0.3, @zeroshotbuilders/commons-testing@workspace:packages/commons-testing": version: 0.0.0-use.local resolution: "@zeroshotbuilders/commons-testing@workspace:packages/commons-testing" dependencies: @@ -4406,6 +4399,15 @@ __metadata: languageName: unknown linkType: soft +"@zeroshotbuilders/docling-utils@npm:^0.0.3, @zeroshotbuilders/docling-utils@workspace:packages/docling-utils": + version: 0.0.0-use.local + resolution: "@zeroshotbuilders/docling-utils@workspace:packages/docling-utils" + peerDependencies: + "@nestjs/common": ">=10.0.0" + "@zeroshotbuilders/commons": ">=0.0.1" + languageName: unknown + linkType: soft + "@zeroshotbuilders/openai-utils@workspace:packages/openai-utils": version: 0.0.0-use.local resolution: "@zeroshotbuilders/openai-utils@workspace:packages/openai-utils" @@ -4491,6 +4493,13 @@ __metadata: languageName: node linkType: hard +"abort-controller-x@npm:^0.5.0": + version: 0.5.0 + resolution: "abort-controller-x@npm:0.5.0" + checksum: 10c0/a4eff7a043cc449a968c392f52a4b68bc04f0d4bebd24bf25f5cca0d49f38acd364a892dae85c9642931ff151b92902b850363be288275a517c52c10c569e898 + languageName: node + linkType: hard + "abort-controller@npm:^3.0.0": version: 3.0.0 resolution: "abort-controller@npm:3.0.0" @@ -4818,7 +4827,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.3, async@npm:^3.2.4, async@npm:^3.2.6": +"async@npm:^3.2.3, async@npm:^3.2.4": version: 3.2.6 resolution: "async@npm:3.2.6" checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 @@ -4832,25 +4841,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:1.12.0": - version: 1.12.0 - resolution: "axios@npm:1.12.0" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/44a1e4cfb69a2d59aa12bbc441a336e5c18e87c02b904c509fd33607d94e8cb8cc221c17e9d53f67841a4efe13abf1aa1497c85df390cdb8681ee723998d11b0 - languageName: node - linkType: hard - -"axios@npm:^1.7.7": - version: 1.14.0 - resolution: "axios@npm:1.14.0" +"axios@npm:1.15.0, axios@npm:^1.7.7": + version: 1.15.0 + resolution: "axios@npm:1.15.0" dependencies: follow-redirects: "npm:^1.15.11" form-data: "npm:^4.0.5" proxy-from-env: "npm:^2.1.0" - checksum: 10c0/2541f4aa215a7d1842429dad006fc682d82bc0e74bd14500823f7d8cce3bbae0e0a8c328c8538946718f366ab8ce5a4c12e9ad40e5a0f3482ff8bff0cd115d45 + checksum: 10c0/47e0f860e98d4d7aa145e89ce0cae00e1fb0f1d2485f065c21fce955ddb1dba4103a46bd0e47acd18a27208a7f62c96249e620db575521b92a968619ab133409 languageName: node linkType: hard @@ -5104,8 +5102,8 @@ __metadata: linkType: hard "bare-fs@npm:^4.0.1, bare-fs@npm:^4.5.5": - version: 4.6.0 - resolution: "bare-fs@npm:4.6.0" + version: 4.7.1 + resolution: "bare-fs@npm:4.7.1" dependencies: bare-events: "npm:^2.5.4" bare-path: "npm:^3.0.0" @@ -5117,7 +5115,7 @@ __metadata: peerDependenciesMeta: bare-buffer: optional: true - checksum: 10c0/fe7fce0c2b8f269ec1ff55d034b39201e4cd3100d9808950a267158603e1a85b37bda54c83237b3828ec6989094bef025ac4f44177d72a3d2ce26d69daff81d5 + checksum: 10c0/4dc67f6dd0264b817941c2b8cbfc42b6abc3980984cdfd129c4d1f22517cb29f6b99a69fc1e3e87f3a9c997e8c94114604bb67fff10574b2adf0966510cf0222 languageName: node linkType: hard @@ -5138,8 +5136,8 @@ __metadata: linkType: hard "bare-stream@npm:^2.6.4": - version: 2.12.0 - resolution: "bare-stream@npm:2.12.0" + version: 2.13.0 + resolution: "bare-stream@npm:2.13.0" dependencies: streamx: "npm:^2.25.0" teex: "npm:^1.0.1" @@ -5154,7 +5152,7 @@ __metadata: optional: true bare-events: optional: true - checksum: 10c0/b2f306e2f23f8a53572c8df90ad71dda0d1565a7de70fef14c95259fe93421de20dfb9420b382698468cfbac4010fc260ba5bd75cca3965ebe47695d1679ad82 + checksum: 10c0/3c81f169d3bda8af430c5cb0a1cf29f3f697f25fb0863941582112e588680fdfe28357083edcee4c099d3df5a7e3f4145ccc9552d9c7d9b5cab195644fff53d5 languageName: node linkType: hard @@ -5182,11 +5180,11 @@ __metadata: linkType: hard "baseline-browser-mapping@npm:^2.10.12": - version: 2.10.15 - resolution: "baseline-browser-mapping@npm:2.10.15" + version: 2.10.19 + resolution: "baseline-browser-mapping@npm:2.10.19" bin: baseline-browser-mapping: dist/cli.cjs - checksum: 10c0/0bbcdefe842e79a1bcded41f7ffd6cca7a89edc035cfabae84ed80f19a0318de3f909ee64e184c39165cef12213eba89335745b101eeace2a4eaf290680d3af2 + checksum: 10c0/d7ab47484477d16e29b711b74c56791d751701e796a133fcd6b72cf7f73f95cb72c0bc02070c3a93e78210cd02a4dc6d573191ce6920b863b3a9d8e9aa893bcf languageName: node linkType: hard @@ -5279,21 +5277,21 @@ __metadata: linkType: hard "brace-expansion@npm:^1.1.7": - version: 1.1.13 - resolution: "brace-expansion@npm:1.1.13" + version: 1.1.14 + resolution: "brace-expansion@npm:1.1.14" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10c0/384c61bb329b6adfdcc0cbbdd108dc19fb5f3e84ae15a02a74f94c6c791b5a9b035aae73b2a51929a8a478e2f0f212a771eb6a8b5b514cccfb8d0c9f2ce8cbd8 + checksum: 10c0/b6fdac832bc4e36a753658c9ed052c2e1a2be221763b002df25d1efbf7d21724334e726a6cd5eadc72a4b19ec3efb632d629cc003bc9c62f7af7a7915ffa4385 languageName: node linkType: hard "brace-expansion@npm:^2.0.1, brace-expansion@npm:^2.0.2": - version: 2.0.3 - resolution: "brace-expansion@npm:2.0.3" + version: 2.1.0 + resolution: "brace-expansion@npm:2.1.0" dependencies: balanced-match: "npm:^1.0.0" - checksum: 10c0/468436c9b2fa6f9e64d0cff8784b21300677571a7196e258593e95e7c3db9973a80fbafdb0f01404d5d298a04dc666eae1fc3c9052e2edbb9f2510541deeddfe + checksum: 10c0/439cedf3e23d7993b37919f1d6fdc653ec21a42437ec3e7460bea9ca8b17edf7a24a633273c31d61aa4335877cf29a443f1871814131c87997a1e6223e1f1502 languageName: node linkType: hard @@ -5324,6 +5322,15 @@ __metadata: languageName: node linkType: hard +"browserify-zlib@npm:^0.2.0": + version: 0.2.0 + resolution: "browserify-zlib@npm:0.2.0" + dependencies: + pako: "npm:~1.0.5" + checksum: 10c0/9ab10b6dc732c6c5ec8ebcbe5cb7fe1467f97402c9b2140113f47b5f187b9438f93a8e065d8baf8b929323c18324fbf1105af479ee86d9d36cab7d7ef3424ad9 + languageName: node + linkType: hard + "browserslist@npm:^4.24.0, browserslist@npm:^4.28.1": version: 4.28.2 resolution: "browserslist@npm:4.28.2" @@ -5442,8 +5449,8 @@ __metadata: linkType: hard "bullmq@npm:^5.0.0": - version: 5.73.0 - resolution: "bullmq@npm:5.73.0" + version: 5.74.1 + resolution: "bullmq@npm:5.74.1" dependencies: cron-parser: "npm:4.9.0" ioredis: "npm:5.10.1" @@ -5452,7 +5459,7 @@ __metadata: semver: "npm:7.7.4" tslib: "npm:2.8.1" uuid: "npm:11.1.0" - checksum: 10c0/15da7665438ade0664ea4dd493cb7b991b077396e3ed26d43edf84a9230aab051ce424e87fc9863e822f3e6e3a5c7066648c486f468fe9813c8fb00ec69f31ce + checksum: 10c0/2ab22676ef7b56f3d1c4fb64f345bcd132ff04f60c271d820372fc988220e6e1316d1332173c1ef84bf70a1279c1b680c401385ba4af7a1f809995c9859cbfaa languageName: node linkType: hard @@ -5557,9 +5564,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001782": - version: 1.0.30001785 - resolution: "caniuse-lite@npm:1.0.30001785" - checksum: 10c0/c537e35063f857d3266375d60ed89d46258a912d4b562e7768fb1b02bbc4c36982d4ec7d25451c41e3565640d926a968869e12d9eac3caf444564d857f1f674c + version: 1.0.30001788 + resolution: "caniuse-lite@npm:1.0.30001788" + checksum: 10c0/d3c4695d0e7a1e95194cc5072e26db59cbcd25adfff64253859213c1a04ce9bc17f7b8ec8b11908ac1ecc6c1a0caf95fae0aec064a64b8df03286dffa629ce8a languageName: node linkType: hard @@ -5934,9 +5941,9 @@ __metadata: linkType: hard "content-disposition@npm:^1.0.0": - version: 1.0.1 - resolution: "content-disposition@npm:1.0.1" - checksum: 10c0/bd7ff1fe8d2542d3a2b9a29428cc3591f6ac27bb5595bba2c69664408a68f9538b14cbd92479796ea835b317a09a527c8c7209c4200381dedb0c34d3b658849e + version: 1.1.0 + resolution: "content-disposition@npm:1.1.0" + checksum: 10c0/94e0aef65873e69330f5f187fbc44ebce593bdcb8013dd8a68b7d0f159ca089bd30db3f8095d829f81c341695b60a6085ee6e15e6d775c4a325b586cc8d91974 languageName: node linkType: hard @@ -6456,7 +6463,7 @@ __metadata: languageName: node linkType: hard -"docker-compose@npm:^1.3.2": +"docker-compose@npm:^1.4.2": version: 1.4.2 resolution: "docker-compose@npm:1.4.2" dependencies: @@ -6477,7 +6484,7 @@ __metadata: languageName: node linkType: hard -"dockerode@npm:^4.0.5, dockerode@npm:^4.0.9": +"dockerode@npm:^4.0.10, dockerode@npm:^4.0.5": version: 4.0.10 resolution: "dockerode@npm:4.0.10" dependencies: @@ -6556,21 +6563,19 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.7": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: "npm:^10.8.5" +"ejs@npm:5.0.1": + version: 5.0.1 + resolution: "ejs@npm:5.0.1" bin: ejs: bin/cli.js - checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 + checksum: 10c0/7791e4d621e1c050b4310b87b75b43bb18de20cbe4560ee4640693ec052a19ae884df838ed4e391c26ec25530af90b58c35a3465462b6b1734e4b084ce45f872 languageName: node linkType: hard "electron-to-chromium@npm:^1.5.328": - version: 1.5.331 - resolution: "electron-to-chromium@npm:1.5.331" - checksum: 10c0/a7687f3bb4df4640bfeac08d1586531624917452bbbbeb67ccf2b07f111e584321e60945da080df664cbb57f272307d7867c8b93e279150ce8385f13d5178c96 + version: 1.5.337 + resolution: "electron-to-chromium@npm:1.5.337" + checksum: 10c0/0703de2a58adc6fa48531d9cf7c8002d69acdce0fa3af366a07655e89481c8414e2993d40bc4a27b6338eeec0dac9e31651a55950cecc5301e71d007cba5223d languageName: node linkType: hard @@ -7237,15 +7242,6 @@ __metadata: languageName: node linkType: hard -"filelist@npm:^1.0.4": - version: 1.0.6 - resolution: "filelist@npm:1.0.6" - dependencies: - minimatch: "npm:^5.0.1" - checksum: 10c0/6ee725bec3e1936d680a45f14439b224d9f7c71658c145addcf551dd82f03d608522eb6b191aa086b392bc3e52ed4ce0ed8d78e24b203e6c5e867560a05d1121 - languageName: node - linkType: hard - "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -7346,13 +7342,13 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.15.11, follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" +"follow-redirects@npm:^1.15.11": + version: 1.16.0 + resolution: "follow-redirects@npm:1.16.0" peerDependenciesMeta: debug: optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 + checksum: 10c0/a1e2900163e6f1b4d1ed5c221b607f41decbab65534c63fe7e287e40a5d552a6496e7d9d7d976fa4ba77b4c51c11e5e9f683f10b43011ea11e442ff128d0e181 languageName: node linkType: hard @@ -7589,7 +7585,7 @@ __metadata: languageName: node linkType: hard -"get-port@npm:^7.1.0": +"get-port@npm:^7.1.0, get-port@npm:^7.2.0": version: 7.2.0 resolution: "get-port@npm:7.2.0" checksum: 10c0/4ed741d9008ad15a24e2098c8971918025cc8241624245e704ecc62bb65160db5c79de5d7112acdaabccbe0714cd0704008c74d43a1f7a24a5875e58b84621be @@ -7842,9 +7838,9 @@ __metadata: linkType: hard "hono@npm:^4.11.4": - version: 4.12.10 - resolution: "hono@npm:4.12.10" - checksum: 10c0/3fed7c0c0847968ae51910dd06bc4b64cc336af24ee913efdc105de80b467ddaa9e4f03a2814cb73771622eabbe3e7699998dc0536fe35acb0bac9f5d0e67aa1 + version: 4.12.14 + resolution: "hono@npm:4.12.14" + checksum: 10c0/78de4c98a9a3da0f067e38dcc4bd27f0d82b45d146ac39f5ca688515ee482c0a2e704d2ac6c1ee91ad17596b7c52b3e4b9483acd9c238d42f6ebcb43414a71b6 languageName: node linkType: hard @@ -8462,19 +8458,6 @@ __metadata: languageName: node linkType: hard -"jake@npm:^10.8.5": - version: 10.9.4 - resolution: "jake@npm:10.9.4" - dependencies: - async: "npm:^3.2.6" - filelist: "npm:^1.0.4" - picocolors: "npm:^1.1.1" - bin: - jake: bin/cli.js - checksum: 10c0/bb52f000340d4a32f1a3893b9abe56ef2b77c25da4dbf2c0c874a8159d082dddda50a5ad10e26060198bd645b928ba8dba3b362710f46a247e335321188c5a9c - languageName: node - linkType: hard - "jest-changed-files@npm:^29.7.0": version: 29.7.0 resolution: "jest-changed-files@npm:29.7.0" @@ -9806,9 +9789,9 @@ __metadata: linkType: hard "lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": - version: 11.2.7 - resolution: "lru-cache@npm:11.2.7" - checksum: 10c0/549cdb59488baa617135fc12159cafb1a97f91079f35093bb3bcad72e849fc64ace636d244212c181dfdf1a99bbfa90757ff303f98561958ee4d0f885d9bd5f7 + version: 11.3.5 + resolution: "lru-cache@npm:11.3.5" + checksum: 10c0/5b54ef7b88afb4bd25b7a778f1b2b1cde32d9770913e530da34ab203cf0442413bcaa6e372800cbab9562557a4480e4d8bf32e3a368bb5a91b12218eca085c66 languageName: node linkType: hard @@ -10100,7 +10083,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1, minimatch@npm:^5.1.0": +"minimatch@npm:^5.1.0": version: 5.1.9 resolution: "minimatch@npm:5.1.9" dependencies: @@ -10437,23 +10420,23 @@ __metadata: languageName: node linkType: hard -"nice-grpc-common@npm:^2.0.2": - version: 2.0.2 - resolution: "nice-grpc-common@npm:2.0.2" +"nice-grpc-common@npm:^2.0.3": + version: 2.0.3 + resolution: "nice-grpc-common@npm:2.0.3" dependencies: ts-error: "npm:^1.0.6" - checksum: 10c0/9eb8a44e1a5c7051cf0e4a06dc7fda2c7abb6cfbcbb746806418c2c58f3f0075212c61bbce54239a204e6a552065f0fa92dfedcf3402dc16220b2ffaee4ab857 + checksum: 10c0/814377b5978a84466a57fd7e996d93f80924555d701900db3e7e5c79b4e775e6a9b71e5f0f11fb719d7d94472b62dbdffdabee405bad1ea185639962794d5b1d languageName: node linkType: hard "nice-grpc@npm:^2.1.0": - version: 2.1.14 - resolution: "nice-grpc@npm:2.1.14" + version: 2.1.15 + resolution: "nice-grpc@npm:2.1.15" dependencies: "@grpc/grpc-js": "npm:^1.14.0" - abort-controller-x: "npm:^0.4.0" - nice-grpc-common: "npm:^2.0.2" - checksum: 10c0/e9d0978d6167090b3fe7bb2ecb3b6cfbfcdb0da08a2ab20ca570d2ef38eee6e66da47860b431c47c228e2bf74fe6c0de2e382425ccdcaba95e4fffaad139ea9c + abort-controller-x: "npm:^0.5.0" + nice-grpc-common: "npm:^2.0.3" + checksum: 10c0/2dd0ab483ac72f92ceabdcf75b8ab3d61f982846d479f0a03cc6e0226cfa097d9daf02a902c108c8552adef2fe132f815444fbd482c59c9e0ef261f589c94b38 languageName: node linkType: hard @@ -10806,32 +10789,31 @@ __metadata: languageName: node linkType: hard -"nx@npm:22.6.4, nx@npm:>=21.5.3 < 23.0.0, nx@npm:^22.6.4": - version: 22.6.4 - resolution: "nx@npm:22.6.4" +"nx@npm:22.6.5, nx@npm:>=21.5.3 < 23.0.0, nx@npm:^22.6.4": + version: 22.6.5 + resolution: "nx@npm:22.6.5" dependencies: - "@ltd/j-toml": "npm:^1.38.0" "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:22.6.4" - "@nx/nx-darwin-x64": "npm:22.6.4" - "@nx/nx-freebsd-x64": "npm:22.6.4" - "@nx/nx-linux-arm-gnueabihf": "npm:22.6.4" - "@nx/nx-linux-arm64-gnu": "npm:22.6.4" - "@nx/nx-linux-arm64-musl": "npm:22.6.4" - "@nx/nx-linux-x64-gnu": "npm:22.6.4" - "@nx/nx-linux-x64-musl": "npm:22.6.4" - "@nx/nx-win32-arm64-msvc": "npm:22.6.4" - "@nx/nx-win32-x64-msvc": "npm:22.6.4" + "@nx/nx-darwin-arm64": "npm:22.6.5" + "@nx/nx-darwin-x64": "npm:22.6.5" + "@nx/nx-freebsd-x64": "npm:22.6.5" + "@nx/nx-linux-arm-gnueabihf": "npm:22.6.5" + "@nx/nx-linux-arm64-gnu": "npm:22.6.5" + "@nx/nx-linux-arm64-musl": "npm:22.6.5" + "@nx/nx-linux-x64-gnu": "npm:22.6.5" + "@nx/nx-linux-x64-musl": "npm:22.6.5" + "@nx/nx-win32-arm64-msvc": "npm:22.6.5" + "@nx/nx-win32-x64-msvc": "npm:22.6.5" "@yarnpkg/lockfile": "npm:^1.1.0" "@yarnpkg/parsers": "npm:3.0.2" "@zkochan/js-yaml": "npm:0.0.7" - axios: "npm:1.12.0" + axios: "npm:1.15.0" cli-cursor: "npm:3.1.0" cli-spinners: "npm:2.6.1" cliui: "npm:^8.0.1" dotenv: "npm:~16.4.5" dotenv-expand: "npm:~11.0.6" - ejs: "npm:^3.1.7" + ejs: "npm:5.0.1" enquirer: "npm:~2.3.6" figures: "npm:3.2.0" flat: "npm:^5.0.2" @@ -10847,6 +10829,7 @@ __metadata: picocolors: "npm:^1.1.0" resolve.exports: "npm:2.0.3" semver: "npm:^7.6.3" + smol-toml: "npm:1.6.1" string-width: "npm:^4.2.3" tar-stream: "npm:~2.2.0" tmp: "npm:~0.2.1" @@ -10888,7 +10871,7 @@ __metadata: bin: nx: bin/nx.js nx-cloud: bin/nx-cloud.js - checksum: 10c0/96ceb9691abb7bec654377394344491cce5fa8b4c888c18a9954850fa2c3d1268c62690653b3eaeec52704aa70cc429cfd8866ae8e5931db3d53719302193680 + checksum: 10c0/f83c002c7f7b5312ab05fdf503f6a107bbf11eabe85df0e8426f7e172d9adbc2bd24f887fb7e1aa08b28b1a27b36ed115c19c8531cd06a3d1cabdbef25c0e0c9 languageName: node linkType: hard @@ -10899,7 +10882,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.13.3": +"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 @@ -10979,8 +10962,8 @@ __metadata: linkType: hard "openai@npm:^6": - version: 6.33.0 - resolution: "openai@npm:6.33.0" + version: 6.34.0 + resolution: "openai@npm:6.34.0" peerDependencies: ws: ^8.18.0 zod: ^3.25 || ^4.0 @@ -10991,7 +10974,7 @@ __metadata: optional: true bin: openai: bin/cli - checksum: 10c0/158b6466469d269e944ea64453e32f116193523f0fbe93e73193ebfd84e1be40d5bc2d6dbfada327d8b7c70ede4c6530c5e023e1dfb62a11b8706c46c6dc1889 + checksum: 10c0/0d9652aea4b07d9be0f48fc30510c1caa05c24891ce5cdd6286df34b4d03f7a39ee289ff507e7c1a4c9cc2727a0ea799f1d545313ececd9979e4b3688583a1b5 languageName: node linkType: hard @@ -11233,6 +11216,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:~1.0.5": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 10c0/86dd99d8b34c3930345b8bbeb5e1cd8a05f608eeb40967b293f72fe469d0e9c88b783a8777e4cc7dc7c91ce54c5e93d88ff4b4f060e6ff18408fd21030d9ffbe + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -11539,7 +11529,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:4.0.4, picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": +"picomatch@npm:4.0.4, picomatch@npm:^4.0.2, picomatch@npm:^4.0.3, picomatch@npm:^4.0.4": version: 4.0.4 resolution: "picomatch@npm:4.0.4" checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 @@ -11591,9 +11581,11 @@ __metadata: linkType: hard "png-js@npm:^1.0.0": - version: 1.0.0 - resolution: "png-js@npm:1.0.0" - checksum: 10c0/b591107bb888c66cb1799327774f73f2865a366b5992ed7335c81610eab0e9cb4f13fb396e3c00e28781ada6ccde170b566209e9df833a2abe71d11da55aea85 + version: 1.1.0 + resolution: "png-js@npm:1.1.0" + dependencies: + browserify-zlib: "npm:^0.2.0" + checksum: 10c0/61e275cb424b914fbc01c2a1b0096857f214c5fee45054c713dec1ad320760f4dd61f28bb0b3b0c139bd8c49def8891b02ca4018238e7b5f14bb671cd1ca7874 languageName: node linkType: hard @@ -11654,11 +11646,11 @@ __metadata: linkType: hard "prettier@npm:^3.8.1": - version: 3.8.1 - resolution: "prettier@npm:3.8.1" + version: 3.8.3 + resolution: "prettier@npm:3.8.3" bin: prettier: bin/prettier.cjs - checksum: 10c0/33169b594009e48f570471271be7eac7cdcf88a209eed39ac3b8d6d78984039bfa9132f82b7e6ba3b06711f3bfe0222a62a1bfb87c43f50c25a83df1b78a2c42 + checksum: 10c0/754816fd7593eb80f6376d7476d463e832c38a12f32775a82683adb6e35b772b1f484d65f19401507b983a8c8a7cd5a4a9f12006bd56491e8f35503473f77473 languageName: node linkType: hard @@ -11793,8 +11785,8 @@ __metadata: linkType: hard "protobufjs@npm:^7.2.5, protobufjs@npm:^7.3.2, protobufjs@npm:^7.5.3": - version: 7.5.4 - resolution: "protobufjs@npm:7.5.4" + version: 7.5.5 + resolution: "protobufjs@npm:7.5.5" dependencies: "@protobufjs/aspromise": "npm:^1.1.2" "@protobufjs/base64": "npm:^1.1.2" @@ -11808,7 +11800,7 @@ __metadata: "@protobufjs/utf8": "npm:^1.1.0" "@types/node": "npm:>=13.7.0" long: "npm:^5.0.0" - checksum: 10c0/913b676109ffb3c05d3d31e03a684e569be91f3bba8613da4a683d69d9dba948daa2afd7d2e7944d1aa6c417890c35d9d9a8883c1160affafb0f9670d59ef722 + checksum: 10c0/3d48896a916761e3e60b52f80027eb4fba3f5a6e3f8461e04939db18812db2cb0db4c73d03e1134a960e99525ae1d236f076a0bc01273016f573b76f33ffbd47 languageName: node linkType: hard @@ -11829,13 +11821,6 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - "proxy-from-env@npm:^2.1.0": version: 2.1.0 resolution: "proxy-from-env@npm:2.1.0" @@ -11875,11 +11860,11 @@ __metadata: linkType: hard "qs@npm:^6.14.0, qs@npm:^6.14.1": - version: 6.15.0 - resolution: "qs@npm:6.15.0" + version: 6.15.1 + resolution: "qs@npm:6.15.1" dependencies: side-channel: "npm:^1.1.0" - checksum: 10c0/ff341078a78a991d8a48b4524d52949211447b4b1ad907f489cac0770cbc346a28e47304455c0320e5fb000f8762d64b03331e3b71865f663bf351bcba8cdb4b + checksum: 10c0/19ee504f0ebff72598503e38cd6d9bd7b52a8ab62ae18b1e6bee3d4db58469bd65871ef1893a881bafb0f80ef2f9ab586e1f255cf25cc8d816c0f5a704721d97 languageName: node linkType: hard @@ -12212,28 +12197,30 @@ __metadata: linkType: hard "resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.11": - version: 1.22.11 - resolution: "resolve@npm:1.22.11" + version: 1.22.12 + resolution: "resolve@npm:1.22.12" dependencies: + es-errors: "npm:^1.3.0" is-core-module: "npm:^2.16.1" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 + checksum: 10c0/b16dc9b537c02e8c3388f7d3dcff9741d3071625f9a97ac1c885f2b0ca51e78df22328fb6d6ef214dd9101fb7cfc19aa2836fe3410402a94f3f7b8639c7149bf languageName: node linkType: hard "resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.11#optional!builtin": - version: 1.22.11 - resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" + version: 1.22.12 + resolution: "resolve@patch:resolve@npm%3A1.22.12#optional!builtin::version=1.22.12&hash=c3c19d" dependencies: + es-errors: "npm:^1.3.0" is-core-module: "npm:^2.16.1" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 + checksum: 10c0/fc6519984ae1f894d877c0060ba8b1f5ba3bc0e85a02f74e141929c118c23d74d9735619a9cc2965397387e514884245c65d72a40731dcb6cfc84c7bcdc8321e languageName: node linkType: hard @@ -12517,12 +12504,12 @@ __metadata: linkType: hard "side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" + version: 1.0.1 + resolution: "side-channel-list@npm:1.0.1" dependencies: es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + object-inspect: "npm:^1.13.4" + checksum: 10c0/d346c787fd2f9f1c2fdea14f00e8250118db0e7596d85a6cb9faa75f105d31a73a8f7a341c93d7df2a2429098c3d37a77bd3be9e88c37094b8c01807bc77c7a2 languageName: node linkType: hard @@ -12631,6 +12618,13 @@ __metadata: languageName: node linkType: hard +"smol-toml@npm:1.6.1": + version: 1.6.1 + resolution: "smol-toml@npm:1.6.1" + checksum: 10c0/511a78722f99c7616fdb46af708de3d7e81434b5a3d58061166da73f28bfc6cae4f0cd04683f60515b9c490cd10152fce72287c960b337419c0299cc1f0f2a22 + languageName: node + linkType: hard + "socks-proxy-agent@npm:^8.0.3": version: 8.0.5 resolution: "socks-proxy-agent@npm:8.0.5" @@ -13141,8 +13135,8 @@ __metadata: linkType: hard "testcontainers@npm:^11.13.0": - version: 11.13.0 - resolution: "testcontainers@npm:11.13.0" + version: 11.14.0 + resolution: "testcontainers@npm:11.14.0" dependencies: "@balena/dockerignore": "npm:^1.0.2" "@types/dockerode": "npm:^4.0.1" @@ -13150,16 +13144,16 @@ __metadata: async-lock: "npm:^1.4.1" byline: "npm:^5.0.0" debug: "npm:^4.4.3" - docker-compose: "npm:^1.3.2" - dockerode: "npm:^4.0.9" - get-port: "npm:^7.1.0" + docker-compose: "npm:^1.4.2" + dockerode: "npm:^4.0.10" + get-port: "npm:^7.2.0" proper-lockfile: "npm:^4.1.2" properties-reader: "npm:^3.0.1" ssh-remote-port-forward: "npm:^1.0.4" tar-fs: "npm:^3.1.2" tmp: "npm:^0.2.5" - undici: "npm:^7.24.3" - checksum: 10c0/e8945ce6537d6768fddf908730c82aaa783e8ec541382a2c0fee2c2eae9559b3177106938364b92469e18e71b40dc0bdf6224fb346a0ba44f04a398b63fc1cc1 + undici: "npm:^7.24.5" + checksum: 10c0/a94294bb5f51a05c01252b7e0cdaa321696bed92a42d5d72e1467ae27d2a6547a63e287d8153b748dda3578df1ee08c1bf882919e6223ed3a26fefe91da88326 languageName: node linkType: hard @@ -13221,12 +13215,12 @@ __metadata: linkType: hard "tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" + version: 0.2.16 + resolution: "tinyglobby@npm:0.2.16" dependencies: fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.3" - checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 + picomatch: "npm:^4.0.4" + checksum: 10c0/f2e09fd93dd95c41e522113b686ff6f7c13020962f8698a864a257f3d7737599afc47722b7ab726e12f8a813f779906187911ff8ee6701ede65072671a7e934b languageName: node linkType: hard @@ -13610,10 +13604,10 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~7.18.0": - version: 7.18.2 - resolution: "undici-types@npm:7.18.2" - checksum: 10c0/85a79189113a238959d7a647368e4f7c5559c3a404ebdb8fc4488145ce9426fcd82252a844a302798dfc0e37e6fb178ff481ed03bc4caf634c5757d9ef43521d +"undici-types@npm:~7.19.0": + version: 7.19.2 + resolution: "undici-types@npm:7.19.2" + checksum: 10c0/7159f10546f9f6c47d36776bb1bbf8671e87c1e587a6fee84ae1f111ae8de4f914efa8ca0dfcd224f4f4a9dfc3f6028f627ccb5ddaccf82d7fd54671b89fac3e languageName: node linkType: hard @@ -13626,10 +13620,10 @@ __metadata: languageName: node linkType: hard -"undici@npm:^7.24.3": - version: 7.24.7 - resolution: "undici@npm:7.24.7" - checksum: 10c0/779c67e81677324763ea00ea547ba74757472ebe2625d046d592434ee19d9d148fe0eaef7006c0185096614249ac0f179e7f559b202b518af8d587e9548559b6 +"undici@npm:^7.24.5": + version: 7.25.0 + resolution: "undici@npm:7.25.0" + checksum: 10c0/02a0b45dc14eb91bc488948750232450fe52f27a6b08086d6ac6736bb47908d600fe3a96d346f12eab24729c782e5c2f693bc8e8eca6696d4e4c09b1ed4cb4ec languageName: node linkType: hard @@ -13699,14 +13693,14 @@ __metadata: linkType: hard "unpdf@npm:^1.4.0": - version: 1.4.0 - resolution: "unpdf@npm:1.4.0" + version: 1.6.0 + resolution: "unpdf@npm:1.6.0" peerDependencies: "@napi-rs/canvas": ^0.1.69 peerDependenciesMeta: "@napi-rs/canvas": optional: true - checksum: 10c0/dd248e26c79b12d8a2e68f3f8d959f42d6d0bb14878928d2601bbb56da6d0ba0f207d14dffe64028cdd9afc228b8c11b3af08655dad19717a8cec7072b8942c8 + checksum: 10c0/c4d94b58f1f0a1153c68b0b7b6523aa671e16010ebcc7dc095e904be89f4047ab0af16fd14280a9948e1584adeb01c694f14fad8c0e73db150811d3e349d63cd languageName: node linkType: hard