diff --git a/.changeset/better-pants-eat.md b/.changeset/better-pants-eat.md new file mode 100644 index 000000000..18d7f90aa --- /dev/null +++ b/.changeset/better-pants-eat.md @@ -0,0 +1,5 @@ +--- +"@nmi-agro/fdm-agents": patch +--- + +Migrate from @google/adk to LangChain diff --git a/fdm-agents/.env.example b/fdm-agents/.env.example new file mode 100644 index 000000000..db42e5cba --- /dev/null +++ b/fdm-agents/.env.example @@ -0,0 +1,21 @@ +# ------------------------------------- +# Gemini / Google AI Configuration +# ------------------------------------- +# API key for the Gemini model used by Gerrit. +# Required: Yes +GEMINI_API_KEY= + +# ------------------------------------- +# LangSmith Tracing (optional, development) +# ------------------------------------- +# Enable LangSmith tracing for full observability of agent reasoning, +# tool calls, token usage, and latency. No code changes required — +# set these env vars and all LangGraph runs are automatically traced. +# Obtain an API key at https://smith.langchain.com/ +# Required: No (omit or leave empty to disable) +LANGSMITH_TRACING=false +LANGCHAIN_API_KEY= +LANGCHAIN_PROJECT=fdm-agents +# Endpoint for LangSmith API (default: https://api.smith.langchain.com) +# Use https://eu.api.smith.langchain.com for EU data residency. +LANGSMITH_ENDPOINT= diff --git a/fdm-agents/package.json b/fdm-agents/package.json index a16f4f679..32c9ec7dd 100644 --- a/fdm-agents/package.json +++ b/fdm-agents/package.json @@ -24,11 +24,15 @@ "test-coverage": "vitest run --coverage" }, "dependencies": { - "@google/adk": "^1.1.0", + "@langchain/core": "^1.1.46", + "@langchain/google-genai": "^2.1.30", + "@langchain/langgraph": "^1.3.0", "@nmi-agro/fdm-calculator": "workspace:^", "@nmi-agro/fdm-core": "workspace:^", "@nmi-agro/fdm-data": "workspace:^", - "posthog-node": "^5.33.4", + "@posthog/ai": "^7.18.4", + "langchain": "^1.4.0", + "posthog-node": "^5.33.7", "zod": "^4.4.3" }, "engines": { diff --git a/fdm-agents/src/agents/gerrit/agent.test.ts b/fdm-agents/src/agents/gerrit/agent.test.ts index a756a22ee..1114299da 100644 --- a/fdm-agents/src/agents/gerrit/agent.test.ts +++ b/fdm-agents/src/agents/gerrit/agent.test.ts @@ -1,5 +1,14 @@ +import { AIMessage } from "@langchain/core/messages" import { describe, expect, it, vi } from "vitest" -import { createFertilizerPlannerAgent } from "./agent" +import { + DEFAULT_TOOL_ROUND_LIMIT, + GERRIT_DESCRIPTION, + GERRIT_INSTRUCTION, + GERRIT_NAME, + TOOL_LIMIT_WARNING, + countToolRoundtrips, + createFertilizerPlannerAgent, +} from "./agent" // Mock models and tools to avoid external calls vi.mock("../../models/default", () => ({ @@ -11,22 +20,16 @@ vi.mock("../../tools/fertilizer-planner", () => ({ })) describe("Gerrit Agent", () => { - it("should create a Fertilizer Planner Agent with correct name", () => { - const mockFdm = {} as any - const agent = createFertilizerPlannerAgent(mockFdm, "fake-api-key") - - expect(agent.name).toBe("Gerrit") - expect(agent.description).toContain("Dutch Agronomist") + it("should have the correct name and description", () => { + expect(GERRIT_NAME).toBe("Gerrit") + expect(GERRIT_DESCRIPTION).toContain("Dutch Agronomist") }) it("should have instruction containing critical constraints", () => { - const mockFdm = {} as any - const agent = createFertilizerPlannerAgent(mockFdm, "fake-api-key") - - expect(agent.instruction).toContain("LEGAL NORMS") - expect(agent.instruction).toContain("BUFFER STRIPS") - expect(agent.instruction).toContain("ROTATION LEVEL") - expect(agent.instruction).toContain("SECURITY & CONTEXT BOUNDARIES") + expect(GERRIT_INSTRUCTION).toContain("LEGAL NORMS") + expect(GERRIT_INSTRUCTION).toContain("BUFFER STRIPS") + expect(GERRIT_INSTRUCTION).toContain("ROTATION LEVEL") + expect(GERRIT_INSTRUCTION).toContain("SECURITY & CONTEXT BOUNDARIES") }) it("should throw when no API key is provided and GEMINI_API_KEY env is not set", () => { @@ -37,4 +40,60 @@ describe("Gerrit Agent", () => { ) vi.unstubAllEnvs() }) + + it("should export a default tool round limit", () => { + expect(DEFAULT_TOOL_ROUND_LIMIT).toBe(40) + }) + + it("should export a tool limit warning message", () => { + expect(TOOL_LIMIT_WARNING).toContain("final fertilizer plan NOW") + }) +}) + +describe("countToolRoundtrips", () => { + it("should return 0 for empty messages", () => { + expect(countToolRoundtrips([])).toBe(0) + }) + + it("should count AI messages with tool calls", () => { + const messages = [ + new AIMessage({ + content: "", + tool_calls: [ + { name: "getFarmFields", args: {}, id: "1", type: "tool_call" }, + ], + }), + new AIMessage({ + content: "", + tool_calls: [ + { + name: "simulateFarmPlan", + args: {}, + id: "2", + type: "tool_call", + }, + ], + }), + new AIMessage({ content: "Final answer" }), + ] + expect(countToolRoundtrips(messages)).toBe(2) + }) + + it("should not count AI messages without tool calls", () => { + const messages = [new AIMessage({ content: "Just talking" })] + expect(countToolRoundtrips(messages)).toBe(0) + }) + + it("should count a single AI message with multiple parallel tool calls as one roundtrip", () => { + const messages = [ + new AIMessage({ + content: "", + tool_calls: [ + { name: "toolA", args: {}, id: "1", type: "tool_call" }, + { name: "toolB", args: {}, id: "2", type: "tool_call" }, + ], + }), + ] + expect(countToolRoundtrips(messages)).toBe(1) + }) }) diff --git a/fdm-agents/src/agents/gerrit/agent.ts b/fdm-agents/src/agents/gerrit/agent.ts index a7a958c25..db2d024d1 100644 --- a/fdm-agents/src/agents/gerrit/agent.ts +++ b/fdm-agents/src/agents/gerrit/agent.ts @@ -1,31 +1,22 @@ -import { Agent } from "@google/adk" +import { AIMessage } from "@langchain/core/messages" +import type { BaseMessage } from "@langchain/core/messages" +import { createAgent, dynamicSystemPromptMiddleware, toolStrategy } from "langchain" import type { FdmType } from "@nmi-agro/fdm-core" import { createDefaultModel } from "../../models/default" import { createFertilizerPlannerTools } from "../../tools/fertilizer-planner" +import { FertilizerPlanSchema } from "./schema" -/** - * Creates the Fertilizer Application Planner Agent: "Gerrit" - * @param fdm The non-serializable FDM database instance. - * @param apiKey Optional API key for the Gemini model. - * @param model Optional model name override. - */ -export function createFertilizerPlannerAgent( - fdm: FdmType, - apiKey?: string, - model?: string, -) { - const resolvedKey = apiKey ?? process.env.GEMINI_API_KEY - if (!resolvedKey) { - throw new Error( - "Missing Gemini API key: provide apiKey or set the GEMINI_API_KEY environment variable.", - ) - } - return new Agent({ - name: "Gerrit", - description: - "Expert Dutch Agronomist for fertilizer application planning.", - model: createDefaultModel(resolvedKey, model), - instruction: `You are Gerrit, an expert Dutch Agronomist. +export const GERRIT_NAME = "Gerrit" +export const GERRIT_DESCRIPTION = + "Expert Dutch Agronomist for fertilizer application planning." + +/** Default soft limit on tool roundtrips before the agent is warned to wrap up. */ +export const DEFAULT_TOOL_ROUND_LIMIT = 40 + +export const TOOL_LIMIT_WARNING = + "IMPORTANT: You are approaching the maximum number of allowed tool calls. STOP calling planning, simulation, and search tools. You MUST produce your final fertilizer plan NOW using the required structured JSON format." + +export const GERRIT_INSTRUCTION = `You are Gerrit, an expert Dutch Agronomist. Your goal is to create a legally compliant and agronomically sound fertilizer plan for the entire farm. IMPORTANT CONSTRAINTS: @@ -48,6 +39,12 @@ IMPORTANT CONSTRAINTS: 10. ORGANIC FARMING: If "Organic Farming" is YES, you MUST NOT use any mineral fertilizers ("p_type": "mineral") in the plan. 11. MANURE FILLING STRATEGY: - If "Fill Manure Space" is YES: Maximize manure applications up to the farm-level legal norm, even if it exceeds agronomic advice or field-level norms, provided it doesn't violate other legal norms (like Phosphate). Prefer to use manures that are general available in the regions, e.g. 'Rundeveedrijfmest'. Do this at the farm level; individual fields can receive more manure than their field-level norm as long as the farm total is compliant. + - CRITICAL WORKFLOW for "Fill Manure Space" = YES: + 1. After fetching legal norms, calculate: totalManureNorm_kg = sum of (field manure norm kg/ha × field area ha) for all productive fields. + 2. Choose a manure product (e.g. Rundveedrijfmest) and look up its N content (p_n_rt). + 3. Compute the target m³/ha to fill ~95% of the manure space: target_m3_per_ha = (totalManureNorm_kg × 0.95) / (totalProductiveArea_ha × p_n_rt × density / 1000). + 4. Split this into realistic applications (e.g. 2-3 gifts of 15-30 m³/ha each). + 5. After simulation, check farmTotals.normsFilling.manure vs farmTotals.norms.manure. If less than 90% filled, INCREASE amounts and re-simulate. Do NOT accept under-filled manure space. - If "Fill Manure Space" is NO: Use manure only as needed for agronomic advice and organic matter balance. 12. AMMONIA REDUCTION: If "Reduce NH3 Emissions" is YES, prioritize fertilizers and application methods with lower ammonia emission factors (p_ef_nh3) for the farm as a whole. Prefer methods like "incorporation" or "injection" over "broadcasting" where the fertilizer allows it. 13. NITROGEN BALANCE TARGET: If "Keep Nitrogen Balance Below Target" is YES, you MUST ensure that the calculated nitrogen balance surplus (the amount of nitrogen applied that is not taken up by the crop or lost to emissions) stays below the environmental target for the farm as a whole. Individual fields may exceed their target if compensated by other fields. Use the simulation tool to monitor the "farmTotals.nBalance" and "target" values. @@ -58,12 +55,13 @@ IMPORTANT CONSTRAINTS: 16. DEROGATION: If "Derogation" is YES, you MUST NOT use any mineral fertilizers ("p_type": "mineral") that contain phosphate ("p_p_rt" > 0). Mineral fertilizers that contain no phosphate (e.g., KAS, ureum, pure potassium fertilizers) are still permitted. Use the tools provided to: -- Fetch the list of fields for the farm using "getFarmFields" (this returns the main cultivation for each field based on the May 15th rule). -- Immediately after "getFarmFields", call "getCropFertilizerGuide" with all unique "b_lu_catalogue" values from the fields. Use the returned crop-specific guidance throughout the plan — it specifies preferred products, nutrients to avoid (e.g. Cl for potatoes), required nutrients (e.g. S for brassicas, B for sugar beet), and split N timing. +- The FARM FIELDS list is already pre-loaded in the user message. You do NOT need to call "getFarmFields" — use the pre-loaded data directly. If the pre-loaded list is empty or missing, only then call "getFarmFields". +- Immediately call "getCropFertilizerGuide" with all unique "b_lu_catalogue" values from the pre-loaded fields. Use the returned crop-specific guidance throughout the plan — it specifies preferred products, nutrients to avoid (e.g. Cl for potatoes), required nutrients (e.g. S for brassicas, B for sugar beet), and split N timing. - Fetch agronomic advice for all nutrients. - Fetch the three legal norms for each field and the farm. - Search for available fertilizer products in the catalogue and farm inventory. -- Simulate your proposed distribution to ensure compliance and monitor the organic matter and nitrogen balances. Pass the cultivation details you received from "getFarmFields" into "simulateFarmPlan". +- Simulate your proposed distribution to ensure compliance and monitor the organic matter and nitrogen balances. Pass the cultivation details from the pre-loaded fields into "simulateFarmPlan". +- If the simulation returns "agronomicWarnings" about unused manure space, you MUST increase manure amounts and re-simulate. Do NOT finalize the plan with unfilled manure space when the "Fill Manure Space" strategy is YES. OUTPUT FORMAT: Your final response MUST be a JSON object with exactly this structure (all fields required unless marked optional): @@ -102,8 +100,8 @@ Your final response MUST be a JSON object with exactly this structure (all field } Rules: -- "summary": Provide a clear, concise and professional narrative in Dutch (< 250 words) tailored for farmers and agricultural advisors (CEFR B2 level). Speak as an expert agronomist explaining the reasoning behind the plan. Be direct and to the point. Focus on the agronomical reasoning: why these fertilizers, the balance of nutrients, and soil health (organic matter). Feel free to use agricultural jargon and policy terms that Dutch farmers are familiar with. Refer to "goede landbouwpraktijk" where applicable. Avoid generic or redundant opening sentences (e.g., "Als agronoom heb ik...", "Hieronder volgt..."). Use the names of fertilizers, cultivations and fields when you need to mention them, NEVER mention the ID's. DO NOT use IT jargon, internal strategy keys, or database IDs. Focus on what the farmer needs to know about the resulting plan. -- "fieldSummary": Write a short Dutch explanation (≤ 75 words) specific to this field. Explain the key choices: which fertilizer(s) were selected and why (including any crop-specific preferences or avoidances from the getCropFertilizerGuide skill, e.g. K₂SO₄ over KCl for potatoes to protect onderwatergewicht, required S for brassicas, B for sugar beet), the split-application timing rationale, and the chosen application method. Mention any field-specific consideration the farmer should be aware of (soil type risk, crop quality target, norm constraint). Do NOT repeat farm-level totals or the overall plan summary. +- "summary": Provide a clear, concise and professional narrative in Dutch (< 250 words) tailored for farmers and agricultural advisors (CEFR B2 level). Speak as an expert agronomist explaining the reasoning behind the plan. Be direct and to the point. Focus on the agronomical reasoning: why these fertilizers, the balance of nutrients, and soil health (organic matter). Feel free to use agricultural jargon and policy terms that Dutch farmers are familiar with. Refer to "goede landbouwpraktijk" where applicable. Avoid generic or redundant opening sentences (e.g., "Als agronoom heb ik...", "Hieronder volgt..."). Use the names of fertilizers, cultivations and fields when you need to mention them, NEVER mention the ID's. DO NOT use IT jargon, internal strategy keys, or database IDs. Focus on what the farmer needs to know about the resulting plan. LANGUAGE: Write exclusively in Dutch using standard Dutch agricultural terminology. Translate any English concepts from these instructions to their Dutch equivalents (e.g., "farm-level" → "bedrijfsniveau", "workable nitrogen" → "werkzame stikstof", "compliance" → "naleving", "organic matter balance" → "organische stofbalans"). Never mix English terms into the Dutch text. +- "fieldSummary": Write a short Dutch explanation (≤ 75 words) specific to this field. Explain the key choices: which fertilizer(s) were selected and why (including any crop-specific preferences or avoidances from the getCropFertilizerGuide skill, e.g. K₂SO₄ over KCl for potatoes to protect onderwatergewicht, required S for brassicas, B for sugar beet), the split-application timing rationale, and the chosen application method. Mention any field-specific consideration the farmer should be aware of (soil type risk, crop quality target, norm constraint). Do NOT repeat farm-level totals or the overall plan summary. Same LANGUAGE rule as "summary": use only Dutch agricultural terminology, never English terms. - "metrics.farmTotals": Copy the farmTotals values directly from the final simulateFarmPlan result. - "plan": Include one entry per field b_id for every field that has at least one application. In rotation mode (Rule 14) this means ALL fields in each cultivation group must have their own entry. Buffer strips MUST NOT appear. Do NOT include fieldMetrics in the output — the server recomputes all metrics independently. - DO NOT include any text before or after the JSON object. @@ -151,7 +149,67 @@ TOOL RETURN SHAPES: Use "proposedDose.p_dose_nw" (werkzame stikstof, kg/ha) to compare against "advice.d_n_req" — this is the agronomically correct workable-N value. "proposedDose.p_dose_n" is total N and is provided for reference only. If "isValid" is false, you MUST read the "complianceIssues" array. It contains exact string messages explaining which hard legal norms you violated (and by how many kg). You must adjust your plan to fix these issues in the next iteration. You should also read "agronomicWarnings", which provides hints on soft limits (like organic matter balance, nitrogen targets, or filling manure space). Use these warnings to refine your plan to better match the requested strategies. -`, - tools: createFertilizerPlannerTools(fdm), +` + +/** + * Counts the number of tool roundtrips in the message history. + * A tool roundtrip is an AI message that requested tool calls. + */ +export function countToolRoundtrips(messages: readonly BaseMessage[]): number { + let count = 0 + for (const msg of messages) { + if ( + AIMessage.isInstance(msg) && + msg.tool_calls && + msg.tool_calls.length > 0 + ) { + count++ + } + } + return count +} + +/** + * Minimal interface for an agent that can be streamed through runOneShotAgent. + * Using an explicit structural type prevents leaking internal fdm-calculator + * types (e.g. DierlijkeMestGebruiksnormResult) into the package's declaration files. + */ +export type AgentGraph = { + stream(input: unknown, options?: unknown): Promise> +} + +/** + * Creates the Fertilizer Application Planner Agent: "Gerrit" + * @param fdm The non-serializable FDM database instance. + * @param apiKey Optional API key for the Gemini model. + * @param model Optional model name override. + * @param toolRoundLimit Soft limit on tool roundtrips before the agent is warned to finalize (default: 40). + */ +export function createFertilizerPlannerAgent( + fdm: FdmType, + apiKey?: string, + modelName?: string, + toolRoundLimit: number = DEFAULT_TOOL_ROUND_LIMIT, +): AgentGraph { + const resolvedKey = apiKey ?? process.env.GEMINI_API_KEY + if (!resolvedKey) { + throw new Error( + "Missing Gemini API key: provide apiKey or set the GEMINI_API_KEY environment variable.", + ) + } + const toolLimitMiddleware = dynamicSystemPromptMiddleware((state) => { + const rounds = countToolRoundtrips(state.messages) + return rounds >= toolRoundLimit + ? `${GERRIT_INSTRUCTION}\n\n${TOOL_LIMIT_WARNING}` + : GERRIT_INSTRUCTION }) + + return createAgent({ + name: GERRIT_NAME, + description: GERRIT_DESCRIPTION, + model: createDefaultModel(resolvedKey, modelName), + tools: createFertilizerPlannerTools(fdm), + responseFormat: toolStrategy(FertilizerPlanSchema), + middleware: [toolLimitMiddleware], + }) as unknown as AgentGraph } diff --git a/fdm-agents/src/agents/gerrit/schema.ts b/fdm-agents/src/agents/gerrit/schema.ts new file mode 100644 index 000000000..e3188cbbd --- /dev/null +++ b/fdm-agents/src/agents/gerrit/schema.ts @@ -0,0 +1,94 @@ +import { z } from "zod" + +/** + * Zod schema for a single fertilizer application within a field plan entry. + */ +export const FertilizerApplicationSchema = z.object({ + p_id_catalogue: z + .string() + .regex(/^[A-Za-z0-9_-]+$/, "Catalogue ID must contain only ASCII alphanumeric characters, underscores, or hyphens") + .describe("Catalogue ID of the fertilizer"), + p_app_amount: z.number().describe("Application amount in kg/ha"), + p_app_amount_display: z + .number() + .describe("Application amount in the native display unit"), + p_app_amount_unit: z + .enum(["kg/ha", "l/ha", "t/ha", "m3/ha"]) + .describe("Display unit for the application amount"), + p_app_date: z + .string() + .describe("Application date in YYYY-MM-DD format"), + p_app_method: z.string().describe("Application method identifier"), +}) + +/** + * Zod schema for a single field entry in the fertilizer plan. + */ +export const FieldPlanEntrySchema = z.object({ + b_id: z.string().describe("Field ID"), + fieldSummary: z + .string() + .describe( + "Brief Dutch explanation (≤ 75 words) specific to this field", + ), + applications: z + .array(FertilizerApplicationSchema) + .describe("Fertilizer applications for this field"), +}) + +/** + * Zod schema for the emission breakdown within the nitrogen balance. + */ +const EmissionSchema = z.object({ + ammonia: z.object({ total: z.number() }), + nitrate: z.object({ total: z.number() }), +}) + +/** + * Zod schema for the nitrogen balance at farm level. + */ +const NBalanceSchema = z.object({ + balance: z.number().describe("Nitrogen balance in kg N/ha"), + target: z.number().describe("Nitrogen balance target in kg N/ha"), + emission: EmissionSchema, +}) + +/** + * Zod schema for the three-norm filling/limit values. + */ +const NormValuesSchema = z.object({ + manure: z.number(), + nitrogen: z.number(), + phosphate: z.number(), +}) + +/** + * Zod schema for the farm-level metrics block. + */ +const FarmTotalsSchema = z.object({ + normsFilling: NormValuesSchema.describe( + "Current farm-level norm fillings in kg", + ), + norms: NormValuesSchema.describe("Farm-level legal norm limits in kg"), + nBalance: NBalanceSchema, +}) + +/** + * Zod schema for the complete fertilizer plan output from the Gerrit agent. + * This schema is used with LangChain's `responseFormat` to guarantee + * structured output from the LLM. + */ +export const FertilizerPlanSchema = z.object({ + summary: z + .string() + .describe("Dutch explanation of the plan (< 250 words)"), + metrics: z.object({ + farmTotals: FarmTotalsSchema, + }), + plan: z + .array(FieldPlanEntrySchema) + .describe("One entry per field with fertilizer applications"), +}) + +/** TypeScript type inferred from the FertilizerPlanSchema. */ +export type FertilizerPlanOutput = z.infer diff --git a/fdm-agents/src/index.test.ts b/fdm-agents/src/index.test.ts index f97ae382b..2885ece84 100644 --- a/fdm-agents/src/index.test.ts +++ b/fdm-agents/src/index.test.ts @@ -119,6 +119,7 @@ describe("fdm-agents index", () => { b_bufferstrip: false, b_lu_catalogue: "nl_123", b_lu_name: "Gras", + b_lu_croprotation: "grass", b_soiltype_agr: null, b_gwl_class: null, a_som_loi: null, @@ -133,11 +134,115 @@ describe("fdm-agents index", () => { fieldsSummary, ) - expect(prompt).toContain("FARM FIELDS (1 fields") + expect(prompt).toContain("FARM FIELDS (1 productive fields") expect(prompt).toContain( "- b_id: field-1 | Name: Kavel 1 | Area: 10.50 ha", ) }) + + it("should filter out non-productive landscape fields", () => { + const farmData = { b_id_farm: "farm-123" } + const strategies = { + isOrganic: false, + fillManureSpace: false, + reduceAmmoniaEmissions: false, + keepNitrogenBalanceBelowTarget: false, + workOnRotationLevel: false, + isDerogation: false, + } + const fieldsSummary = [ + { + b_id: "grass-1", + b_name: "Weiland", + b_area: 10.0, + b_bufferstrip: false, + b_lu_catalogue: "nl_265", + b_lu_name: "grasland, blijvend", + b_lu_croprotation: "grass", + b_soiltype_agr: null, + b_gwl_class: null, + a_som_loi: null, + }, + { + b_id: "ditch-1", + b_name: "Sloot", + b_area: 0.02, + b_bufferstrip: false, + b_lu_catalogue: "nl_343", + b_lu_name: "sloot", + b_lu_croprotation: "nature", + b_soiltype_agr: null, + b_gwl_class: null, + a_som_loi: null, + }, + { + b_id: "forest-1", + b_name: "Bosje", + b_area: 1.5, + b_bufferstrip: false, + b_lu_catalogue: "nl_2642", + b_lu_name: "bosje", + b_lu_croprotation: "nature", + b_soiltype_agr: null, + b_gwl_class: null, + a_som_loi: null, + }, + { + b_id: "hedge-1", + b_name: "Houtwal", + b_area: 0.3, + b_bufferstrip: false, + b_lu_catalogue: "nl_2621", + b_lu_name: "houtwal en houtsingel", + b_lu_croprotation: "nature", + b_soiltype_agr: null, + b_gwl_class: null, + a_som_loi: null, + }, + { + b_id: "zero-1", + b_name: "Fragment", + b_area: 0, + b_bufferstrip: false, + b_lu_catalogue: "nl_265", + b_lu_name: "grasland, blijvend", + b_lu_croprotation: "grass", + b_soiltype_agr: null, + b_gwl_class: null, + a_som_loi: null, + }, + { + b_id: "buffer-1", + b_name: "Bufferstrook", + b_area: 0.5, + b_bufferstrip: true, + b_lu_catalogue: "nl_265", + b_lu_name: "grasland, blijvend", + b_lu_croprotation: "grass", + b_soiltype_agr: null, + b_gwl_class: null, + a_som_loi: null, + }, + ] + + const prompt = buildFertilizerPlanPrompt( + farmData, + strategies, + "2025", + undefined, + fieldsSummary, + ) + + // Only the productive grass field should be included + expect(prompt).toContain("FARM FIELDS (1 productive fields") + expect(prompt).toContain("5 nature/landscape elements excluded") + expect(prompt).toContain("grass-1") + expect(prompt).not.toContain("ditch-1") + expect(prompt).not.toContain("forest-1") + expect(prompt).not.toContain("hedge-1") + expect(prompt).not.toContain("zero-1") + expect(prompt).not.toContain("buffer-1") + }) }) }) diff --git a/fdm-agents/src/index.ts b/fdm-agents/src/index.ts index 29db3b61e..44f4dd28d 100644 --- a/fdm-agents/src/index.ts +++ b/fdm-agents/src/index.ts @@ -5,8 +5,11 @@ import { runOneShotAgent } from "./runners/one-shot" import { getMainCultivation } from "./tools/fertilizer-planner" export type { OneShotAgentResult } from "./runners/one-shot" -export { AgentTimeoutError } from "./runners/one-shot" +export { AgentTimeoutError, AgentRecursionLimitError } from "./runners/one-shot" export { createFertilizerPlannerAgent, getMainCultivation, runOneShotAgent } +export { FertilizerPlanSchema } from "./agents/gerrit/schema" +export type { FertilizerPlanOutput } from "./agents/gerrit/schema" +export type { AgentGraph } from "./agents/gerrit/agent" export interface FertilizerPlanStrategies { /** Whether the farm is organic (prohibits mineral fertilizers) */ @@ -37,10 +40,11 @@ export const FertilizerPlanStrategiesSchema = z.object({ export interface FarmFieldSummary { b_id: string b_name: string - b_area: number + b_area: number | null b_bufferstrip: boolean b_lu_catalogue: string b_lu_name: string + b_lu_croprotation: string | null b_soiltype_agr: string | null b_gwl_class: string | null a_som_loi: number | null @@ -99,12 +103,21 @@ export function buildFertilizerPlanPrompt( ? sanitizeAdditionalContext(additionalContext) : "None" + // Filter out non-productive fields: buffer strips, nature/landscape elements, and small fragments + const productiveFields = fieldsSummary?.filter( + (f) => + !f.b_bufferstrip && + f.b_lu_croprotation !== "nature" && + (f.b_area == null || f.b_area >= 0.5), + ) + const excludedCount = (fieldsSummary?.length ?? 0) - (productiveFields?.length ?? 0) + const fieldsBlock = - fieldsSummary && fieldsSummary.length > 0 - ? `\nFARM FIELDS (${fieldsSummary.length} fields, pre-loaded for your reference):\n${fieldsSummary + productiveFields && productiveFields.length > 0 + ? `\nFARM FIELDS (${productiveFields.length} productive fields, pre-loaded for your reference${excludedCount > 0 ? `; ${excludedCount} nature/landscape elements excluded` : ""}):\n${productiveFields .map( (f) => - `- b_id: ${f.b_id} | Name: ${f.b_name} | Area: ${f.b_area?.toFixed(2)} ha | Crop: ${f.b_lu_name} (${f.b_lu_catalogue}) | BufferStrip: ${f.b_bufferstrip} | SoilType: ${f.b_soiltype_agr ?? "unknown"} | GWL: ${f.b_gwl_class ?? "unknown"} | SOM: ${f.a_som_loi != null ? `${f.a_som_loi}%` : "unknown"}`, + `- b_id: ${f.b_id} | Name: ${f.b_name} | Area: ${f.b_area != null ? f.b_area.toFixed(2) : "unknown"} ha | Crop: ${f.b_lu_name} (${f.b_lu_catalogue}) | BufferStrip: ${f.b_bufferstrip} | SoilType: ${f.b_soiltype_agr ?? "unknown"} | GWL: ${f.b_gwl_class ?? "unknown"} | SOM: ${f.a_som_loi != null ? `${f.a_som_loi}%` : "unknown"}`, ) .join("\n")}\n` : "" diff --git a/fdm-agents/src/models/default.test.ts b/fdm-agents/src/models/default.test.ts index ec5267c36..75c98ad8b 100644 --- a/fdm-agents/src/models/default.test.ts +++ b/fdm-agents/src/models/default.test.ts @@ -1,33 +1,30 @@ import { beforeEach, describe, expect, it, vi } from "vitest" import { createDefaultModel } from "./default" -// Mock ADK models -const mockGemini = vi.fn() -vi.mock("@google/adk", async (importOriginal) => { - const actual = await importOriginal() - return { - ...actual, - Gemini: class { - constructor(opts: any) { - mockGemini(opts) - } - }, - } -}) +// Mock @langchain/google-genai +const mockChatGoogleGenerativeAI = vi.fn() +vi.mock("@langchain/google-genai", () => ({ + ChatGoogleGenerativeAI: class { + constructor(opts: any) { + mockChatGoogleGenerativeAI(opts) + } + }, +})) describe("Default Model", () => { beforeEach(() => { - mockGemini.mockClear() + mockChatGoogleGenerativeAI.mockClear() }) - it("should create a Gemini model with default values", () => { + it("should create a ChatGoogleGenerativeAI model with default values", () => { createDefaultModel("fake-api-key") - expect(mockGemini).toHaveBeenCalledTimes(1) - expect(mockGemini).toHaveBeenCalledWith( + expect(mockChatGoogleGenerativeAI).toHaveBeenCalledTimes(1) + expect(mockChatGoogleGenerativeAI).toHaveBeenCalledWith( expect.objectContaining({ apiKey: "fake-api-key", model: "gemini-3.1-pro-preview", + maxOutputTokens: 65536, }), ) }) @@ -35,11 +32,12 @@ describe("Default Model", () => { it("should allow overriding the model name", () => { createDefaultModel("fake-api-key", "custom-model") - expect(mockGemini).toHaveBeenCalledTimes(1) - expect(mockGemini).toHaveBeenCalledWith( + expect(mockChatGoogleGenerativeAI).toHaveBeenCalledTimes(1) + expect(mockChatGoogleGenerativeAI).toHaveBeenCalledWith( expect.objectContaining({ apiKey: "fake-api-key", model: "custom-model", + maxOutputTokens: 65536, }), ) }) diff --git a/fdm-agents/src/models/default.ts b/fdm-agents/src/models/default.ts index 94907fcb6..25fc9338e 100644 --- a/fdm-agents/src/models/default.ts +++ b/fdm-agents/src/models/default.ts @@ -1,14 +1,15 @@ -import { Gemini } from "@google/adk" +import { ChatGoogleGenerativeAI } from "@langchain/google-genai" /** - * Creates a Gemini model configuration for the fdm-agents workspace. + * Creates a ChatGoogleGenerativeAI model configuration for the fdm-agents workspace. * @param apiKey Optional API key. If not provided, it looks for standard environment variables. * @param model Optional model name. Defaults to gemini-3.1-pro-preview. - * @returns A Gemini model instance. + * @returns A ChatGoogleGenerativeAI model instance. */ export function createDefaultModel(apiKey?: string, model?: string) { - return new Gemini({ + return new ChatGoogleGenerativeAI({ model: model ?? "gemini-3.1-pro-preview", apiKey: apiKey, + maxOutputTokens: 65536, }) } diff --git a/fdm-agents/src/runners/one-shot.test.ts b/fdm-agents/src/runners/one-shot.test.ts index 9fddaf889..c4986ba02 100644 --- a/fdm-agents/src/runners/one-shot.test.ts +++ b/fdm-agents/src/runners/one-shot.test.ts @@ -1,213 +1,248 @@ -import { beforeEach, describe, expect, it, vi } from "vitest" -import { runOneShotAgent } from "./one-shot" +import { afterEach, describe, expect, it, vi } from "vitest" +import { AgentRecursionLimitError, AgentTimeoutError, runOneShotAgent } from "./one-shot" -// Mock ADK -const mockRunEphemeral = vi.fn() -vi.mock("@google/adk", async (importOriginal) => { - const actual = await importOriginal() +function makeAIMessage( + content: string | Array>, + opts: { tool_calls?: any[]; usage_metadata?: any } = {}, +): any { return { - ...actual, - InMemoryRunner: class { - runEphemeral = mockRunEphemeral - }, - isFinalResponse: vi.fn(), - stringifyContent: vi.fn(), + _getType: () => "ai", + content, + tool_calls: opts.tool_calls ?? [], + usage_metadata: opts.usage_metadata ?? null, } -}) +} + +function makeToolMessage(name: string): any { + return { _getType: () => "tool", name } +} -import { isFinalResponse, stringifyContent } from "@google/adk" +function createMockAgent(chunks: Array<[string, Record]>): any { + return { + stream: vi.fn().mockResolvedValue( + (async function* () { + for (const chunk of chunks) { + yield chunk + } + })(), + ), + } +} + +function createThrowingAgent(error: Error): any { + return { + stream: vi.fn().mockResolvedValue( + (async function* () { + throw error + // biome-ignore lint: unreachable but needed for generator type + yield ["updates", {}] as any + })(), + ), + } +} describe("runOneShotAgent", () => { - const mockAgent = { name: "TestAgent" } as any const mockPosthog = { client: { capture: vi.fn() }, distinctId: "user-123", } - beforeEach(() => { + afterEach(() => { vi.clearAllMocks() }) - it("should return the final response on success", async () => { - const mockEvent = { type: "final" } - const mockStream = (async function* () { - yield mockEvent - })() - - mockRunEphemeral.mockReturnValue(mockStream) - ;(isFinalResponse as any).mockReturnValue(true) - ;(stringifyContent as any).mockReturnValue("The plan is ready.") + it("should extract text from array content (e.g. Gemini thinking models)", async () => { + const agent = createMockAgent([ + [ + "updates", + { + model_request: { + messages: [ + makeAIMessage([ + { type: "thinking", thinking: "Let me plan..." }, + { type: "text", text: '{"summary":"s","plan":[]}' }, + ]), + ], + }, + }, + ], + ]) + const result = await runOneShotAgent(agent, "Generate plan") + expect(result.result).toBe('{"summary":"s","plan":[]}') + }) - const result = await runOneShotAgent(mockAgent, "Generate plan") + it("should return the final response on success", async () => { + const agent = createMockAgent([ + [ + "updates", + { model_request: { messages: [makeAIMessage("The plan is ready.")] } }, + ], + ]) + const result = await runOneShotAgent(agent, "Generate plan") expect(result.result).toBe("The plan is ready.") }) - it("should throw an error if the model returns an error code", async () => { - const mockStream = (async function* () { - yield { errorCode: "400", errorMessage: "Bad Request" } - })() - - mockRunEphemeral.mockReturnValue(mockStream) - - await expect( - runOneShotAgent(mockAgent, "Generate plan"), - ).rejects.toThrow("Gemini API error [400]: Bad Request") + it("should throw when the stream throws an error", async () => { + const agent = createThrowingAgent( + new Error("Gemini API error [400]: Bad Request"), + ) + await expect(runOneShotAgent(agent, "Generate plan")).rejects.toThrow( + "Gemini API error [400]: Bad Request", + ) }) - it("should capture an event in PostHog if provided", async () => { - const mockEvent = { type: "final" } - const mockStream = (async function* () { - yield mockEvent - })() - - mockRunEphemeral.mockReturnValue(mockStream) - ;(isFinalResponse as any).mockReturnValue(true) - ;(stringifyContent as any).mockReturnValue("Done.") - - const context = { - principalId: "p-1", - b_id_farm: "f-1", - strategies: { isOrganic: true }, - additionalContext: "None", - } - - await runOneShotAgent(mockAgent, "Generate plan", context, mockPosthog) - - expect(mockPosthog.client.capture).toHaveBeenCalledWith({ - distinctId: "user-123", - event: "$ai_generation", - properties: expect.objectContaining({ - agent_name: "TestAgent", - b_id_farm: "f-1", - principal_id: "p-1", - strategies: { isOrganic: true }, - additional_context: "None", - }), - }) + it("should pass context to agent.stream when posthog is provided", async () => { + const agent = createMockAgent([ + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], + ]) + const context = { principalId: "p-1", b_id_farm: "f-1" } + const result = await runOneShotAgent(agent, "Generate plan", context, mockPosthog) + // Verify the run succeeded and context was passed through + expect(result.result).toBe("Done.") + expect(agent.stream).toHaveBeenCalledWith( + expect.objectContaining({ messages: expect.any(Array) }), + expect.objectContaining({ configurable: context }), + ) }) - it("should accumulate usage metadata from stream events", async () => { - const mockStream = (async function* () { - yield { - usageMetadata: { - promptTokenCount: 100, - candidatesTokenCount: 50, - totalTokenCount: 150, + it("should accumulate usage metadata across multiple LLM calls", async () => { + const agent = createMockAgent([ + [ + "updates", + { + model_request: { + messages: [ + makeAIMessage("", { + tool_calls: [{ name: "getFarmFields" }], + usage_metadata: { + input_tokens: 100, + output_tokens: 50, + }, + }), + ], + }, }, - } - yield { type: "final" } - })() - - mockRunEphemeral.mockReturnValue(mockStream) - ;(isFinalResponse as any).mockImplementation( - (e: any) => e.type === "final", - ) - ;(stringifyContent as any).mockReturnValue("Done.") - - const result = await runOneShotAgent(mockAgent, "Generate plan") + ], + [ + "updates", + { + model_request: { + messages: [ + makeAIMessage("Done.", { + usage_metadata: { + input_tokens: 20, + output_tokens: 30, + }, + }), + ], + }, + }, + ], + ]) + const result = await runOneShotAgent(agent, "Generate plan") expect(result.usage).toEqual({ - inputTokens: 100, - outputTokens: 50, - totalTokens: 150, + inputTokens: 120, + outputTokens: 80, + totalTokens: 200, }) }) it("should return null usage when no usage metadata is present", async () => { - const mockStream = (async function* () { - yield { type: "final" } - })() - - mockRunEphemeral.mockReturnValue(mockStream) - ;(isFinalResponse as any).mockReturnValue(true) - ;(stringifyContent as any).mockReturnValue("Done.") - - const result = await runOneShotAgent(mockAgent, "Generate plan") + const agent = createMockAgent([ + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], + ]) + const result = await runOneShotAgent(agent, "Generate plan") expect(result.usage).toBeNull() }) - it("should extract tool call names from modelTurn.parts", async () => { - const mockStream = (async function* () { - yield { - modelTurn: { - parts: [ - { functionCall: { name: "getFarmFields" } }, - { text: "thinking..." }, - ], - }, - } - yield { type: "final" } - })() - - mockRunEphemeral.mockReturnValue(mockStream) - ;(isFinalResponse as any).mockImplementation( - (e: any) => e.type === "final", - ) - ;(stringifyContent as any).mockReturnValue("Done.") - - const result = await runOneShotAgent(mockAgent, "Generate plan") + it("should extract tool call names from tools node updates", async () => { + const agent = createMockAgent([ + [ + "updates", + { tools: { messages: [makeToolMessage("getFarmFields")] } }, + ], + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], + ]) + const result = await runOneShotAgent(agent, "Generate plan") expect(result.toolCalls).toContain("getFarmFields") }) - it("should extract tool call names from direct functionCall property", async () => { - const mockStream = (async function* () { - yield { functionCall: { name: "simulateFarmPlan" } } - yield { type: "final" } - })() - - mockRunEphemeral.mockReturnValue(mockStream) - ;(isFinalResponse as any).mockImplementation( - (e: any) => e.type === "final", - ) - ;(stringifyContent as any).mockReturnValue("Done.") - - const result = await runOneShotAgent(mockAgent, "Generate plan") + it("should also capture tool call names from agent node tool_calls", async () => { + const agent = createMockAgent([ + [ + "updates", + { + model_request: { + messages: [ + makeAIMessage("", { + tool_calls: [{ name: "simulateFarmPlan" }], + }), + ], + }, + }, + ], + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], + ]) + const result = await runOneShotAgent(agent, "Generate plan") expect(result.toolCalls).toContain("simulateFarmPlan") }) it("should deduplicate repeated tool call names", async () => { - const mockStream = (async function* () { - yield { functionCall: { name: "searchFertilizers" } } - yield { functionCall: { name: "searchFertilizers" } } - yield { type: "final" } - })() - - mockRunEphemeral.mockReturnValue(mockStream) - ;(isFinalResponse as any).mockImplementation( - (e: any) => e.type === "final", - ) - ;(stringifyContent as any).mockReturnValue("Done.") - - const result = await runOneShotAgent(mockAgent, "Generate plan") + const agent = createMockAgent([ + [ + "updates", + { tools: { messages: [makeToolMessage("searchFertilizers")] } }, + ], + [ + "updates", + { tools: { messages: [makeToolMessage("searchFertilizers")] } }, + ], + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], + ]) + const result = await runOneShotAgent(agent, "Generate plan") expect( result.toolCalls?.filter((n) => n === "searchFertilizers"), ).toHaveLength(1) }) - it("should handle PostHog capture failure gracefully", async () => { - const failingPosthog = { - client: { - capture: vi.fn().mockImplementation(() => { - throw new Error("PostHog unavailable") - }), - }, - distinctId: "user-1", + it("should throw AgentTimeoutError when the agent exceeds timeoutMs", async () => { + vi.useFakeTimers() + const neverYieldingAgent = { + stream: vi.fn().mockResolvedValue( + (async function* () { + await new Promise(() => {}) + yield ["updates", {}] as any + })(), + ), } - - const mockStream = (async function* () { - yield { type: "final" } - })() - - mockRunEphemeral.mockReturnValue(mockStream) - ;(isFinalResponse as any).mockReturnValue(true) - ;(stringifyContent as any).mockReturnValue("Done.") - - // Should not throw even though PostHog throws - const result = await runOneShotAgent( - mockAgent, + const runPromise = runOneShotAgent( + neverYieldingAgent, "Generate plan", {}, - failingPosthog, + undefined, + 5000, + ) + vi.advanceTimersByTime(6000) + await expect(runPromise).rejects.toThrow(AgentTimeoutError) + vi.useRealTimers() + }) + + it("should wrap LangGraph recursion limit errors in AgentRecursionLimitError", async () => { + const agent = createThrowingAgent( + new Error( + "Recursion limit of 100 reached without hitting a stop condition.", + ), + ) + await expect(runOneShotAgent(agent, "Generate plan")).rejects.toThrow( + AgentRecursionLimitError, + ) + }) + + it("should not wrap non-recursion errors in AgentRecursionLimitError", async () => { + const agent = createThrowingAgent(new Error("Some other error")) + await expect(runOneShotAgent(agent, "Generate plan")).rejects.toThrow( + "Some other error", ) - expect(result.result).toBe("Done.") }) }) + diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index a334164c9..d4bcb7cd8 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -1,8 +1,12 @@ -import type { BaseAgent } from "@google/adk" -import { InMemoryRunner, isFinalResponse, stringifyContent } from "@google/adk" +import { randomUUID } from "node:crypto" +import { isAIMessage } from "@langchain/core/messages" +import type { LangChainCallbackHandler } from "@posthog/ai/langchain" +import type { AgentGraph } from "../agents/gerrit/agent" export interface OneShotAgentResult { result: string + structuredResponse?: Record + runId: string usage: { inputTokens: number outputTokens: number @@ -18,156 +22,187 @@ export class AgentTimeoutError extends Error { } } +export class AgentRecursionLimitError extends Error { + constructor() { + super( + "Agent exceeded the maximum number of steps without producing a final response.", + ) + this.name = "AgentRecursionLimitError" + } +} + +/** + * Extracts the text string from an AI message content value. + * @langchain/google-genai can return content as an array of content parts + * (e.g. [{type:"thinking",...},{type:"text",text:"..."}]) instead of a plain string. + * This helper finds the last text part and returns its value. + */ +function extractTextContent(content: unknown): string { + if (typeof content === "string") return content + if (Array.isArray(content)) { + for (let i = content.length - 1; i >= 0; i--) { + const part = content[i] as Record + if (part?.type === "text" && typeof part.text === "string") + return part.text + if (typeof part === "string") return part + } + } + return JSON.stringify(content) +} + +function buildCallbacks( + posthog?: { client: any; distinctId: string }, + context?: Record, +): LangChainCallbackHandler[] | undefined { + if (!posthog?.client) return undefined + try { + // Dynamic import to avoid hard dep when posthog not configured + const { LangChainCallbackHandler } = + // eslint-disable-next-line @typescript-eslint/no-require-imports + require("@posthog/ai/langchain") as { + LangChainCallbackHandler: new (opts: any) => LangChainCallbackHandler + } + return [ + new LangChainCallbackHandler({ + client: posthog.client, + distinctId: posthog.distinctId, + properties: { + b_id_farm: context?.b_id_farm, + }, + }), + ] + } catch { + return undefined + } +} + /** * Common runner for one-shot agent execution in fdm-agents. - * @param agent The agent instance to run. + * @param agent The compiled LangGraph agent to run. * @param input The user input string. - * @param context Extra context to provide to the agent (e.g. fdm, principalId). + * @param context Extra context to provide via config.configurable (e.g. principalId, nmiApiKey). * @param posthog Optional PostHog client and distinctId for tracking. * @param timeoutMs Maximum milliseconds to wait for the agent to complete (default: 20 minutes). Throws AgentTimeoutError on expiry. + * @param recursionLimit Maximum number of graph steps before LangGraph aborts (default: 100). Each LLM↔tool round-trip is ~2 steps. * @returns The final response and token usage from the agent. */ export async function runOneShotAgent( - agent: BaseAgent, + agent: AgentGraph, input: string, context: Record = {}, posthog?: { client: any; distinctId: string }, timeoutMs = 20 * 60 * 1000, + recursionLimit = 100, ): Promise { - const runner = new InMemoryRunner({ agent, appName: "fdm-agents" }) - - const stream = runner.runEphemeral({ - userId: "system", - newMessage: { - role: "user", - parts: [{ text: input }], - }, - stateDelta: context, - }) - - let finalResponse = "" - let inputTokens = 0 - let outputTokens = 0 - let totalTokens = 0 - const toolCalls: string[] = [] - - function extractToolCalls(obj: any, visited = new Set()) { - if (!obj || typeof obj !== "object" || visited.has(obj)) return - visited.add(obj) - - if (Array.isArray(obj)) { - for (const item of obj) extractToolCalls(item, visited) - return - } - - // 1. Check for standard ADK/Gemini function call structure - const calls = obj.modelTurn?.parts?.filter((p: any) => !!p.functionCall) - if (calls && Array.isArray(calls)) { - for (const p of calls) { - if (p.functionCall?.name) { - toolCalls.push(p.functionCall.name) - } - } - } - - // 2. Fallback for other potential structures or raw tool calls - const rawName = obj.functionCall?.name || obj.toolCall?.name - if (typeof rawName === "string") { - const cleanName = rawName.replace(/[[\]"]/g, "").trim() - if (cleanName) { - toolCalls.push(cleanName) - } - } - - for (const key of Object.keys(obj)) { - extractToolCalls(obj[key], visited) - } - } + const abortController = new AbortController() + const callbacks = buildCallbacks(posthog, context) + const runId = randomUUID() let timeoutHandle: ReturnType | undefined - const closeStream = async () => { - const iterator = stream as AsyncIterator & { - return?: () => Promise - } - if (typeof iterator.return === "function") { - try { - await iterator.return() - } catch { - // best effort - } - } - } const timeoutPromise = new Promise((_, reject) => { timeoutHandle = setTimeout(() => { - void closeStream() + abortController.abort() reject(new AgentTimeoutError(timeoutMs)) }, timeoutMs) }) - const streamPromise = (async () => { - for await (const event of stream) { - // Surface model errors immediately instead of silently returning empty string. - // When Gemini returns a non-200 (e.g. 400), the LlmAgent emits an event - // with errorCode/errorMessage but no content. - if (event.errorCode) { - throw new Error( - `Gemini API error [${event.errorCode}]: ${event.errorMessage ?? "unknown error"}`, - ) - } - - // Accumulate usage metadata across all events. - const usage = event.usageMetadata - if (usage) { - inputTokens += usage.promptTokenCount ?? 0 - outputTokens += usage.candidatesTokenCount ?? 0 - totalTokens += usage.totalTokenCount ?? 0 - } + const streamPromise = (async (): Promise => { + let finalResponse = "" + let structuredResponse: Record | undefined + let inputTokens = 0 + let outputTokens = 0 + const toolCalls: string[] = [] + + const stream = (await agent.stream( + { messages: [{ role: "user", content: input }] }, + { + configurable: context, + recursionLimit, + runId, + streamMode: ["updates", "custom"], + signal: abortController.signal, + runName: "gerrit-one-shot", + metadata: { + b_id_farm: context.b_id_farm, + }, + ...(callbacks ? { callbacks } : {}), + }, + )) as AsyncIterable + + for await (const rawChunk of stream) { + const chunk = rawChunk as [string, Record] | Record + // streamMode array yields [mode, data] tuples + const [mode, data] = Array.isArray(chunk) + ? (chunk as [string, Record]) + : (["updates", chunk] as [string, Record]) + + if (mode === "updates") { + const node = Object.keys(data ?? {})[0] + const nodeData = node ? data[node] : data + + if (node === "model_request" && Array.isArray(nodeData?.messages)) { + for (const msg of nodeData.messages) { + if (!isAIMessage(msg)) continue + if (msg.usage_metadata) { + inputTokens += msg.usage_metadata.input_tokens ?? 0 + outputTokens += msg.usage_metadata.output_tokens ?? 0 + } + if (msg.tool_calls?.length) { + for (const tc of msg.tool_calls) { + if (tc.name) toolCalls.push(tc.name) + } + } + } + const lastMsg = nodeData.messages.at(-1) + if (isAIMessage(lastMsg) && !lastMsg.tool_calls?.length) { + // No pending tool calls — this is the final response + finalResponse = extractTextContent(lastMsg.content) + } + } - extractToolCalls(event) + if (node === "tools" && Array.isArray(nodeData?.messages)) { + for (const msg of nodeData.messages) { + if (msg?.name && !toolCalls.includes(msg.name)) { + toolCalls.push(msg.name) + } + } + } - // Only capture the final text response, not intermediate reasoning or tool calls. - if (isFinalResponse(event)) { - const text = stringifyContent(event) - if (text) { - finalResponse = text + // Capture structured response from responseFormat node + if (nodeData?.structuredResponse != null) { + structuredResponse = nodeData.structuredResponse as Record } } + // "custom" mode: progress events from config.writer — consumed by callers + // who use the raw stream; ignored here since runOneShotAgent is one-shot. + } + + const uniqueToolCalls = [...new Set(toolCalls)] + const totalTokens = inputTokens + outputTokens + + return { + result: finalResponse, + structuredResponse, + runId, + usage: totalTokens > 0 ? { inputTokens, outputTokens, totalTokens } : null, + toolCalls: uniqueToolCalls, } })() try { - await Promise.race([streamPromise, timeoutPromise]) + return await Promise.race([streamPromise, timeoutPromise]) + } catch (err: unknown) { + // Wrap LangGraph recursion limit errors in a typed error. + // Check both the error message and class name (GraphRecursionError) for robustness. + if ( + err instanceof Error && + (err.message?.includes("Recursion limit") || + err.constructor?.name === "GraphRecursionError") + ) { + throw new AgentRecursionLimitError() + } + throw err } finally { clearTimeout(timeoutHandle) } - - const uniqueToolCalls = [...new Set(toolCalls)] - - // PostHog LLM Tracking - if (posthog?.client) { - try { - posthog.client.capture({ - distinctId: posthog.distinctId, - event: "$ai_generation", - properties: { - agent_name: agent.name, - b_id_farm: context.b_id_farm, - principal_id: context.principalId, - strategies: context.strategies, - additional_context: context.additionalContext, - $ai_tools_called: uniqueToolCalls, - $ai_tool_call_count: uniqueToolCalls.length, - }, - }) - } catch (e) { - console.error("Failed to log to PostHog:", e) - } - } - - return { - result: finalResponse, - usage: - totalTokens > 0 ? { inputTokens, outputTokens, totalTokens } : null, - toolCalls: uniqueToolCalls, - } } diff --git a/fdm-agents/src/tools/fertilizer-planner/index.test.ts b/fdm-agents/src/tools/fertilizer-planner/index.test.ts index 7dfa87475..27b885fc9 100644 --- a/fdm-agents/src/tools/fertilizer-planner/index.test.ts +++ b/fdm-agents/src/tools/fertilizer-planner/index.test.ts @@ -1,32 +1,6 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest" import { createFertilizerPlannerTools, getMainCultivation } from "./index" -// --------------------------------------------------------------------------- -// Mock @google/adk so FunctionTool exposes execute() directly -// --------------------------------------------------------------------------- -vi.mock("@google/adk", async (importOriginal) => { - const actual = await importOriginal() - return { - ...actual, - FunctionTool: class { - name: string - private _execute: Function - constructor(config: { - name: string - execute: Function - description?: string - parameters?: any - }) { - this.name = config.name - this._execute = config.execute - } - async execute(input: any, context?: any) { - return this._execute(input, context) - } - }, - } -}) - // --------------------------------------------------------------------------- // Mock fdm-core // --------------------------------------------------------------------------- @@ -122,13 +96,14 @@ const mockDosage = { }, } -function makeContext(overrides: Record = {}) { - const data: Record = { - principalId: "principal-1", - calendar: "2025", - ...overrides, +function makeConfigurable(overrides: Record = {}) { + return { + configurable: { + principalId: "principal-1", + calendar: "2025", + ...overrides, + }, } - return { state: { get: (k: string) => data[k] } } as any } function makeSimInput( @@ -361,19 +336,10 @@ describe("tool execute functions", () => { // ── getFarmFields ──────────────────────────────────────────────────────── describe("getFarmFields", () => { - it("should throw when context is missing", async () => { - await expect( - getTool("getFarmFields").execute( - { b_id_farm: "farm-1", calendar: "2025" }, - undefined, - ), - ).rejects.toThrow("Context is required") - }) - it("should return fields with soil params and cultivation details", async () => { - const result = await getTool("getFarmFields").execute( + const result = await getTool("getFarmFields").invoke( { b_id_farm: "farm-1", calendar: "2025" }, - makeContext(), + makeConfigurable(), ) expect(result.fields).toHaveLength(1) expect(result.fields[0].b_id).toBe("field-1") @@ -391,9 +357,9 @@ describe("tool execute functions", () => { b_lu_end: "2025-12-31", }, ]) - const result = await getTool("getFarmFields").execute( + const result = await getTool("getFarmFields").invoke( { b_id_farm: "farm-1", calendar: "2025" }, - makeContext(), + makeConfigurable(), ) expect(result.fields[0].b_lu_catalogue).toBeNull() expect(result.fields[0].b_lu_start).toBeNull() @@ -402,19 +368,10 @@ describe("tool execute functions", () => { // ── getFarmNutrientAdvice ──────────────────────────────────────────────── describe("getFarmNutrientAdvice", () => { - it("should throw when context is missing", async () => { - await expect( - getTool("getFarmNutrientAdvice").execute( - { b_ids: ["field-1"] }, - undefined, - ), - ).rejects.toThrow("Context is required") - }) - it("should return advice when mainLu is found", async () => { - const result = await getTool("getFarmNutrientAdvice").execute( + const result = await getTool("getFarmNutrientAdvice").invoke( { b_ids: ["field-1"] }, - makeContext({ nmiApiKey: "test-key" }), + makeConfigurable({ nmiApiKey: "test-key" }), ) expect(result.advicePerField).toHaveLength(1) expect(result.advicePerField[0].b_id).toBe("field-1") @@ -432,9 +389,9 @@ describe("tool execute functions", () => { b_lu_end: "2025-12-31", }, ]) - const result = await getTool("getFarmNutrientAdvice").execute( + const result = await getTool("getFarmNutrientAdvice").invoke( { b_ids: ["field-1"] }, - makeContext({ nmiApiKey: "test-key" }), + makeConfigurable({ nmiApiKey: "test-key" }), ) expect(result.advicePerField[0].advice).toBeNull() expect(getNutrientAdvice).not.toHaveBeenCalled() @@ -443,19 +400,10 @@ describe("tool execute functions", () => { // ── getFarmLegalNorms ──────────────────────────────────────────────────── describe("getFarmLegalNorms", () => { - it("should throw when context is missing", async () => { - await expect( - getTool("getFarmLegalNorms").execute( - { b_id_farm: "farm-1", b_ids: ["field-1"] }, - undefined, - ), - ).rejects.toThrow("Context is required") - }) - it("should return norms per field", async () => { - const result = await getTool("getFarmLegalNorms").execute( + const result = await getTool("getFarmLegalNorms").invoke( { b_id_farm: "farm-1", b_ids: ["field-1"] }, - makeContext(), + makeConfigurable(), ) expect(result.normsPerField).toHaveLength(1) expect(result.normsPerField[0].b_id).toBe("field-1") @@ -467,19 +415,18 @@ describe("tool execute functions", () => { // ── searchFertilizers ──────────────────────────────────────────────────── describe("searchFertilizers", () => { - it("should throw when context is missing", async () => { - await expect( - getTool("searchFertilizers").execute( - { b_id_farm: "farm-1" }, - undefined, - ), - ).rejects.toThrow("Context is required") + it("should return empty array when principalId is missing", async () => { + const result = await getTool("searchFertilizers").invoke( + { b_id_farm: "farm-1" }, + { configurable: {} }, + ) + expect(result.fertilizers).toEqual([]) }) it("should return all fertilizers when no filter is applied", async () => { - const result = await getTool("searchFertilizers").execute( + const result = await getTool("searchFertilizers").invoke( { b_id_farm: "farm-1" }, - makeContext(), + makeConfigurable(), ) expect(result.fertilizers).toHaveLength(1) expect(result.fertilizers[0].p_id_catalogue).toBe("fert-1") @@ -494,9 +441,9 @@ describe("tool execute functions", () => { p_type: "manure", }, ]) - const result = await getTool("searchFertilizers").execute( + const result = await getTool("searchFertilizers").invoke( { b_id_farm: "farm-1", p_type: "manure" }, - makeContext(), + makeConfigurable(), ) expect(result.fertilizers).toHaveLength(1) expect(result.fertilizers[0].p_id_catalogue).toBe("manure-1") @@ -512,18 +459,18 @@ describe("tool execute functions", () => { p_type: "compost", }, ]) - const result = await getTool("searchFertilizers").execute( + const result = await getTool("searchFertilizers").invoke( { b_id_farm: "farm-1", query: "compost" }, - makeContext(), + makeConfigurable(), ) expect(result.fertilizers).toHaveLength(1) expect(result.fertilizers[0].p_id_catalogue).toBe("compost-1") }) it("should return empty array when b_id_farm is missing", async () => { - const result = await getTool("searchFertilizers").execute( + const result = await getTool("searchFertilizers").invoke( { b_id_farm: "" }, - makeContext(), + makeConfigurable(), ) expect(result.fertilizers).toEqual([]) }) @@ -531,25 +478,27 @@ describe("tool execute functions", () => { // ── simulateFarmPlan ───────────────────────────────────────────────────── describe("simulateFarmPlan", () => { - it("should throw when context is missing", async () => { + it("should throw when principalId is missing in configurable", async () => { await expect( - getTool("simulateFarmPlan").execute(makeSimInput(), undefined), - ).rejects.toThrow("Context is required") + getTool("simulateFarmPlan").invoke(makeSimInput(), { + configurable: {}, + }), + ).rejects.toThrow("Database connection or Farm ID missing") }) it("should throw when b_id_farm is missing", async () => { await expect( - getTool("simulateFarmPlan").execute( + getTool("simulateFarmPlan").invoke( makeSimInput({ b_id_farm: "" }), - makeContext(), + makeConfigurable(), ), ).rejects.toThrow("Database connection or Farm ID missing") }) it("should return valid result for a compliant plan", async () => { - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect(result.isValid).toBe(true) expect(result.complianceIssues).toHaveLength(0) @@ -565,9 +514,9 @@ describe("tool execute functions", () => { b_bufferstrip: true, b_centroid: [5.2, 52.1], }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect(result.isValid).toBe(false) expect(result.complianceIssues[0]).toContain( @@ -576,35 +525,35 @@ describe("tool execute functions", () => { expect(result.fieldResults[0].isBufferStripViolation).toBe(true) }) - it("should throw when fertilizer is not found in inventory", async () => { + it("should return invalid field result when fertilizer is not found in inventory", async () => { ;(getFertilizers as any).mockResolvedValue([]) - await expect( - getTool("simulateFarmPlan").execute( - makeSimInput(), - makeContext(), - ), - ).rejects.toThrow("not found in farm inventory") + const result = await getTool("simulateFarmPlan").invoke( + makeSimInput(), + makeConfigurable(), + ) + expect(result.fieldResults[0].isValid).toBe(false) + expect(result.fieldResults[0].error).toContain("not found in farm inventory") }) - it("should throw for invalid application method", async () => { + it("should return invalid field result for invalid application method", async () => { ;(getFertilizers as any).mockResolvedValue([ { ...mockFertilizer, p_app_method_options: ["injection"] }, ]) - await expect( - getTool("simulateFarmPlan").execute( - makeSimInput(), - makeContext(), - ), - ).rejects.toThrow("Invalid application method") + const result = await getTool("simulateFarmPlan").invoke( + makeSimInput(), + makeConfigurable(), + ) + expect(result.fieldResults[0].isValid).toBe(false) + expect(result.fieldResults[0].error).toContain("Invalid application method") }) it("should accept any method when p_app_method_options is empty", async () => { ;(getFertilizers as any).mockResolvedValue([ { ...mockFertilizer, p_app_method_options: [] }, ]) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect(result.isValid).toBe(true) }) @@ -615,9 +564,9 @@ describe("tool execute functions", () => { nitrogen: 200, phosphate: 50, }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect(result.isValid).toBe(false) expect( @@ -633,9 +582,9 @@ describe("tool execute functions", () => { nitrogen: 3000, phosphate: 50, }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect(result.isValid).toBe(false) expect( @@ -651,9 +600,9 @@ describe("tool execute functions", () => { nitrogen: 200, phosphate: 1000, }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect(result.isValid).toBe(false) expect( @@ -664,9 +613,9 @@ describe("tool execute functions", () => { }) it("should report organic farming strategy violation for mineral fertilizer", async () => { - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput({ strategies: { isOrganic: true } }), - makeContext(), + makeConfigurable(), ) expect(result.isValid).toBe(false) expect( @@ -680,9 +629,9 @@ describe("tool execute functions", () => { ;(getFertilizers as any).mockResolvedValue([ { ...mockFertilizer, p_type: "mineral", p_p_rt: 15 }, ]) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput({ strategies: { isDerogation: true } }), - makeContext(), + makeConfigurable(), ) expect(result.isValid).toBe(false) expect( @@ -697,11 +646,11 @@ describe("tool execute functions", () => { balance: 100, target: 50, }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput({ strategies: { keepNitrogenBalanceBelowTarget: true }, }), - makeContext(), + makeConfigurable(), ) expect( result.agronomicWarnings.some((w: string) => @@ -720,7 +669,7 @@ describe("tool execute functions", () => { b_centroid: [5.2, 52.1], }), ) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput({ strategies: { workOnRotationLevel: true }, fields: [ @@ -754,7 +703,7 @@ describe("tool execute functions", () => { }, ], }), - makeContext(), + makeConfigurable(), ) expect( result.agronomicWarnings.some((w: string) => @@ -773,7 +722,7 @@ describe("tool execute functions", () => { b_centroid: [5.2, 52.1], }), ) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput({ strategies: { workOnRotationLevel: true }, fields: [ @@ -807,7 +756,7 @@ describe("tool execute functions", () => { }, ], }), - makeContext(), + makeConfigurable(), ) // Same applications → no rotation mismatch warning expect( @@ -824,9 +773,9 @@ describe("tool execute functions", () => { supply: { fertilizers: { total: 100 } }, emission: { ammonia: { fertilizers: { total: -40 } } }, // 40% > 30% threshold }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput({ strategies: { reduceAmmoniaEmissions: true } }), - makeContext(), + makeConfigurable(), ) expect( result.agronomicWarnings.some((w: string) => @@ -837,9 +786,9 @@ describe("tool execute functions", () => { it("should not warn for NH3 when emission factor is below threshold", async () => { // Default mock: emission total = -2, supply = 100 → 2% < 30% - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput({ strategies: { reduceAmmoniaEmissions: true } }), - makeContext(), + makeConfigurable(), ) expect( result.agronomicWarnings.some((w: string) => @@ -854,9 +803,9 @@ describe("tool execute functions", () => { nitrogen: 200, phosphate: 50, }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput({ strategies: { fillManureSpace: true } }), - makeContext(), + makeConfigurable(), ) expect( result.agronomicWarnings.some((w: string) => @@ -870,9 +819,9 @@ describe("tool execute functions", () => { balance: -50, supply: { fertilizers: { total: 0 } }, }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect( result.agronomicWarnings.some((w: string) => @@ -882,9 +831,9 @@ describe("tool execute functions", () => { }) it("should fetch nutrient advice when nmiApiKey is provided", async () => { - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext({ nmiApiKey: "test-nmi-key" }), + makeConfigurable({ nmiApiKey: "test-nmi-key" }), ) expect(getNutrientAdvice).toHaveBeenCalled() expect(result.fieldResults[0].fieldMetrics?.advice).toEqual({ @@ -899,9 +848,9 @@ describe("tool execute functions", () => { throw new Error("OM calculation failed") }, ) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect(result.fieldResults[0].fieldMetrics?.omBalanceError).toBe( "OM calculation failed", @@ -912,9 +861,9 @@ describe("tool execute functions", () => { ;(calculateNitrogenBalanceField as any).mockImplementation(() => { throw new Error("N balance failed") }) - const result = await getTool("simulateFarmPlan").execute( + const result = await getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ) expect(result.fieldResults[0].fieldMetrics?.nBalanceError).toBe( "N balance failed", diff --git a/fdm-agents/src/tools/fertilizer-planner/index.ts b/fdm-agents/src/tools/fertilizer-planner/index.ts index 0e117c122..4ada88d8a 100644 --- a/fdm-agents/src/tools/fertilizer-planner/index.ts +++ b/fdm-agents/src/tools/fertilizer-planner/index.ts @@ -1,7 +1,8 @@ import { existsSync, readFileSync } from "node:fs" import { dirname, join } from "node:path" import { fileURLToPath } from "node:url" -import { type Context, FunctionTool } from "@google/adk" +import { tool } from "@langchain/core/tools" +import type { RunnableConfig } from "@langchain/core/runnables" import { aggregateNormFillingsToFarmLevel, aggregateNormsToFarmLevel, @@ -61,17 +62,12 @@ export function createFertilizerPlannerTools(fdm: FdmType) { /** * Tool for fetching the list of fields for a farm. */ - const getFarmFieldsTool = new FunctionTool({ - name: "getFarmFields", - description: - "Get the list of all fields belonging to the farm for the current year, including their main cultivation details and key soil properties (agricultural soil type, texture, groundwater class, organic matter).", - parameters: z.object({ - b_id_farm: z.string().describe("The ID of the farm"), - calendar: z.string().describe('The calendar year (e.g. "2025")'), - }), - execute: async (input: any, context?: Context) => { - if (!context) throw new Error("Context is required") - const principalId = context.state.get("principalId") as PrincipalId + const getFarmFieldsTool = tool( + async (input: any, config?: RunnableConfig) => { + const principalId = config?.configurable?.principalId as PrincipalId + if (!principalId) { + throw new Error("Missing principalId in agent context") + } const timeframe = { start: new Date(`${input.calendar}-01-01`), end: new Date(`${input.calendar}-12-31`), @@ -130,25 +126,25 @@ export function createFertilizerPlannerTools(fdm: FdmType) { // Must return an object (not array) — Gemini rejects array as top-level function_response. return { fields: fieldDetails } }, - }) + { + name: "getFarmFields", + description: + "Get the list of all fields belonging to the farm for the current year, including their main cultivation details and key soil properties (agricultural soil type, texture, groundwater class, organic matter).", + schema: z.object({ + b_id_farm: z.string().describe("The ID of the farm"), + calendar: z.string().describe('The calendar year (e.g. "2025")'), + }), + }, + ) /** * Tool for fetching nutrient advice (N, P, K and others). */ - const getFarmNutrientAdviceTool = new FunctionTool({ - name: "getFarmNutrientAdvice", - description: - "Get the full nutrient advice (N, P, K, Ca, Mg, S, micro-nutrients) for specific fields based on soil samples and crop rotation.", - parameters: z.object({ - b_ids: z - .array(z.string()) - .describe("List of field IDs (b_id) to fetch advice for"), - }), - execute: async (input: any, context?: Context) => { - if (!context) throw new Error("Context is required") - const principalId = context.state.get("principalId") as PrincipalId + const getFarmNutrientAdviceTool = tool( + async (input: any, config?: RunnableConfig) => { + const principalId = config?.configurable?.principalId as PrincipalId const calendar = - (context.state.get("calendar") as string) || + (config?.configurable?.calendar as string) || new Date().getFullYear().toString() const timeframe = { start: new Date(`${calendar}-01-01`), @@ -156,127 +152,140 @@ export function createFertilizerPlannerTools(fdm: FdmType) { } // nmiApiKey is injected server-side via context state — never exposed to the LLM. - const nmiApiKey = context.state.get("nmiApiKey") as + const nmiApiKey = config?.configurable?.nmiApiKey as | string | undefined const args = input as AdviceArgs const results = await Promise.all( args.b_ids.map(async (b_id) => { - const field = await getField(fdm, principalId, b_id) - const cultivations = await getCultivations( - fdm, - principalId, - b_id, - timeframe, - ) - const mainLu = getMainCultivation(cultivations, calendar) - const currentSoilData = await getCurrentSoilData( - fdm, - principalId, - b_id, - ) + try { + const field = await getField(fdm, principalId, b_id) + const cultivations = await getCultivations( + fdm, + principalId, + b_id, + timeframe, + ) + const mainLu = getMainCultivation(cultivations, calendar) + const currentSoilData = await getCurrentSoilData( + fdm, + principalId, + b_id, + ) - if (!mainLu) { - return { b_id, advice: null } - } + if (!mainLu) { + return { b_id, advice: null } + } - const advice = await getNutrientAdvice(fdm, { - b_lu_catalogue: mainLu.b_lu_catalogue, - b_centroid: field.b_centroid ?? [0, 0], - currentSoilData: currentSoilData, - nmiApiKey: nmiApiKey || "", - b_bufferstrip: field.b_bufferstrip, - }) - return { b_id, advice } + const advice = await getNutrientAdvice(fdm, { + b_lu_catalogue: mainLu.b_lu_catalogue, + b_centroid: field.b_centroid ?? [0, 0], + currentSoilData: currentSoilData, + nmiApiKey: nmiApiKey || "", + b_bufferstrip: field.b_bufferstrip, + }) + return { b_id, advice } + } catch (e) { + return { + b_id, + advice: null, + error: e instanceof Error ? e.message : String(e), + } + } }), ) // Must return an object (not array) — Gemini rejects array as top-level function_response. return { advicePerField: results } }, - }) + { + name: "getFarmNutrientAdvice", + description: + "Get the full nutrient advice (N, P, K, Ca, Mg, S, micro-nutrients) for specific fields based on soil samples and crop rotation.", + schema: z.object({ + b_ids: z + .array(z.string()) + .describe("List of field IDs (b_id) to fetch advice for"), + }), + }, + ) /** * Tool for fetching legal norms (Animal Manure N, Workable N, Phosphate). */ - const getFarmLegalNormsTool = new FunctionTool({ - name: "getFarmLegalNorms", - description: - "Get the three legal limits (Animal Manure Nitrogen, Total Workable Nitrogen, and Phosphate) for fields.", - parameters: z.object({ - b_id_farm: z.string().describe("The ID of the farm"), - b_ids: z - .array(z.string()) - .describe("List of field IDs (b_id) to check"), - }), - execute: async (input: any, context?: Context) => { - if (!context) throw new Error("Context is required") - const principalId = context.state.get("principalId") as PrincipalId + const getFarmLegalNormsTool = tool( + async (input: any, config?: RunnableConfig) => { + const principalId = config?.configurable?.principalId as PrincipalId const calendar = - (context.state.get("calendar") as string) || + (config?.configurable?.calendar as string) || new Date().getFullYear().toString() const normFunctions = createFunctionsForNorms("NL", calendar as any) const results = await Promise.all( input.b_ids.map(async (b_id: string) => { - const normsInput = await normFunctions.collectInputForNorms( - fdm, - principalId, - b_id, - ) - const [manure, phosphate, nitrogen] = await Promise.all([ - normFunctions.calculateNormForManure( - fdm, - normsInput as any, - ), - normFunctions.calculateNormForPhosphate( - fdm, - normsInput as any, - ), - normFunctions.calculateNormForNitrogen( - fdm, - normsInput as any, - ), - ]) - return { - b_id, - norms: { - animalManureN: manure.normValue, - workableN: nitrogen.normValue, - phosphate: phosphate.normValue, - }, + try { + const normsInput = + await normFunctions.collectInputForNorms( + fdm, + principalId, + b_id, + ) + const [manure, phosphate, nitrogen] = await Promise.all( + [ + normFunctions.calculateNormForManure( + fdm, + normsInput as any, + ), + normFunctions.calculateNormForPhosphate( + fdm, + normsInput as any, + ), + normFunctions.calculateNormForNitrogen( + fdm, + normsInput as any, + ), + ], + ) + return { + b_id, + norms: { + animalManureN: manure.normValue, + workableN: nitrogen.normValue, + phosphate: phosphate.normValue, + }, + } + } catch (e) { + return { + b_id, + norms: null, + error: e instanceof Error ? e.message : String(e), + } } }), ) // Must return an object (not array) — Gemini rejects array as top-level function_response. return { normsPerField: results } }, - }) + { + name: "getFarmLegalNorms", + description: + "Get the three legal limits (Animal Manure Nitrogen, Total Workable Nitrogen, and Phosphate) for fields.", + schema: z.object({ + b_id_farm: z.string().describe("The ID of the farm"), + b_ids: z + .array(z.string()) + .describe("List of field IDs (b_id) to check"), + }), + }, + ) /** * Tool for searching fertilizers in the farm inventory. */ - const searchFertilizersTool = new FunctionTool({ - name: "searchFertilizers", - description: - "Search for fertilizer products available in the farm inventory (including custom ones) by name or type.", - parameters: z.object({ - b_id_farm: z - .string() - .describe("The ID of the farm to search inventory for"), - query: z - .string() - .optional() - .describe('Search term (e.g. "pig manure", "KAS")'), - p_type: z - .enum(["manure", "mineral", "compost"]) - .optional() - .describe("Filter by fertilizer type"), - }), - execute: async (input: any, context?: Context) => { - if (!context) throw new Error("Context is required") + const searchFertilizersTool = tool( + async (input: any, config?: RunnableConfig) => { const args = input as SearchArgs - const principalId = context.state.get("principalId") as PrincipalId + const principalId = config?.configurable?.principalId as PrincipalId if (!fdm || !principalId || !args.b_id_farm) { return { fertilizers: [] } @@ -329,85 +338,37 @@ export function createFertilizerPlannerTools(fdm: FdmType) { })), } }, - }) + { + name: "searchFertilizers", + description: + "Search for fertilizer products available in the farm inventory (including custom ones) by name or type.", + schema: z.object({ + b_id_farm: z + .string() + .describe("The ID of the farm to search inventory for"), + query: z + .string() + .optional() + .describe('Search term (e.g. "pig manure", "KAS")'), + p_type: z + .enum(["manure", "mineral", "compost"]) + .optional() + .describe("Filter by fertilizer type"), + }), + }, + ) /** * Tool for simulating farm plans and checking compliance across all 3 norms and organic matter balance. */ - const simulateFarmPlanTool = new FunctionTool({ - name: "simulateFarmPlan", - description: - "Simulates a proposed fertilizer plan to check compliance against all 3 legal norms, organic matter balance, and nitrogen balance.", - parameters: z.object({ - b_id_farm: z.string().describe("The ID of the farm"), - strategies: z - .object({ - isOrganic: z.boolean().optional(), - fillManureSpace: z.boolean().optional(), - reduceAmmoniaEmissions: z.boolean().optional(), - keepNitrogenBalanceBelowTarget: z.boolean().optional(), - workOnRotationLevel: z.boolean().optional(), - isDerogation: z.boolean().optional(), - }) - .optional() - .describe("User strategies to enforce in warnings"), - fields: z - .array( - z.object({ - b_id: z.string().describe("The field ID"), - b_lu_catalogue: z - .string() - .describe( - "The crop catalogue ID (e.g., nl_265) for this field", - ), - b_lu_name: z - .string() - .describe( - "The name of the crop (e.g., Wintertarwe)", - ), - b_lu_start: z - .string() - .describe( - "The sowing or start date of the crop (YYYY-MM-DD)", - ), - applications: z.array( - z.object({ - p_id_catalogue: z.string(), - p_app_amount: z - .number() - .describe("Application amount in kg/ha"), - p_app_amount_unit: z - .string() - .optional() - .describe( - "The unit of the application amount (e.g., m3/ha, kg/ha, l/ha, t/ha)", - ), - p_app_amount_display: z - .number() - .optional() - .describe( - "The numeric application amount (unit is carried separately in p_app_amount_unit)", - ), - p_app_date: z - .string() - .describe( - "Application date in YYYY-MM-DD format", - ), - p_app_method: z.string().optional(), - }), - ), - }), - ) - .describe("Proposed applications per field"), - }), - execute: async (input: any, context?: Context) => { - if (!context) throw new Error("Context is required") + const simulateFarmPlanTool = tool( + async (input: any, config?: RunnableConfig) => { const args = input as SimulationArgs - const principalId = context.state.get("principalId") as PrincipalId + const principalId = config?.configurable?.principalId as PrincipalId const calendar = - (context.state.get("calendar") as string) || + (config?.configurable?.calendar as string) || new Date().getFullYear().toString() - const nmiApiKey = context.state.get("nmiApiKey") as + const nmiApiKey = config?.configurable?.nmiApiKey as | string | undefined @@ -445,7 +406,8 @@ export function createFertilizerPlannerTools(fdm: FdmType) { const fieldResults = await Promise.all( args.fields.map(async (fieldData) => { - const fieldInfo = await getField( + try { + const fieldInfo = await getField( fdm, principalId, fieldData.b_id, @@ -675,6 +637,15 @@ export function createFertilizerPlannerTools(fdm: FdmType) { advice, }, } + } catch (e) { + return { + b_id: fieldData.b_id, + b_area: null, + error: e instanceof Error ? e.message : String(e), + isValid: false, + fieldMetrics: null, + } + } }), ) @@ -998,26 +969,83 @@ export function createFertilizerPlannerTools(fdm: FdmType) { agronomicWarnings, } }, - }) + { + name: "simulateFarmPlan", + description: + "Simulates a proposed fertilizer plan to check compliance against all 3 legal norms, organic matter balance, and nitrogen balance.", + schema: z.object({ + b_id_farm: z.string().describe("The ID of the farm"), + strategies: z + .object({ + isOrganic: z.boolean().optional(), + fillManureSpace: z.boolean().optional(), + reduceAmmoniaEmissions: z.boolean().optional(), + keepNitrogenBalanceBelowTarget: z.boolean().optional(), + workOnRotationLevel: z.boolean().optional(), + isDerogation: z.boolean().optional(), + }) + .optional() + .describe("User strategies to enforce in warnings"), + fields: z + .array( + z.object({ + b_id: z.string().describe("The field ID"), + b_lu_catalogue: z + .string() + .describe( + "The crop catalogue ID (e.g., nl_265) for this field", + ), + b_lu_name: z + .string() + .describe( + "The name of the crop (e.g., Wintertarwe)", + ), + b_lu_start: z + .string() + .describe( + "The sowing or start date of the crop (YYYY-MM-DD)", + ), + applications: z.array( + z.object({ + p_id_catalogue: z.string(), + p_app_amount: z + .number() + .describe("Application amount in kg/ha"), + p_app_amount_unit: z + .string() + .optional() + .describe( + "The unit of the application amount (e.g., m3/ha, kg/ha, l/ha, t/ha)", + ), + p_app_amount_display: z + .number() + .optional() + .describe( + "The numeric application amount (unit is carried separately in p_app_amount_unit)", + ), + p_app_date: z + .string() + .describe( + "Application date in YYYY-MM-DD format", + ), + p_app_method: z.string().optional(), + }), + ), + }), + ) + .describe("Proposed applications per field"), + }), + }, + ) /** * Tool for loading crop-specific fertilizer preferences from the skill reference files. * Returns guidance for the crops present on the farm, loaded from individual per-crop * markdown files so only relevant content is returned. */ - const getCropFertilizerGuideTool = new FunctionTool({ - name: "getCropFertilizerGuide", - description: - "Load crop-specific fertilizer preferences and restrictions for the crops on this farm. Call this once after getFarmFields, passing all unique b_lu_catalogue values found on the farm. Returns agronomic rules (preferred products, split timings, nutrients to avoid) per crop group.", - parameters: z.object({ - b_lu_catalogues: z - .array(z.string()) - .describe( - "List of unique crop catalogue codes present on the farm (e.g. ['nl_2014', 'nl_259', 'nl_265'])", - ), - }), - execute: async (rawInput) => { - const input = rawInput as { b_lu_catalogues: string[] } + const getCropFertilizerGuideTool = tool( + async (rawInput: { b_lu_catalogues: string[] }) => { + const input = rawInput const catalogues = input.b_lu_catalogues.filter(Boolean) const currentDir = dirname(fileURLToPath(import.meta.url)) // Resolve the skills base path — works for both bundled dist and source/test. @@ -1036,9 +1064,15 @@ export function createFertilizerPlannerTools(fdm: FdmType) { const skillBase = existsSync(distPath) ? distPath : srcPath const indexPath = join(skillBase, "assets", "crop-index.json") - const cropIndex: Record = JSON.parse( - readFileSync(indexPath, "utf-8"), - ) + let cropIndex: Record + try { + cropIndex = JSON.parse(readFileSync(indexPath, "utf-8")) + } catch { + return { + guide: "No crop-specific fertilizer guidance available (index not found).", + matchedCrops: [], + } + } // Deduplicate filenames so each guide file is loaded at most once. const filesToLoad = new Set() @@ -1067,7 +1101,19 @@ export function createFertilizerPlannerTools(fdm: FdmType) { matchedCrops: [...filesToLoad], } }, - }) + { + name: "getCropFertilizerGuide", + description: + "Load crop-specific fertilizer preferences and restrictions for the crops on this farm. Call this once after getFarmFields, passing all unique b_lu_catalogue values found on the farm. Returns agronomic rules (preferred products, split timings, nutrients to avoid) per crop group.", + schema: z.object({ + b_lu_catalogues: z + .array(z.string()) + .describe( + "List of unique crop catalogue codes present on the farm (e.g. ['nl_2014', 'nl_259', 'nl_265'])", + ), + }), + }, + ) return [ getFarmFieldsTool, diff --git a/fdm-app/.env.example b/fdm-app/.env.example index 711726640..787afb3ab 100644 --- a/fdm-app/.env.example +++ b/fdm-app/.env.example @@ -135,4 +135,16 @@ PUBLIC_POSTHOG_HOST= # Example: https://eu.i.posthog.com # Required: No POSTMARK_API_KEY= POSTMARK_SENDER_ADDRESS= -POSTMARK_SENDER_NAME= \ No newline at end of file +POSTMARK_SENDER_NAME= + +# ------------------------------------- +# LangSmith Tracing (optional, development) +# ------------------------------------- +# Enable LangSmith tracing for full observability of agent reasoning, +# tool calls, token usage, and latency. No code changes required — +# set these env vars and all LangGraph runs are automatically traced. +# Obtain an API key at https://smith.langchain.com/ +# Required: No (omit or leave empty to disable) +LANGSMITH_TRACING=true +LANGCHAIN_API_KEY= +LANGCHAIN_PROJECT= \ No newline at end of file diff --git a/fdm-app/app/components/blocks/gerrit/schema.ts b/fdm-app/app/components/blocks/gerrit/schema.ts index 65ebdd953..f727f6ffd 100644 --- a/fdm-app/app/components/blocks/gerrit/schema.ts +++ b/fdm-app/app/components/blocks/gerrit/schema.ts @@ -39,7 +39,7 @@ export const GEMINI_MODELS = [ // { value: "gemini-2.5-pro", label: "Gemini 2.5 Pro (stabiel)" }, // { value: "gemini-2.5-flash", label: "Gemini 2.5 Flash (zuinig)" }, { - value: "gemini-3.1-flash-lite-preview", + value: "gemini-3.1-flash-lite", label: "Gemini 3.1 Flash Lite (snel)", }, ] diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.gerrit.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.gerrit.tsx index d39fcc576..3a75938b8 100644 --- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.gerrit.tsx +++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.gerrit.tsx @@ -1,9 +1,11 @@ import { zodResolver } from "@hookform/resolvers/zod" import { + AgentRecursionLimitError, AgentTimeoutError, buildFertilizerPlanPrompt, createFertilizerPlannerAgent, type FarmFieldSummary, + FertilizerPlanSchema, type OneShotAgentResult, runOneShotAgent, } from "@nmi-agro/fdm-agents" @@ -133,14 +135,14 @@ export async function loader({ request, params }: LoaderFunctionArgs) { session.principal_id, b_id_farm, timeframe.start ?? new Date(), - ) + ).catch(() => false) const isDerogationFarm = await isDerogationGrantedForYear( fdm, session.principal_id, b_id_farm, Number.parseInt(calendar, 10), - ) + ).catch(() => false) return { farm: { @@ -315,12 +317,14 @@ async function computePlanMetrics( const syntheticApps: FertilizerApplication[] = field.applications.map((app, i) => { + const sanitizedCatalogueId = + app.p_id_catalogue.replace(/[^\x00-\x7F]/g, "") const fert = fertilizers.find( - (f) => f.p_id_catalogue === app.p_id_catalogue, + (f) => f.p_id_catalogue === sanitizedCatalogueId, ) return { - p_id: fert?.p_id ?? app.p_id_catalogue, - p_id_catalogue: app.p_id_catalogue, + p_id: fert?.p_id ?? sanitizedCatalogueId, + p_id_catalogue: sanitizedCatalogueId, p_name_nl: fert?.p_name_nl ?? null, p_app_amount: app.p_app_amount, p_app_date: new Date(app.p_app_date), @@ -695,14 +699,14 @@ export async function action({ request, params }: ActionFunctionArgs) { }), ) const fieldsSummary: FarmFieldSummary[] = fieldsData - .filter((f) => !f.b_bufferstrip) .map((f) => ({ b_id: f.b_id, b_name: f.b_name, b_area: f.b_area ?? 0, - b_bufferstrip: false, + b_bufferstrip: f.b_bufferstrip ?? false, b_lu_catalogue: f.b_lu_catalogue, b_lu_name: f.b_lu_name, + b_lu_croprotation: f.b_lu_croprotation, b_soiltype_agr: f.b_soiltype_agr, b_gwl_class: f.b_gwl_class, a_som_loi: f.a_som_loi, @@ -712,6 +716,21 @@ export async function action({ request, params }: ActionFunctionArgs) { session.principal_id, b_id_farm, ) + + if (fieldsSummary.length === 0) { + return dataWithError( + null, + "Er zijn geen percelen gevonden voor dit bedrijf. Voeg eerst percelen toe.", + ) + } + + if (fertilizers.length === 0) { + return dataWithError( + null, + "Er zijn geen meststoffen gevonden voor dit bedrijf. Voeg eerst meststoffen toe aan het bedrijf.", + ) + } + const agent = createFertilizerPlannerAgent( fdm, serverConfig.integrations.gemini?.api_key, @@ -737,6 +756,8 @@ export async function action({ request, params }: ActionFunctionArgs) { let rawResult = "" let usageData: OneShotAgentResult["usage"] = null let toolCalls: string[] | undefined + let structuredResponse: Record | undefined + let runId: string | undefined try { const agentResult = await runOneShotAgent( @@ -747,6 +768,8 @@ export async function action({ request, params }: ActionFunctionArgs) { rawResult = agentResult.result usageData = agentResult.usage toolCalls = agentResult.toolCalls + structuredResponse = agentResult.structuredResponse + runId = agentResult.runId } catch (err: unknown) { if (err instanceof AgentTimeoutError) { return dataWithError( @@ -754,45 +777,67 @@ export async function action({ request, params }: ActionFunctionArgs) { "Het duurde te lang om een plan te genereren. Probeer het opnieuw.", ) } + if (err instanceof AgentRecursionLimitError) { + return dataWithError( + null, + "Gerrit heeft te veel stappen nodig om een plan te maken voor dit bedrijf. Probeer het opnieuw of vereenvoudig de instellingen.", + ) + } + console.error("[gerrit] Agent error (run: unknown):", err) return dataWithError( null, err instanceof Error - ? err.message + ? err.message.slice(0, 200) : "Gerrit kon geen plan genereren.", ) } - const firstBrace = rawResult.indexOf("{") - const lastBrace = rawResult.lastIndexOf("}") - if (firstBrace === -1 || lastBrace <= firstBrace) - return dataWithError( - null, - "Gerrit gaf een onleesbaar antwoord. Probeer het opnieuw.", - ) - + // Prefer structured output from responseFormat, fall back to string parsing let parsedPlan: ParsedPlan - try { - parsedPlan = JSON.parse( - rawResult.slice(firstBrace, lastBrace + 1), - ) as ParsedPlan - } catch { - // Attempt to recover truncated JSON by closing open brackets - const truncated = rawResult.slice(firstBrace, lastBrace + 1) - const repaired = repairTruncatedJson(truncated) - if (repaired) { - try { - parsedPlan = JSON.parse(repaired) as ParsedPlan - } catch { + const useStructured = structuredResponse + ? FertilizerPlanSchema.safeParse(structuredResponse) + : null + + if (useStructured?.success) { + parsedPlan = useStructured.data as unknown as ParsedPlan + } else { + if (structuredResponse && !useStructured?.success) { + console.warn( + "[gerrit] structuredResponse failed schema validation, falling back to raw text", + useStructured?.error?.flatten(), + ) + } + // Fallback: extract JSON from raw text response + const firstBrace = rawResult.indexOf("{") + const lastBrace = rawResult.lastIndexOf("}") + if (firstBrace === -1 || lastBrace <= firstBrace) + return dataWithError( + null, + "Gerrit gaf een onleesbaar antwoord. Probeer het opnieuw.", + ) + + try { + parsedPlan = JSON.parse( + rawResult.slice(firstBrace, lastBrace + 1), + ) as ParsedPlan + } catch { + const truncated = rawResult.slice(firstBrace, lastBrace + 1) + const repaired = repairTruncatedJson(truncated) + if (repaired) { + try { + parsedPlan = JSON.parse(repaired) as ParsedPlan + } catch { + return dataWithError( + null, + "Gerrit gaf een ongeldig plan terug. Probeer het opnieuw.", + ) + } + } else { return dataWithError( null, "Gerrit gaf een ongeldig plan terug. Probeer het opnieuw.", ) } - } else { - return dataWithError( - null, - "Gerrit gaf een ongeldig plan terug. Probeer het opnieuw.", - ) } } @@ -816,9 +861,11 @@ export async function action({ request, params }: ActionFunctionArgs) { b_bufferstrip: fd.b_bufferstrip ?? false, applications: (proposedField?.applications || []).map( (app) => { + const sanitizedCatalogueId = + app.p_id_catalogue.replace(/[^\x00-\x7F]/g, "") const fert = fertilizers.find( (f: Fertilizer) => - f.p_id_catalogue === app.p_id_catalogue, + f.p_id_catalogue === sanitizedCatalogueId, ) const methodMeta = applicationMethods?.options?.find( @@ -846,9 +893,10 @@ export async function action({ request, params }: ActionFunctionArgs) { } return { ...app, + p_id_catalogue: sanitizedCatalogueId, ...unitConvertedAmount, p_name_nl: - fert?.p_name_nl || app.p_id_catalogue, + fert?.p_name_nl || sanitizedCatalogueId, p_type: fert?.p_type || "other", p_app_method_name: methodMeta?.label ?? app.p_app_method, @@ -901,7 +949,7 @@ export async function action({ request, params }: ActionFunctionArgs) { ], $ai_tools_called: toolCalls || [], $ai_tool_call_count: toolCalls?.length || 0, - $ai_trace_id: `gerrit-${b_id_farm}-${calendar}`, + $ai_trace_id: runId ?? `gerrit-${b_id_farm}-${calendar}`, b_id_farm, calendar, field_count: fieldsData.length, @@ -1000,6 +1048,13 @@ export async function action({ request, params }: ActionFunctionArgs) { ) } + const appDate = new Date(app.p_app_date) + if (Number.isNaN(appDate.getTime())) { + throw new Error( + `Ongeldige toepassingsdatum: ${app.p_app_date}`, + ) + } + await addFertilizerApplication( tx, session.principal_id, @@ -1007,7 +1062,7 @@ export async function action({ request, params }: ActionFunctionArgs) { fertilizer.p_id, amount, app.p_app_method, - new Date(app.p_app_date), + appDate, ) } } @@ -1019,11 +1074,11 @@ export async function action({ request, params }: ActionFunctionArgs) { ) } catch (e: unknown) { console.error("Save failed:", e) - return dataWithError( - null, - "Fout bij opslaan: " + - (e instanceof Error ? e.message : String(e)), - ) + const detail = + e instanceof Error + ? e.message.slice(0, 200) + : "Onbekende fout" + return dataWithError(null, `Fout bij opslaan: ${detail}`) } } diff --git a/fdm-calculator/src/nutrient-advice/index.ts b/fdm-calculator/src/nutrient-advice/index.ts index 2c6bd35c1..756394c4b 100644 --- a/fdm-calculator/src/nutrient-advice/index.ts +++ b/fdm-calculator/src/nutrient-advice/index.ts @@ -23,100 +23,90 @@ export async function requestNutrientAdvice({ nmiApiKey, b_bufferstrip, }: NutrientAdviceInputs): Promise { - try { - if (b_bufferstrip) { - return { - d_n_req: 0, - d_n_norm: 0, - d_n_norm_man: 0, - d_p_norm: 0, - d_p_req: 0, - d_k_req: 0, - d_c_req: 0, - d_ca_req: 0, - d_s_req: 0, - d_mg_req: 0, - d_cu_req: 0, - d_zn_req: 0, - d_co_req: 0, - d_mn_req: 0, - d_mo_req: 0, - d_na_req: 0, - d_b_req: 0, - } + if (b_bufferstrip) { + return { + d_n_req: 0, + d_n_norm: 0, + d_n_norm_man: 0, + d_p_norm: 0, + d_p_req: 0, + d_k_req: 0, + d_c_req: 0, + d_ca_req: 0, + d_s_req: 0, + d_mg_req: 0, + d_cu_req: 0, + d_zn_req: 0, + d_co_req: 0, + d_mn_req: 0, + d_mo_req: 0, + d_na_req: 0, + d_b_req: 0, } + } - if (!nmiApiKey) { - throw new Error("NMI API key not provided") - } + if (!nmiApiKey) { + throw new Error("NMI API key not provided") + } - let a_nmin_cc_d30: number | undefined - let a_nmin_cc_d60: number | undefined - const soilData: Record = {} - // Extract Nmin values and other soil parameters from currentSoilData - for (const item of currentSoilData as CurrentSoilData) { - // Exclude 'a_nmin_cc' from soilData as it's handled separately - if (item.parameter === "a_nmin_cc") { - if ((item.a_depth_lower ?? 0) <= 30) { - a_nmin_cc_d30 = item.value as number - } else if ((item.a_depth_lower ?? 0) <= 60) { - a_nmin_cc_d60 = item.value as number - } - continue // Skip adding a_nmin_cc to soilData - } - if (item.value !== null && item.value !== undefined) { - soilData[item.parameter] = item.value as string | number + let a_nmin_cc_d30: number | undefined + let a_nmin_cc_d60: number | undefined + const soilData: Record = {} + // Extract Nmin values and other soil parameters from currentSoilData + for (const item of currentSoilData as CurrentSoilData) { + // Exclude 'a_nmin_cc' from soilData as it's handled separately + if (item.parameter === "a_nmin_cc") { + if ((item.a_depth_lower ?? 0) <= 30) { + a_nmin_cc_d30 = item.value as number + } else if ((item.a_depth_lower ?? 0) <= 60) { + a_nmin_cc_d60 = item.value as number } + continue // Skip adding a_nmin_cc to soilData } - - // Create request body for the NMI API - const brpSegments = b_lu_catalogue.split("_") - const brpCode = brpSegments[brpSegments.length - 1] - if (!brpCode) { - throw new Error("Invalid b_lu_catalogue provided") - } - const body = { - a_lon: b_centroid[0], - a_lat: b_centroid[1], - b_lu_brp: [brpCode], - a_nmin_cc_d30: a_nmin_cc_d30, - a_nmin_cc_d60: a_nmin_cc_d60, - ...soilData, // Include all other soil data parameters + if (item.value !== null && item.value !== undefined) { + soilData[item.parameter] = item.value as string | number } + } - // Send request to NMI API - const responseApi = await fetch( - "https://api.nmi-agro.nl/bemestingsplan/nutrients", - { - method: "POST", - headers: { - Authorization: `Bearer ${nmiApiKey}`, - "Content-Type": "application/json", - }, - body: JSON.stringify(body), - }, - ) - - if (!responseApi.ok) { - const errorText = await responseApi.text().catch(() => "") - throw new Error( - `Request to NMI API failed with status ${responseApi.status}: ${responseApi.statusText} - ${errorText}`, - ) - } + // Create request body for the NMI API + const brpSegments = b_lu_catalogue.split("_") + const brpCode = brpSegments[brpSegments.length - 1] + if (!brpCode) { + throw new Error("Invalid b_lu_catalogue provided") + } + const body = { + a_lon: b_centroid[0], + a_lat: b_centroid[1], + b_lu_brp: [brpCode], + a_nmin_cc_d30: a_nmin_cc_d30, + a_nmin_cc_d60: a_nmin_cc_d60, + ...soilData, // Include all other soil data parameters + } - const result: NutrientAdviceResponse = await responseApi.json() - const response: NutrientAdvice = result.data.year + // Send request to NMI API + const responseApi = await fetch( + "https://api.nmi-agro.nl/bemestingsplan/nutrients", + { + method: "POST", + headers: { + Authorization: `Bearer ${nmiApiKey}`, + "Content-Type": "application/json", + }, + body: JSON.stringify(body), + }, + ) - return response - } catch (error) { - console.error( - "Error fetching nutrient advice:", - error instanceof Error - ? error.message - : "An unknown error occurred", + if (!responseApi.ok) { + const errorText = await responseApi.text().catch(() => "") + throw new Error( + `Request to NMI API failed with status ${responseApi.status}: ${responseApi.statusText} - ${errorText}`, ) - throw error } + + const result: NutrientAdviceResponse = await responseApi.json() + const response: NutrientAdvice = result.data.year + + return response } /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b68d8ff10..56cf879b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,11 +10,11 @@ catalogs: specifier: ^1.65.0 version: 1.65.0 '@types/node': - specifier: ^25.6.2 + specifier: ^25.7.0 version: 25.6.2 '@vitest/coverage-v8': - specifier: 4.1.5 - version: 4.1.5 + specifier: 4.1.6 + version: 4.1.6 better-auth: specifier: ^1.6.10 version: 1.6.10 @@ -37,7 +37,7 @@ catalogs: specifier: ^6.0.3 version: 6.0.3 vitest: - specifier: ^4.1.5 + specifier: ^4.1.6 version: 4.1.5 importers: @@ -49,19 +49,25 @@ importers: version: 2.4.15 '@changesets/changelog-github': specifier: ^0.6.0 - version: 0.6.0(encoding@0.1.13) + version: 0.6.0 '@changesets/cli': specifier: ^2.31.0 - version: 2.31.0(@types/node@25.6.2) + version: 2.31.0(@types/node@25.7.0) turbo: specifier: ^2.9.12 version: 2.9.12 fdm-agents: dependencies: - '@google/adk': - specifier: ^1.1.0 - version: 1.1.0(@grpc/grpc-js@1.14.3)(@mikro-orm/mariadb@6.6.14(@mikro-orm/core@6.6.14)(pg@8.20.0))(@mikro-orm/mssql@6.6.14(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.14(@mikro-orm/core@6.6.14)(@types/node@25.6.2)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@langchain/core': + specifier: ^1.1.46 + version: 1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + '@langchain/google-genai': + specifier: ^2.1.30 + version: 2.1.30(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0)) + '@langchain/langgraph': + specifier: ^1.3.0 + version: 1.3.0(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0)(zod@4.4.3) '@nmi-agro/fdm-calculator': specifier: workspace:^ version: link:../fdm-calculator @@ -71,19 +77,25 @@ importers: '@nmi-agro/fdm-data': specifier: workspace:^ version: link:../fdm-data + '@posthog/ai': + specifier: ^7.18.4 + version: 7.18.4(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(posthog-node@5.33.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0) + langchain: + specifier: ^1.4.0 + version: 1.4.0(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0) posthog-node: - specifier: ^5.33.4 - version: 5.33.4 + specifier: ^5.33.7 + version: 5.33.7 zod: specifier: ^4.4.3 version: 4.4.3 devDependencies: '@types/node': specifier: 'catalog:' - version: 25.6.2 + version: 25.7.0 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.5(vitest@4.1.5) + version: 4.1.6(vitest@4.1.6) tsdown: specifier: 'catalog:' version: 0.22.0(tsx@4.21.0)(typescript@6.0.3) @@ -92,7 +104,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + version: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.7.0)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) fdm-app: dependencies: @@ -152,13 +164,13 @@ importers: version: 0.17.0 '@sentry/profiling-node': specifier: ^10.52.0 - version: 10.52.0(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1)) + version: 10.52.0 '@sentry/react-router': specifier: ^10.52.0 - version: 10.52.0(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))(@react-router/node@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(encoding@0.1.13)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(rollup@4.60.3) + version: 10.52.0(@react-router/node@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(rollup@4.60.3) '@tailwindcss/vite': specifier: ^4.3.0 - version: 4.3.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + version: 4.3.0(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) '@tanstack/react-table': specifier: ^8.21.3 version: 8.21.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -182,7 +194,7 @@ importers: version: 7.3.5 better-auth: specifier: 'catalog:' - version: 1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.2))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + version: 1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.6) chrono-node: specifier: ^2.9.1 version: 2.9.1 @@ -203,7 +215,7 @@ importers: version: 3.4.2 drizzle-orm: specifier: 'catalog:' - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7) + version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) file-type: specifier: ^22.0.1 version: 22.0.1 @@ -321,10 +333,10 @@ importers: version: 1.65.0 '@react-router/dev': specifier: ^7.15.0 - version: 7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4) + version: 7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4) '@react-router/fs-routes': specifier: ^7.15.0 - version: 7.15.0(@react-router/dev@7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4))(typescript@6.0.3) + version: 7.15.0(@react-router/dev@7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4))(typescript@6.0.3) '@tailwindcss/postcss': specifier: ^4.3.0 version: 4.3.0 @@ -360,10 +372,10 @@ importers: version: 6.0.3 vite: specifier: ^8.0.11 - version: 8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + version: 8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) vite-node: specifier: ^6.0.0 - version: 6.0.0(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + version: 6.0.0(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) fdm-calculator: dependencies: @@ -391,7 +403,7 @@ importers: version: 25.6.2 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.5(vitest@4.1.5) + version: 4.1.6(vitest@4.1.5) postgres: specifier: ^3.4.9 version: 3.4.9 @@ -409,7 +421,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) fdm-core: dependencies: @@ -421,13 +433,13 @@ importers: version: 7946.0.16 better-auth: specifier: 'catalog:' - version: 1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.2))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) + version: 1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5) decimal.js: specifier: ^10.6.0 version: 10.6.0 drizzle-orm: specifier: 'catalog:' - version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7) + version: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) nanoid: specifier: ^5.1.11 version: 5.1.11 @@ -458,7 +470,7 @@ importers: version: 13.15.10 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.5(vitest@4.1.5) + version: 4.1.6(vitest@4.1.5) drizzle-kit: specifier: 'catalog:' version: 0.31.10 @@ -482,7 +494,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) fdm-data: dependencies: @@ -498,7 +510,7 @@ importers: version: 25.6.2 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.5(vitest@4.1.5) + version: 4.1.6(vitest@4.1.5) tsdown: specifier: 'catalog:' version: 0.22.0(tsx@4.21.0)(typescript@6.0.3) @@ -513,7 +525,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) fdm-docs: dependencies: @@ -614,7 +626,7 @@ importers: version: 25.6.2 '@vitest/coverage-v8': specifier: 'catalog:' - version: 4.1.5(vitest@4.1.5) + version: 4.1.6(vitest@4.1.5) tsdown: specifier: 'catalog:' version: 0.22.0(tsx@4.21.0)(typescript@6.0.3) @@ -626,25 +638,10 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) packages: - '@a2a-js/sdk@0.3.13': - resolution: {integrity: sha512-BZr0f9JVNQs3GKOM9xINWCh6OKIJWZFPyqqVqTym5mxO2Eemc6I/0zL7zWnljHzGdaf5aZQyQN5xa6PSH62q+A==} - engines: {node: '>=18'} - peerDependencies: - '@bufbuild/protobuf': ^2.10.2 - '@grpc/grpc-js': ^1.11.0 - express: ^4.21.2 || ^5.1.0 - peerDependenciesMeta: - '@bufbuild/protobuf': - optional: true - '@grpc/grpc-js': - optional: true - express: - optional: true - '@algolia/abtesting@1.18.1': resolution: {integrity: sha512-aehCadlWOGvrT91KUIZpC0MbB8KBW9yUuvTJFd2xesR7le/IsT4nJUnjCCZ4ZqZCeTcPHPV5mo//fZ5oxcSVYw==} engines: {node: '>= 14.0.0'} @@ -736,76 +733,14 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@azure-rest/core-client@2.6.0': - resolution: {integrity: sha512-iuFKDm8XPzNxPfRjhyU5/xKZmcRDzSuEghXDHHk4MjBV/wFL34GmYVBZnn9wmuoLBeS1qAw9ceMdaeJBPcB1QQ==} - engines: {node: '>=20.0.0'} - - '@azure/abort-controller@2.1.2': - resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} - engines: {node: '>=18.0.0'} - - '@azure/core-auth@1.10.1': - resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} - engines: {node: '>=20.0.0'} - - '@azure/core-client@1.10.1': - resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} - engines: {node: '>=20.0.0'} - - '@azure/core-http-compat@2.4.0': - resolution: {integrity: sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA==} - engines: {node: '>=20.0.0'} + '@anthropic-ai/sdk@0.78.0': + resolution: {integrity: sha512-PzQhR715td/m1UaaN5hHXjYB8Gl2lF9UVhrrGrZeysiF6Rb74Wc9GCB8hzLdzmQtBd1qe89F9OptgB9Za1Ib5w==} + hasBin: true peerDependencies: - '@azure/core-client': ^1.10.0 - '@azure/core-rest-pipeline': ^1.22.0 - - '@azure/core-lro@2.7.2': - resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} - engines: {node: '>=18.0.0'} - - '@azure/core-paging@1.6.2': - resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} - engines: {node: '>=18.0.0'} - - '@azure/core-rest-pipeline@1.23.0': - resolution: {integrity: sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ==} - engines: {node: '>=20.0.0'} - - '@azure/core-tracing@1.3.1': - resolution: {integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==} - engines: {node: '>=20.0.0'} - - '@azure/core-util@1.13.1': - resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} - engines: {node: '>=20.0.0'} - - '@azure/identity@4.13.1': - resolution: {integrity: sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==} - engines: {node: '>=20.0.0'} - - '@azure/keyvault-common@2.1.0': - resolution: {integrity: sha512-aCDidWuKY06LWQ4x7/8TIXK6iRqTaRWRL3t7T+LC+j1b07HtoIsOxP/tU90G4jCSBn5TAyUTCtA4MS/y5Hudaw==} - engines: {node: '>=20.0.0'} - - '@azure/keyvault-keys@4.10.0': - resolution: {integrity: sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==} - engines: {node: '>=18.0.0'} - - '@azure/logger@1.3.0': - resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} - engines: {node: '>=20.0.0'} - - '@azure/msal-browser@5.10.0': - resolution: {integrity: sha512-2Y4TlG5mCfxviHutfW50i8Xd8xhGKTgieL02vMYOE5ZbZrVM+drKSGD//tweRAmlmqqp+F9vrKoHWri/buzxWQ==} - engines: {node: '>=0.8.0'} - - '@azure/msal-common@16.6.0': - resolution: {integrity: sha512-FemGljX0csPlBMUE5GUan7BfRn1emeMRUhHSARhqzLN6LA9nt+MgzmAQ1xVqdLm+6plVoxsq9mS5eoyKtpPSgA==} - engines: {node: '>=0.8.0'} - - '@azure/msal-node@5.2.0': - resolution: {integrity: sha512-b/ak8XAqpnGk1N1nsyTVV0Remp48BP3QrGQZ1uCMcvg2S8X1eSXzhHQZEae2oX276Q4KFAqCUswanDtcvIKLrw==} - engines: {node: '>=20'} + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + zod: + optional: true '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} @@ -1552,6 +1487,9 @@ packages: '@borewit/text-codec@0.2.2': resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} + '@cfworker/json-schema@4.1.1': + resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -1617,10 +1555,6 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - '@csstools/cascade-layer-name-parser@2.0.5': resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==} engines: {node: '>=18'} @@ -1921,9 +1855,6 @@ packages: peerDependencies: postcss: ^8.4 - '@dabh/diagnostics@2.0.8': - resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} - '@date-fns/tz@1.4.1': resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} @@ -2795,9 +2726,6 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@gar/promisify@1.1.3': - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - '@geomatico/maplibre-cog-protocol@https://codeload.github.com/SvenVw/maplibre-cog-protocol/tar.gz/fd6765830cd1453c3d20d290d6c40684153c5b7d': resolution: {gitHosted: true, tarball: https://codeload.github.com/SvenVw/maplibre-cog-protocol/tar.gz/fd6765830cd1453c3d20d290d6c40684153c5b7d} version: 0.8.0 @@ -2807,60 +2735,6 @@ packages: '@gerrit0/mini-shiki@3.23.0': resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} - '@google-cloud/opentelemetry-cloud-monitoring-exporter@0.21.0': - resolution: {integrity: sha512-+lAew44pWt6rA4l8dQ1gGhH7Uo95wZKfq/GBf9aEyuNDDLQ2XppGEEReu6ujesSqTtZ8ueQFt73+7SReSHbwqg==} - engines: {node: '>=18'} - peerDependencies: - '@opentelemetry/api': ^1.9.0 - '@opentelemetry/core': ^2.0.0 - '@opentelemetry/resources': ^2.0.0 - '@opentelemetry/sdk-metrics': ^2.0.0 - - '@google-cloud/opentelemetry-cloud-trace-exporter@3.0.0': - resolution: {integrity: sha512-mUfLJBFo+ESbO0dAGboErx2VyZ7rbrHcQvTP99yH/J72dGaPbH2IzS+04TFbTbEd1VW5R9uK3xq2CqawQaG+1Q==} - engines: {node: '>=18'} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - '@opentelemetry/core': ^2.0.0 - '@opentelemetry/resources': ^2.0.0 - '@opentelemetry/sdk-trace-base': ^2.0.0 - - '@google-cloud/opentelemetry-resource-util@3.0.0': - resolution: {integrity: sha512-CGR/lNzIfTKlZoZFfS6CkVzx+nsC9gzy6S8VcyaLegfEJbiPjxbMLP7csyhJTvZe/iRRcQJxSk0q8gfrGqD3/Q==} - engines: {node: '>=18'} - peerDependencies: - '@opentelemetry/core': ^2.0.0 - '@opentelemetry/resources': ^2.0.0 - - '@google-cloud/paginator@5.0.2': - resolution: {integrity: sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==} - engines: {node: '>=14.0.0'} - - '@google-cloud/precise-date@4.0.0': - resolution: {integrity: sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==} - engines: {node: '>=14.0.0'} - - '@google-cloud/projectify@4.0.0': - resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==} - engines: {node: '>=14.0.0'} - - '@google-cloud/promisify@4.0.0': - resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==} - engines: {node: '>=14'} - - '@google-cloud/storage@7.19.0': - resolution: {integrity: sha512-n2FjE7NAOYyshogdc7KQOl/VZb4sneqPjWouSyia9CMDdMhRX5+RIbqalNmC7LOLzuLAN89VlF2HvG8na9G+zQ==} - engines: {node: '>=14'} - - '@google/adk@1.1.0': - resolution: {integrity: sha512-uB6ieMtif2hHsvTMB4WgGaYbwiK5tDDpm0R5pCdruUtMk+TTPDgJnVm8cpkXpOsutuEX5kg+1H6vQlw/CPqgfg==} - peerDependencies: - '@mikro-orm/mariadb': ^6.6.6 - '@mikro-orm/mssql': ^6.6.6 - '@mikro-orm/mysql': ^6.6.6 - '@mikro-orm/postgresql': ^6.6.6 - '@mikro-orm/sqlite': ^6.6.6 - '@google/genai@1.52.0': resolution: {integrity: sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==} engines: {node: '>=20.0.0'} @@ -2870,14 +2744,9 @@ packages: '@modelcontextprotocol/sdk': optional: true - '@grpc/grpc-js@1.14.3': - resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.8.1': - resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} - engines: {node: '>=6'} - hasBin: true + '@google/generative-ai@0.24.1': + resolution: {integrity: sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==} + engines: {node: '>=18.0.0'} '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -2885,12 +2754,6 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@hono/node-server@1.19.14': - resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} - engines: {node: '>=18.14.1'} - peerDependencies: - hono: ^4 - '@hookform/resolvers@5.2.2': resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} peerDependencies: @@ -3091,24 +2954,6 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@js-joda/core@5.7.0': - resolution: {integrity: sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==} - - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - - '@jsep-plugin/assignment@1.3.0': - resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@jsep-plugin/regex@1.0.4': - resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - '@jsonjoy.com/base64@1.1.2': resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} engines: {node: '>=10.0'} @@ -3229,6 +3074,53 @@ packages: peerDependencies: tslib: '2' + '@langchain/core@1.1.46': + resolution: {integrity: sha512-i8rDC83BpItxChCw4Lf+6tAr+k+OUcbirc5ZkrhI9ywYWmvxegUljLGOGYvtJNTbEAIFkhYIODPE5QRqyjF6sA==} + engines: {node: '>=20'} + + '@langchain/google-genai@2.1.30': + resolution: {integrity: sha512-0wKgy1NvV89fw5MwYiOOhh18SnUEH20z6MZrPV6Tj2hMAA3jAHVSLlIcCQ2mDRJo2r1aHLV8MDXhzkvD1tEHoQ==} + engines: {node: '>=20'} + peerDependencies: + '@langchain/core': ^1.1.43 + + '@langchain/langgraph-checkpoint@1.0.2': + resolution: {integrity: sha512-F4E5Tr0nt8FGghgdscJtHw+ABzChOHeI80R7Y1pjIHdiJom6c2ieo76vL+FWiny80JmoGqhrVAEIWrw0cXKPxg==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': ^1.1.44 + + '@langchain/langgraph-sdk@1.9.2': + resolution: {integrity: sha512-1kDPjR0VH/39q2h8k0Sxi35KxOvEQPModVCepxGLlRkbZmuWUH+zfICuJd3rmD1ByeOKQBZEaB7Y+VCYmSMt1w==} + peerDependencies: + react: ^18 || ^19 + react-dom: ^18 || ^19 + svelte: ^4.0.0 || ^5.0.0 + vue: ^3.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + svelte: + optional: true + vue: + optional: true + + '@langchain/langgraph@1.3.0': + resolution: {integrity: sha512-QvhTjiyqFPz81A+y6LHs223w6DTjv5+882DT4mup72bd72rRhNjTYo5fhes5um0swnKArvY/arc7KeFInfHHWw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': ^1.1.44 + zod: ^3.25.32 || ^4.2.0 + zod-to-json-schema: ^3.x + peerDependenciesMeta: + zod-to-json-schema: + optional: true + + '@langchain/protocol@0.0.15': + resolution: {integrity: sha512-MllvbpMjqHevUm+v94M422mH7XKN+wGCvJRBVROTWBotEDOATYB4Ktk2UheYP859y9o2LlhtPek5t1T9eyfAbQ==} + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -3314,75 +3206,9 @@ packages: '@types/react': '>=16' react: '>=16' - '@mikro-orm/core@6.6.14': - resolution: {integrity: sha512-jKdtf1A2wI2D48phOPJzTc3h7Bev64Ype0FHwbUgHEdZ5VxrCNLKOziFnYqMfPmBe0piVExLaPN2qXgbzCiApw==} - engines: {node: '>= 18.12.0'} - - '@mikro-orm/knex@6.6.14': - resolution: {integrity: sha512-xQWq9+7TwE8LLul1RkhjB7/0/iCHMlkSmEToVpz+NNFoPj6M32DfY9mhNnM6qPZ/HF50WjpcVgCgi9ADrEBSFA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - better-sqlite3: '*' - libsql: '*' - mariadb: '*' - peerDependenciesMeta: - better-sqlite3: - optional: true - libsql: - optional: true - mariadb: - optional: true - - '@mikro-orm/mariadb@6.6.14': - resolution: {integrity: sha512-utm833ym7ScKN9szU+BZoOQqmuXPm2WIIruC66OZIGLze9kw4eGUdoT+QD8kvq2bzGux2RZZ/9AdzjcxDWVvWg==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/mssql@6.6.14': - resolution: {integrity: sha512-juofAWhCkN+Pa/g/ppI8hMvqoWzvAX2GG2THc2+7UU33iLAcepFunRudertHgzb+XkpxwVn9I9wSRQcvwRBmvw==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/mysql@6.6.14': - resolution: {integrity: sha512-H52L3LnHuTbB6PTYK583MzijMywyuRrJnEoKGzVjUkH4VCXOo9wp4Cppk+CBXn9JP0Ngd59CCoGUIGKRg4p/NA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/postgresql@6.6.14': - resolution: {integrity: sha512-hgyxpuTaXK0nYhhkmPkz8lx1nzhsqtOQuqQ+oabtyEKuqzPeANRJaV2TczIFYMIczyxKWOylV7g//13qrwqmNQ==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/reflection@6.6.14': - resolution: {integrity: sha512-9TlGIMjaDvzUdI9qVeWQZgnZMUKJB4VHMLzsfQq+KFMKN33P9FLJV1rNjFHzGWsUYR4PkhwzrBcyhUO8grgZrA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/sqlite@6.6.14': - resolution: {integrity: sha512-SJCGMB8gJgfsGK3MROpHphyCpCBat/Cc2TE5Py4A7SZ82eGzYEpT/dMBpJ+OyRGk/Irpvf6PJiKfgSZog5CaFQ==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - '@mjackson/node-fetch-server@0.2.0': resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} - '@modelcontextprotocol/sdk@1.29.0': - resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} - engines: {node: '>=18'} - peerDependencies: - '@cfworker/json-schema': ^4.1.1 - zod: ^3.25 || ^4.0 - peerDependenciesMeta: - '@cfworker/json-schema': - optional: true - '@module-federation/error-codes@0.22.0': resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==} @@ -3493,9 +3319,6 @@ packages: resolution: {integrity: sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==} engines: {node: '>= 20.19.0'} - '@nodable/entities@2.1.0': - resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3508,18 +3331,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@npmcli/fs@1.1.1': - resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} - - '@npmcli/move-file@1.1.2': - resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} - engines: {node: '>=10'} - deprecated: This functionality has been moved to @npmcli/fs - - '@opentelemetry/api-logs@0.205.0': - resolution: {integrity: sha512-wBlPk1nFB37Hsm+3Qy73yQSobVn28F4isnWIBvKpd5IUH/eat8bwcL02H9yzmHyyPmukeccSl2mbN5sDQZYnPg==} - engines: {node: '>=8.0.0'} - '@opentelemetry/api-logs@0.207.0': resolution: {integrity: sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ==} engines: {node: '>=8.0.0'} @@ -3536,26 +3347,10 @@ packages: resolution: {integrity: sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==} engines: {node: '>=8.0.0'} - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - '@opentelemetry/api@1.9.1': resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} engines: {node: '>=8.0.0'} - '@opentelemetry/context-async-hooks@2.7.1': - resolution: {integrity: sha512-OPFBYuXEn1E4ja3Y6eeA7O+ZnLBNcXTV5Cgsn1VaqBZ6hC5FnpZPLBNme1LJY8ZtF4aOujPKFoeWN4ik487KuQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/core@2.1.0': - resolution: {integrity: sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.2.0': resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3574,30 +3369,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/exporter-logs-otlp-http@0.205.0': - resolution: {integrity: sha512-5JteMyVWiro4ghF0tHQjfE6OJcF7UBUcoEqX3UIQ5jutKP1H+fxFdyhqjjpmeHMFxzOHaYuLlNR1Bn7FOjGyJg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-logs-otlp-http@0.208.0': resolution: {integrity: sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-http@0.205.0': - resolution: {integrity: sha512-fFxNQ/HbbpLmh1pgU6HUVbFD1kNIjrkoluoKJkh88+gnmpFD92kMQ8WFNjPnSbjg2mNVnEkeKXgCYEowNW+p1w==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-trace-otlp-http@0.205.0': - resolution: {integrity: sha512-vr2bwwPCSc9u7rbKc74jR+DXFvyMFQo9o5zs+H/fgbK672Whw/1izUKVf+xfWOdJOvuwTnfWxy+VAY+4TSo74Q==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-amqplib@0.61.0': resolution: {integrity: sha512-mCKoyTGfRNisge4br0NpOFSy2Z1NnEW8hbCJdUDdJFHrPqVzc4IIBPA/vX0U+LUcQqrQvJX+HMIU0dbDRe0i0Q==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3724,42 +3501,18 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-exporter-base@0.205.0': - resolution: {integrity: sha512-2MN0C1IiKyo34M6NZzD6P9Nv9Dfuz3OJ3rkZwzFmF6xzjDfqqCTatc9v1EpNfaP55iDOCLHFyYNCgs61FFgtUQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-exporter-base@0.208.0': resolution: {integrity: sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-transformer@0.205.0': - resolution: {integrity: sha512-KmObgqPtk9k/XTlWPJHdMbGCylRAmMJNXIRh6VYJmvlRDMfe+DonH41G7eenG8t4FXn3fxOGh14o/WiMRR6vPg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-transformer@0.208.0': resolution: {integrity: sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/resource-detector-gcp@0.40.3': - resolution: {integrity: sha512-C796YjBA5P1JQldovApYfFA/8bQwFfpxjUbOtGhn1YZkVTLoNQN+kvBwgALfTPWzug6fWsd0xhn9dzeiUcndag==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/resources@2.1.0': - resolution: {integrity: sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.2.0': resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3772,42 +3525,18 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-logs@0.205.0': - resolution: {integrity: sha512-nyqhNQ6eEzPWQU60Nc7+A5LIq8fz3UeIzdEVBQYefB4+msJZ2vuVtRuk9KxPMw1uHoHDtYEwkr2Ct0iG29jU8w==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' - '@opentelemetry/sdk-logs@0.208.0': resolution: {integrity: sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.4.0 <1.10.0' - '@opentelemetry/sdk-metrics@2.1.0': - resolution: {integrity: sha512-J9QX459mzqHLL9Y6FZ4wQPRZG4TOpMCyPOh6mkr/humxE1W2S3Bvf4i75yiMW9uyed2Kf5rxmLhTm/UK8vNkAw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.9.0 <1.10.0' - '@opentelemetry/sdk-metrics@2.2.0': resolution: {integrity: sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.9.0 <1.10.0' - '@opentelemetry/sdk-metrics@2.7.1': - resolution: {integrity: sha512-MpDJdkiFDs3Pm1RHO3KByuZbuBdJEXEAkiC0+yJdsZGVCdf1RpHR6n+LHDcS7ffmfrt5kVCzJSCfm4z2C7v0uQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.9.0 <1.10.0' - - '@opentelemetry/sdk-trace-base@2.1.0': - resolution: {integrity: sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.2.0': resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3820,12 +3549,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-node@2.7.1': - resolution: {integrity: sha512-pCpQxU68lV+I9s9svqMyVu5iHdDDUnqUpSxqwyCU8A9ejEsSnMPCbearwsUO4yk08ZJzAIUCFuReMdVQvHrdvg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.40.0': resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} @@ -3897,12 +3620,40 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@posthog/ai@7.18.4': + resolution: {integrity: sha512-cyhqjLD/TdQ2HXrXer67vn7vRx7Ii17WqcMhcwNZEFV2K/FGfgWxN4teF18FXC1peL90v2ai/PsYN8JXLuPXRg==} + engines: {node: ^20.20.0 || >=22.22.0} + peerDependencies: + '@ai-sdk/provider': ^2.0.0 || ^3.0.0 + '@openai/agents': ^0.8.0 + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/exporter-trace-otlp-http': '>=0.200.0 <1.0.0' + '@opentelemetry/sdk-trace-base': ^2.0.0 + posthog-node: ^5.0.0 + peerDependenciesMeta: + '@ai-sdk/provider': + optional: true + '@openai/agents': + optional: true + '@opentelemetry/api': + optional: true + '@opentelemetry/exporter-trace-otlp-http': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + '@posthog/core@1.28.4': resolution: {integrity: sha512-wmtUYHYqA3zIAKDKvYWRNWAQsWOIBwxV08e+bWzVy0wQQzpaS/LzzRupXWRMRrLOk+1x3JKFxbqA3n0QGvpqsQ==} + '@posthog/core@1.28.7': + resolution: {integrity: sha512-JmV2wN5sE7u2JWxwNNw6CBrPu5xDzIAMWR9zKBar8Pk/8TRrvbFPlXehap8xOtDslfnilY+/urpHeVHpbXMo4w==} + '@posthog/types@1.372.10': resolution: {integrity: sha512-KuT3vLu3LSFsNWCwasS4gqjH/ysAyIUcB/aJSmKyNhDd/85hAznHRz1eSSl0sMvtsDTYiQIq0I0ybduVbrpPew==} + '@posthog/types@1.373.2': + resolution: {integrity: sha512-6o0AARB7OakxsrQiVeMow/m1QPnsI0Cdm7g0o5mNjVSLH/sU1MuTqckNQDLzImv++MzW0+Gyvq44cgwt3wP/Pw==} + '@prisma/instrumentation@7.6.0': resolution: {integrity: sha512-ZPW2gRiwpPzEfgeZgaekhqXrbW+Y2RJKHVqUmlhZhKzRNCcvR6DykzylDrynpArKKRQtLxoZy36fK7U0p3pdgQ==} peerDependencies: @@ -5416,9 +5167,6 @@ packages: '@slorber/remark-comment@1.0.0': resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} - '@so-ric/colorspace@1.1.6': - resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} - '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} @@ -5810,17 +5558,6 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tootallnate/once@1.1.2': - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - - '@tootallnate/once@2.0.1': - resolution: {integrity: sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==} - engines: {node: '>= 10'} - - '@ts-morph/common@0.28.1': - resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} - '@turbo/darwin-64@2.9.12': resolution: {integrity: sha512-eu3eFRmE9NjgZ0wPdRJ44l+LGSeIky+tz5ZQd8zQkw/Yqi+BM7wq+8nbabeoiVUcICi/IZweMOKl/MCmkrd1+g==} cpu: [x64] @@ -5905,9 +5642,6 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - '@types/caseless@0.12.5': - resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} - '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -6049,12 +5783,12 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@24.12.3': - resolution: {integrity: sha512-8oljBDGun9cIsZRJR6fkihn0TSXJI0UDOOhncYaERq6M0JMDoPLxyscwruJcb4GKS6dvK/d8xebYBg27h/duaQ==} - '@types/node@25.6.2': resolution: {integrity: sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw==} + '@types/node@25.7.0': + resolution: {integrity: sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==} + '@types/pg-pool@2.0.7': resolution: {integrity: sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==} @@ -6093,12 +5827,6 @@ packages: '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} - '@types/readable-stream@4.0.23': - resolution: {integrity: sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==} - - '@types/request@2.48.13': - resolution: {integrity: sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==} - '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -6129,12 +5857,6 @@ packages: '@types/tedious@4.0.14': resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -6162,10 +5884,6 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typespec/ts-http-runtime@0.3.5': - resolution: {integrity: sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==} - engines: {node: '>=20.0.0'} - '@ungap/structured-clone@1.3.1': resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} @@ -6189,11 +5907,11 @@ packages: maplibre-gl: optional: true - '@vitest/coverage-v8@4.1.5': - resolution: {integrity: sha512-38C0/Ddb7HcRG0Z4/DUem8x57d2p9jYgp18mkaYswEOQBGsI1CG4f/hjm0ZCeaJfWhSZ4k7jgs29V1Zom7Ki9A==} + '@vitest/coverage-v8@4.1.6': + resolution: {integrity: sha512-36l628fQ/9a/8ihy97eOtEnvWQEdqULQOJtcaxtoNq0G1w3Mxd4szSahOaMM9/NGyZ+hyKcMtIW/WIxq0XQViQ==} peerDependencies: - '@vitest/browser': 4.1.5 - vitest: 4.1.5 + '@vitest/browser': 4.1.6 + vitest: 4.1.6 peerDependenciesMeta: '@vitest/browser': optional: true @@ -6201,6 +5919,9 @@ packages: '@vitest/expect@4.1.5': resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==} + '@vitest/expect@4.1.6': + resolution: {integrity: sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg==} + '@vitest/mocker@4.1.5': resolution: {integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==} peerDependencies: @@ -6212,21 +5933,47 @@ packages: vite: optional: true + '@vitest/mocker@4.1.6': + resolution: {integrity: sha512-MCFc63czMjEInOlcY2cpQCvCN+KgbAn+60xu9cMgP4sKaLC5JNAKw7JH8QdAnoAC88hW1IiSNZ+GgVXlN1UcMQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@4.1.5': resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} + '@vitest/pretty-format@4.1.6': + resolution: {integrity: sha512-h5SxD/IzNhZYnrSZRsUZQIC+vD0GY8cUvq0iwsmkFKixRCKLLWqCXa/FIQ4S1R+sI+PGoojkHsdNrbZiM9Qpgw==} + '@vitest/runner@4.1.5': resolution: {integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==} + '@vitest/runner@4.1.6': + resolution: {integrity: sha512-nOPCmn2+yD0ZNmKdsXGv/UxMMWbMuKeD6GyYncNwdkYDxpQvrPSKYj2rWuDjC2Y4b6w6hjip5dBKFzEUuZe3vA==} + '@vitest/snapshot@4.1.5': resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==} + '@vitest/snapshot@4.1.6': + resolution: {integrity: sha512-YhsdE6xAVfTDmzjxL2ZDUvjj+ZsgyOKe+TdQzqkD72wIOmHka8NuGQ6NpTNZv9D2Z63fbwWKJPeVpEw4EQgYxw==} + '@vitest/spy@4.1.5': resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==} + '@vitest/spy@4.1.6': + resolution: {integrity: sha512-JFKxMx6udhwKh/Ldo270e17QX710vgunMkuPAvXjHSvC6oqLWAHhVhjg/I71q0u0CBSErIODV1Kjv0FQNSWjdg==} + '@vitest/utils@4.1.5': resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} + '@vitest/utils@4.1.6': + resolution: {integrity: sha512-FxIY+U81R3LGKCxaHHFRQ5+g6/iRgGLmeHWdp2Amj4ljQRrEIWHmZyDfDYBRZlpyqA7qKxtS9DD1dhk8RnRIVQ==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -6281,13 +6028,6 @@ packages: '@zarrita/storage@0.2.0': resolution: {integrity: sha512-855ZXqtnds7spnT8vNvD+MXa3QExP1m2GqShe8yt7uZXHnQLgJHgkpVwFjE1B0KDDRO0ki09hmk6OboTaIfPsQ==} - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - abs-svg-path@0.1.1: resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} @@ -6295,10 +6035,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -6336,10 +6072,6 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -6425,14 +6157,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - aproba@2.1.0: - resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} - - are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -6465,10 +6189,6 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - asn1js@3.0.10: resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} engines: {node: '>=12.0.0'} @@ -6496,12 +6216,6 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -6519,10 +6233,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - aws-ssl-profiles@1.1.2: - resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} - engines: {node: '>= 6.0.0'} - axios@1.16.0: resolution: {integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==} @@ -6679,26 +6389,13 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - bl@6.1.6: - resolution: {integrity: sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==} - body-parser@1.20.5: resolution: {integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - body-parser@2.2.2: - resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} - engines: {node: '>=18'} - bonjour-service@1.3.0: resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} @@ -6744,12 +6441,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -6783,10 +6474,6 @@ packages: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} - cacache@15.3.0: - resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} - engines: {node: '>= 10'} - cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -6877,13 +6564,6 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -6924,10 +6604,6 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -6946,9 +6622,6 @@ packages: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc - code-block-writer@13.0.3: - resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} - collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -6956,10 +6629,6 @@ packages: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-convert@3.1.3: - resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==} - engines: {node: '>=14.6'} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -6971,20 +6640,9 @@ packages: resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} engines: {node: '>=18'} - color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - - color@5.0.3: - resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} - engines: {node: '>=18'} - colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -7062,9 +6720,6 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - content-disposition@0.5.2: resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} engines: {node: '>= 0.6'} @@ -7073,10 +6728,6 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - content-disposition@1.1.0: - resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} - engines: {node: '>=18'} - content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -7087,10 +6738,6 @@ packages: cookie-signature@1.0.7: resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -7324,9 +6971,6 @@ packages: dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - dataloader@2.2.3: - resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} - date-fns-jalali@4.1.0-0: resolution: {integrity: sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==} @@ -7352,15 +6996,6 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -7434,13 +7069,6 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - - denque@2.1.0: - resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} - engines: {node: '>=0.10'} - depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -7539,10 +7167,6 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dotenv@17.3.1: - resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} - engines: {node: '>=12'} - dotenv@17.4.2: resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==} engines: {node: '>=12'} @@ -7663,9 +7287,6 @@ packages: duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - duplexify@4.1.3: - resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} - earcut@3.0.2: resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==} @@ -7708,19 +7329,10 @@ packages: resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} engines: {node: '>=14'} - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - engine.io-parser@5.2.3: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} @@ -7748,17 +7360,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - env-paths@3.0.0: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -7844,10 +7449,6 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - esm@3.2.25: - resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} - engines: {node: '>=6'} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -7905,10 +7506,6 @@ packages: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -7919,14 +7516,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - eventsource-parser@3.0.8: - resolution: {integrity: sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.7: - resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} - engines: {node: '>=18.0.0'} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -7935,28 +7524,14 @@ packages: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - express-rate-limit@8.5.1: - resolution: {integrity: sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ==} - engines: {node: '>= 16'} - peerDependencies: - express: '>= 4.11' - express@4.22.1: resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} - express@5.2.1: - resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} - engines: {node: '>= 18'} - exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -7987,13 +7562,6 @@ packages: fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} - fast-xml-builder@1.2.0: - resolution: {integrity: sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==} - - fast-xml-parser@5.7.3: - resolution: {integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==} - hasBin: true - fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -8013,9 +7581,6 @@ packages: picomatch: optional: true - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - feed@4.2.2: resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} engines: {node: '>=0.4.0'} @@ -8040,9 +7605,6 @@ packages: resolution: {integrity: sha512-ww5Mhre0EE+jmBvOXTmXAbEMuZE7uX4a3+oRCQFNj8w++g3ev913N6tXQz0XTXbueQ5TWQfm6BdaViEHHn8bhA==} engines: {node: '>=22'} - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -8051,10 +7613,6 @@ packages: resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} - finalhandler@2.1.1: - resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} - engines: {node: '>= 18.0.0'} - find-cache-dir@4.0.0: resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} engines: {node: '>=14.16'} @@ -8081,9 +7639,6 @@ packages: flatgeobuf@4.4.0: resolution: {integrity: sha512-uUt1xxywP+q8K73MmyKtapF4++dMCzvoqH+ojBTsCtZBbnQEg5qy0Ujze61Rwmpmt6Ra526jpRFHtEkFun5YVw==} - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - follow-redirects@1.16.0: resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} @@ -8104,10 +7659,6 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@2.5.5: - resolution: {integrity: sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==} - engines: {node: '>= 0.12'} - form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -8148,17 +7699,6 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} - engines: {node: '>=14.14'} - fs-extra@11.3.5: resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} @@ -8171,13 +7711,6 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -8200,30 +7733,14 @@ packages: fuzzysort@3.1.0: resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} - gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - - gaxios@6.7.1: - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} - gaxios@7.1.4: resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==} engines: {node: '>=18'} - gcp-metadata@6.1.1: - resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} - engines: {node: '>=14'} - gcp-metadata@8.1.2: resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} engines: {node: '>=18'} - generate-function@2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -8243,10 +7760,6 @@ packages: resolution: {integrity: sha512-OWcL9S9+yDZ6iAlXMt32T1iwUApJM8UiD47xbm6ZP1h33d10fqkPs14EG/ttT5EnefpZSx3G15iDFC5FxUNUwA==} engines: {node: '>=10.19'} - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.6.0: resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} @@ -8262,10 +7775,6 @@ packages: get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - get-port@5.1.1: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} @@ -8293,12 +7802,6 @@ packages: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} - getopts@2.3.0: - resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} - - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -8326,10 +7829,6 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} @@ -8362,26 +7861,10 @@ packages: resolution: {integrity: sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==} engines: {node: '>=18'} - google-auth-library@9.15.1: - resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} - engines: {node: '>=14'} - - google-logging-utils@0.0.2: - resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} - engines: {node: '>=14'} - google-logging-utils@1.1.3: resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} engines: {node: '>=14'} - googleapis-common@7.2.0: - resolution: {integrity: sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==} - engines: {node: '>=14.0.0'} - - googleapis@137.1.0: - resolution: {integrity: sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==} - engines: {node: '>=14.0.0'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -8400,10 +7883,6 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} - gtoken@7.1.0: - resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} - engines: {node: '>=14.0.0'} - gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -8434,9 +7913,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - has-yarn@3.0.0: resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -8479,10 +7955,6 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.12.18: - resolution: {integrity: sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==} - engines: {node: '>=16.9.0'} - hookable@6.1.1: resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} @@ -8495,9 +7967,6 @@ packages: hsl-to-rgb-for-reals@1.1.1: resolution: {integrity: sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==} - html-entities@2.6.0: - resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -8560,18 +8029,6 @@ packages: http-parser-js@0.5.10: resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} - http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - http-proxy-middleware@2.0.9: resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} engines: {node: '>=12.0.0'} @@ -8605,9 +8062,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - hyperdyperid@1.2.0: resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} @@ -8619,10 +8073,6 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} @@ -8682,17 +8132,10 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - infima@0.2.0-alpha.45: resolution: {integrity: sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==} engines: {node: '>=12'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -8720,17 +8163,9 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - interpret@2.2.0: - resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} - engines: {node: '>= 0.10'} - invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ip-address@10.2.0: - resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} - engines: {node: '>= 12'} - ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -8841,9 +8276,6 @@ packages: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -8896,12 +8328,6 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - - is-property@1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -9045,12 +8471,12 @@ packages: jose@6.2.3: resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} - js-md4@0.3.2: - resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} - js-md5@0.8.3: resolution: {integrity: sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==} + js-tiktoken@1.0.21: + resolution: {integrity: sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==} + js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -9065,10 +8491,6 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsep@1.4.0: - resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} - engines: {node: '>= 10.16.0'} - jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -9088,6 +8510,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-to-ts@3.1.1: + resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} + engines: {node: '>=16'} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -9117,11 +8543,6 @@ packages: jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - jsonpath-plus@10.4.0: - resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} - engines: {node: '>=18.0.0'} - hasBin: true - jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} @@ -9154,44 +8575,36 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - knex@3.2.10: - resolution: {integrity: sha512-oypTHfrc9i72iyxaUQBKHOxhcr0xM65MPf6FpN02nimsftXwzXprIkLjfXdubvhbu4PMWLp023q8o8CYvHSuZw==} - engines: {node: '>=16'} - hasBin: true + kysely@0.28.17: + resolution: {integrity: sha512-nbD8lB9EB3wNdMhOCdx5Li8DxnLbvKByylRLcJ1h+4SkrowVeECAyZlyiKMThF7xFdRz0jSQ2MoJr+wXux2y0Q==} + engines: {node: '>=20.0.0'} + + langchain@1.4.0: + resolution: {integrity: sha512-p3H5U1vfO0T4ri/xxqI6jccRP3LYmOW6KGxaJcwI5mIGVR/G6eNhZyjSZB9d7me6J7an4Pc6zA8tH8Qa6/7xwA==} + engines: {node: '>=20'} + peerDependencies: + '@langchain/core': ^1.1.44 + + langsmith@0.6.3: + resolution: {integrity: sha512-pXrQ4/4myQvjFFOAUmt5pWRrLEZR20gzIJD7MNdUH+5/S5nLI4ZRBo/SYKC6coaYj9pYTfQdBIzcs+3kfJ5uDA==} peerDependencies: - better-sqlite3: '*' - mysql: '*' - mysql2: '*' - pg: '*' - pg-native: '*' - pg-query-stream: ^4.14.0 - sqlite3: '*' - tedious: '*' + '@opentelemetry/api': '*' + '@opentelemetry/exporter-trace-otlp-proto': '*' + '@opentelemetry/sdk-trace-base': '*' + openai: '*' + ws: '>=7' peerDependenciesMeta: - better-sqlite3: - optional: true - mysql: - optional: true - mysql2: - optional: true - pg: + '@opentelemetry/api': optional: true - pg-native: + '@opentelemetry/exporter-trace-otlp-proto': optional: true - pg-query-stream: + '@opentelemetry/sdk-trace-base': optional: true - sqlite3: + openai: optional: true - tedious: + ws: optional: true - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - - kysely@0.28.17: - resolution: {integrity: sha512-nbD8lB9EB3wNdMhOCdx5Li8DxnLbvKByylRLcJ1h+4SkrowVeECAyZlyiKMThF7xFdRz0jSQ2MoJr+wXux2y0Q==} - engines: {node: '>=20.0.0'} - latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -9316,12 +8729,6 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash-es@4.18.1: - resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -9365,10 +8772,6 @@ packages: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -9386,9 +8789,6 @@ packages: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.3.6: resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} engines: {node: 20 || >=22} @@ -9396,14 +8796,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lru.min@1.1.4: - resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} - engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} - lucide-react@1.14.0: resolution: {integrity: sha512-+1mdWcfSJVUsaTIjN9zoezmUhfXo5l0vP7ekBMPo3jcS/aIkxHnXqAPsByszMZx/Y8oQBRJxJx5xg+RH3urzxA==} peerDependencies: @@ -9422,18 +8814,10 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-fetch-happen@9.1.0: - resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} - engines: {node: '>= 10'} - maplibre-gl@5.24.0: resolution: {integrity: sha512-ALyFxgtd5R+65UqZ/++lOqwWcC0SNho9c27fYSyLmG7AfnAul2o46F05aDJGPbFU57wos9dgcIySHs0Xe6ia3A==} engines: {node: '>=16.14.0', npm: '>=8.1.0'} - mariadb@3.4.5: - resolution: {integrity: sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==} - engines: {node: '>= 14'} - markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -9541,10 +8925,6 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - memfs@4.57.2: resolution: {integrity: sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ==} peerDependencies: @@ -9553,10 +8933,6 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -9704,10 +9080,6 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mikro-orm@6.6.14: - resolution: {integrity: sha512-SRVEqIrANwlVwZxJUoSXHgpzGgSpaoOiG7XrnYlh7TYehbJRbxE3xIhJNdNw0t7FIItixFUvLnD6A20bvLnUNw==} - engines: {node: '>= 18.12.0'} - mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} @@ -9737,11 +9109,6 @@ packages: engines: {node: '>=4'} hasBin: true - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -9781,50 +9148,10 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - minipass-fetch@1.4.1: - resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} - engines: {node: '>=8'} - - minipass-flush@1.0.7: - resolution: {integrity: sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -9849,9 +9176,6 @@ packages: ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -9862,15 +9186,9 @@ packages: murmurhash-js@1.0.0: resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} - mysql2@3.20.0: - resolution: {integrity: sha512-eCLUs7BNbgA6nf/MZXsaBO1SfGs0LtLVrJD3WeWq+jPLDWkSufTD+aGMwykfUVPdZnblaUK1a8G/P63cl9FkKg==} - engines: {node: '>= 8.0'} - peerDependencies: - '@types/node': '>= 8' - - named-placeholders@1.1.6: - resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} - engines: {node: '>=8.0.0'} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} @@ -9886,12 +9204,6 @@ packages: resolution: {integrity: sha512-XPUa/jz+P1oJvN9VBxw4L9MtdFfaH3DAryqPssqhb2kXjmb9npz0dly6rCsgFWOPr4Yg9mTfM3MDZgZZ+7A3lA==} engines: {node: ^20.0.0 || >=22.0.0} - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - - native-duplexpair@1.0.0: - resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==} - negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -9900,10 +9212,6 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -9941,9 +9249,6 @@ packages: resolution: {integrity: sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==} engines: {node: '>=10'} - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -9966,19 +9271,9 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp@8.4.1: - resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} - engines: {node: '>= 10.12.0'} - hasBin: true - node-releases@2.0.38: resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} - nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -9994,11 +9289,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} @@ -10060,12 +9350,6 @@ packages: resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -10078,6 +9362,18 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openai@6.37.0: + resolution: {integrity: sha512-0H5dEGFmmLv6KSd0W1w2nyL8WsLkX6yoLeQpU+dZAOuGcany5qkYQMmj35ZrKgb6yiyYqpUzFOpR8mZQkgqeEQ==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -10141,6 +9437,10 @@ packages: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} + p-queue@9.2.0: + resolution: {integrity: sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==} + engines: {node: '>=20'} + p-retry@4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} @@ -10149,10 +9449,18 @@ packages: resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} engines: {node: '>=16.17'} + p-retry@7.1.1: + resolution: {integrity: sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==} + engines: {node: '>=20'} + p-timeout@3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -10215,9 +9523,6 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -10226,14 +9531,6 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-expression-matcher@1.5.0: - resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==} - engines: {node: '>=14.0.0'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} @@ -10257,9 +9554,6 @@ packages: path-to-regexp@3.3.0: resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} - path-to-regexp@8.4.2: - resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -10277,24 +9571,10 @@ packages: peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} - pg-cloudflare@1.3.0: - resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} - - pg-connection-string@2.12.0: - resolution: {integrity: sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==} - - pg-connection-string@2.6.2: - resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} - pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - pg-pool@3.13.0: - resolution: {integrity: sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==} - peerDependencies: - pg: '>=8.0' - pg-protocol@1.13.0: resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} @@ -10302,18 +9582,6 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg@8.20.0: - resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==} - engines: {node: '>= 16.0.0'} - peerDependencies: - pg-native: '>=3.0.1' - peerDependenciesMeta: - pg-native: - optional: true - - pgpass@1.0.5: - resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -10333,10 +9601,6 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pkce-challenge@5.0.1: - resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} - engines: {node: '>=16.20.0'} - pkg-dir@7.0.0: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} @@ -10760,10 +10024,6 @@ packages: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} - postgres-array@3.0.4: - resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} - engines: {node: '>=12'} - postgres-bytea@1.0.1: resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} engines: {node: '>=0.10.0'} @@ -10772,18 +10032,10 @@ packages: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} - postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - postgres-interval@4.0.2: - resolution: {integrity: sha512-EMsphSQ1YkQqKZL2cuG0zHkmjCCzQqQ71l2GXITqRwjhRleCdv00bDk/ktaSi0LnlaPzAc3535KTrjXsTdtx7A==} - engines: {node: '>=12'} - postgres@3.4.9: resolution: {integrity: sha512-GD3qdB0x1z9xgFI6cdRD6xu2Sp2WCOEoe3mtnyB5Ee0XrrL5Pe+e4CCnJrRMnL1zYtRDZmQQVbvOttLnKDLnaw==} engines: {node: '>=12'} @@ -10800,6 +10052,15 @@ packages: rxjs: optional: true + posthog-node@5.33.7: + resolution: {integrity: sha512-jxDLWJ6eMk93cAaZYeTHSGyHAIH2wPPm9EFOnoJb/GfJfjqIZe89NvSDqOYOqclTkImW3M/Js92yZVo1TKpYXA==} + engines: {node: ^20.20.0 || >=22.22.0} + peerDependencies: + rxjs: ^7.0.0 + peerDependenciesMeta: + rxjs: + optional: true + postmark@4.0.7: resolution: {integrity: sha512-DjNniUl1XNCGUKhCR98ePd5gv16rlUAVKKaU9TUqnE3hDSqfT9XDulu1idjagQmdyGscqnRtXk/puAEiYMeevg==} @@ -10809,12 +10070,6 @@ packages: preact@10.29.1: resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==} - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. - hasBin: true - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -10844,10 +10099,6 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -10855,18 +10106,6 @@ packages: proj4@2.20.8: resolution: {integrity: sha512-1C8sfT4xY4PAPwk0MroFBTGF4R4bzDXdmPQTGYVLsoNssrZ9odzObxS2dTeGBty8jW8KO7h16C1Hs2JP+ctfFw==} - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -10884,6 +10123,10 @@ packages: resolution: {integrity: sha512-NGnrxS/nLKUo5nkbVQxlC71sB4hdfImdYIbFeSCidxtwATx0AHRPcANSLd0q5Bb2BkoSWo2iisQhGg5/r+ihbA==} engines: {node: '>=12.0.0'} + protobufjs@7.5.8: + resolution: {integrity: sha512-dvpCIeLPbXZS/Ete7yLaO7RenOdken2NHKykBXbsaGxZT0UTltcarBciw+A78SRQs9iMAAVpsYA+l8b1hTePIA==} + engines: {node: '>=12.0.0'} + protocol-buffers-schema@3.6.1: resolution: {integrity: sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==} @@ -10898,9 +10141,6 @@ packages: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} - pump@3.0.4: - resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} - punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -10986,10 +10226,6 @@ packages: resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} - raw-body@3.0.2: - resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} - engines: {node: '>= 0.10'} - rbush@4.0.1: resolution: {integrity: sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==} @@ -11154,10 +10390,6 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -11174,10 +10406,6 @@ packages: react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - rechoir@0.8.0: - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} - engines: {node: '>= 10.13.0'} - recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -11327,10 +10555,6 @@ packages: renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -11380,14 +10604,6 @@ packages: restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} - retry-request@7.0.2: - resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} - engines: {node: '>=14'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -11396,11 +10612,6 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - robust-predicates@3.0.3: resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} @@ -11441,10 +10652,6 @@ packages: rou3@0.7.12: resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - rtlcss@4.3.0: resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==} engines: {node: '>=12.0.0'} @@ -11543,10 +10750,6 @@ packages: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} - send@1.2.1: - resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} - engines: {node: '>= 18'} - serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -11561,13 +10764,6 @@ packages: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} - serve-static@2.2.1: - resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} - engines: {node: '>= 18'} - - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} @@ -11645,12 +10841,6 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -11682,10 +10872,6 @@ packages: slice-source@0.4.1: resolution: {integrity: sha512-YiuPbxpCj4hD9Qs06hGAz/OZhQ0eDuALN0lRWJez0eD/RevzKqGdUx1IOMUnXgpr+sXZLq3g8ERwbAH0bCb8vg==} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smol-toml@1.6.1: resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} engines: {node: '>= 18'} @@ -11707,14 +10893,6 @@ packages: sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - socks-proxy-agent@6.2.1: - resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} - engines: {node: '>= 10'} - - socks@2.8.9: - resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -11772,42 +10950,13 @@ packages: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - sql-escaper@1.3.3: - resolution: {integrity: sha512-BsTCV265VpTp8tm1wyIm1xqQCS+Q9NHx2Sr+WcnUrgLrQ6yiDIvHYJV5gHxsj1lMBy2zm5twLaZao8Jd+S8JJw==} - engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} - - sqlite3@5.1.7: - resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==} - - sqlstring-sqlite@0.1.1: - resolution: {integrity: sha512-9CAYUJ0lEUPYJrswqiqdINNSfq3jqWo/bFJ7tufdoNeSK0Fy+d1kFTxjqO9PIqza0Kri+ZtYMfPVf1aZaFOvrQ==} - engines: {node: '>= 0.6'} - - sqlstring@2.3.3: - resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} - engines: {node: '>= 0.6'} - srcset@4.0.0: resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} engines: {node: '>=12'} - ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} - - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -11829,12 +10978,6 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - stream-events@1.0.5: - resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} - - stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -11900,9 +11043,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@2.3.0: - resolution: {integrity: sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==} - strtok3@10.3.5: resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} @@ -11913,9 +11053,6 @@ packages: stubborn-utils@1.0.2: resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==} - stubs@3.0.0: - resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} - style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -11998,30 +11135,6 @@ packages: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} - tar-fs@2.1.4: - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - - tarn@3.0.2: - resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} - engines: {node: '>=8.0.0'} - - tedious@19.2.1: - resolution: {integrity: sha512-pk1Q16Yl62iocuQB+RWbg6rFUFkIyzqOFQ6NfysCltRvQqKwfurgj8v/f2X+CKvDhSL4IJ0cCOfCHDg9PWEEYA==} - engines: {node: '>=18.17'} - - teeny-request@9.0.0: - resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} - engines: {node: '>=14'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -12074,9 +11187,6 @@ packages: engines: {node: '>=10'} hasBin: true - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - thingies@2.6.0: resolution: {integrity: sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==} engines: {node: '>=10.18'} @@ -12086,10 +11196,6 @@ packages: thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - tildify@2.0.0: - resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} - engines: {node: '>=8'} - tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -12157,15 +11263,11 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-morph@27.0.2: - resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} + ts-algebra@2.0.0: + resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} @@ -12211,10 +11313,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsqlstring@1.0.1: - resolution: {integrity: sha512-6Nzj/SrVg1SF+egwP4OMAgEa83nLKXIE3EHn+6YKinMUeMj8bGIeLuDCkDC3Cc4OIM+xhw4CD0oXKxal8J/Y6A==} - engines: {node: '>= 8.0'} - tsx@4.21.0: resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} @@ -12224,9 +11322,6 @@ packages: resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} engines: {node: '>= 6.0.0'} - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo@2.9.12: resolution: {integrity: sha512-lCPgus1NuTiBdaITWqzSH/Ff6HVL8HHGBtOXHg1dHRfcshN79XkygSdh0M6g8b0td91ILLG5MTkLOkp5UvyPJw==} hasBin: true @@ -12247,10 +11342,6 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -12322,12 +11413,12 @@ packages: unconfig-core@7.5.0: resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@7.21.0: + resolution: {integrity: sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -12365,12 +11456,6 @@ packages: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} - unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} - - unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} - unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -12436,9 +11521,6 @@ packages: file-loader: optional: true - url-template@2.0.8: - resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} - use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -12478,17 +11560,21 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + hasBin: true + uuid@11.1.1: resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} hasBin: true - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + uuid@13.0.2: + resolution: {integrity: sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==} hasBin: true - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true @@ -12661,6 +11747,47 @@ packages: jsdom: optional: true + vitest@4.1.6: + resolution: {integrity: sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.6 + '@vitest/browser-preview': 4.1.6 + '@vitest/browser-webdriverio': 4.1.6 + '@vitest/coverage-istanbul': 4.1.6 + '@vitest/coverage-v8': 4.1.6 + '@vitest/ui': 4.1.6 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + watchpack@2.5.1: resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} engines: {node: '>=10.13.0'} @@ -12790,9 +11917,6 @@ packages: engines: {node: '>=8'} hasBin: true - wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} @@ -12800,28 +11924,13 @@ packages: wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.19.0: - resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==} - engines: {node: '>= 12.0.0'} - wkt-parser@1.5.5: resolution: {integrity: sha512-/zMYi94/7D7fxcOSlVmWn6vnOMj3Gq5d1xvVjaYOS9n6h0qOJ4I7YYVxBWYcH1vq9+suhqzXkn05Yx47zQNUIA==} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} @@ -12873,10 +11982,6 @@ packages: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true - xml-naming@0.1.0: - resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} - engines: {node: '>=16.0.0'} - xml-utils@1.10.2: resolution: {integrity: sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==} @@ -12895,29 +12000,14 @@ packages: xxhash-wasm@1.1.0: resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.8.4: resolution: {integrity: sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==} engines: {node: '>= 14.6'} hasBin: true - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -12940,11 +12030,6 @@ packages: zarrita@0.7.3: resolution: {integrity: sha512-wChTQ1Ox75INoQCzKAfLWAfB70JJ4KjdW8Sz5x4ZWrFB4Dw+YZdnxHTL0xSdsrB9EmKSeK7fS1Y+I2ibhfGbkw==} - zod-to-json-schema@3.25.2: - resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} - peerDependencies: - zod: ^3.25.28 || ^4 - zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} @@ -12977,13 +12062,6 @@ packages: snapshots: - '@a2a-js/sdk@0.3.13(@grpc/grpc-js@1.14.3)(express@4.22.1)': - dependencies: - uuid: 11.1.1 - optionalDependencies: - '@grpc/grpc-js': 1.14.3 - express: 4.22.1 - '@algolia/abtesting@1.18.1': dependencies: '@algolia/client-common': 5.52.1 @@ -13116,148 +12194,11 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@azure-rest/core-client@2.6.0': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-rest-pipeline': 1.23.0 - '@azure/core-tracing': 1.3.1 - '@typespec/ts-http-runtime': 0.3.5 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/abort-controller@2.1.2': - dependencies: - tslib: 2.8.1 - - '@azure/core-auth@1.10.1': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.13.1 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/core-client@1.10.1': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-rest-pipeline': 1.23.0 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/core-http-compat@2.4.0(@azure/core-client@1.10.1)(@azure/core-rest-pipeline@1.23.0)': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.23.0 - - '@azure/core-lro@2.7.2': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/core-paging@1.6.2': - dependencies: - tslib: 2.8.1 - - '@azure/core-rest-pipeline@1.23.0': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.5 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/core-tracing@1.3.1': - dependencies: - tslib: 2.8.1 - - '@azure/core-util@1.13.1': + '@anthropic-ai/sdk@0.78.0(zod@4.4.3)': dependencies: - '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.5 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/identity@4.13.1': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.23.0 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - '@azure/msal-browser': 5.10.0 - '@azure/msal-node': 5.2.0 - open: 10.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/keyvault-common@2.1.0': - dependencies: - '@azure-rest/core-client': 2.6.0 - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-rest-pipeline': 1.23.0 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/keyvault-keys@4.10.0(@azure/core-client@1.10.1)': - dependencies: - '@azure-rest/core-client': 2.6.0 - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-http-compat': 2.4.0(@azure/core-client@1.10.1)(@azure/core-rest-pipeline@1.23.0) - '@azure/core-lro': 2.7.2 - '@azure/core-paging': 1.6.2 - '@azure/core-rest-pipeline': 1.23.0 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/keyvault-common': 2.1.0 - '@azure/logger': 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@azure/core-client' - - supports-color - - '@azure/logger@1.3.0': - dependencies: - '@typespec/ts-http-runtime': 0.3.5 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/msal-browser@5.10.0': - dependencies: - '@azure/msal-common': 16.6.0 - - '@azure/msal-common@16.6.0': {} - - '@azure/msal-node@5.2.0': - dependencies: - '@azure/msal-common': 16.6.0 - jsonwebtoken: 9.0.3 + json-schema-to-ts: 3.1.1 + optionalDependencies: + zod: 4.4.3 '@babel/code-frame@7.29.0': dependencies: @@ -14071,12 +13012,12 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 - '@better-auth/drizzle-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))': + '@better-auth/drizzle-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))': dependencies: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) '@better-auth/utils': 0.4.0 optionalDependencies: - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7) + drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) '@better-auth/kysely-adapter@1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17)': dependencies: @@ -14149,6 +13090,8 @@ snapshots: '@borewit/text-codec@0.2.2': {} + '@cfworker/json-schema@4.1.1': {} + '@changesets/apply-release-plan@7.1.1': dependencies: '@changesets/config': 3.1.4 @@ -14178,15 +13121,15 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/changelog-github@0.6.0(encoding@0.1.13)': + '@changesets/changelog-github@0.6.0': dependencies: - '@changesets/get-github-info': 0.8.0(encoding@0.1.13) + '@changesets/get-github-info': 0.8.0 '@changesets/types': 6.1.0 dotenv: 8.6.0 transitivePeerDependencies: - encoding - '@changesets/cli@2.31.0(@types/node@25.6.2)': + '@changesets/cli@2.31.0(@types/node@25.7.0)': dependencies: '@changesets/apply-release-plan': 7.1.1 '@changesets/assemble-release-plan': 6.0.10 @@ -14202,7 +13145,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@25.6.2) + '@inquirer/external-editor': 1.0.3(@types/node@25.7.0) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 enquirer: 2.4.1 @@ -14239,10 +13182,10 @@ snapshots: picocolors: 1.1.1 semver: 7.8.0 - '@changesets/get-github-info@0.8.0(encoding@0.1.13)': + '@changesets/get-github-info@0.8.0': dependencies: dataloader: 1.4.0 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.7.0 transitivePeerDependencies: - encoding @@ -14310,8 +13253,6 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@colors/colors@1.6.0': {} - '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) @@ -14621,12 +13562,6 @@ snapshots: dependencies: postcss: 8.5.14 - '@dabh/diagnostics@2.0.8': - dependencies: - '@so-ric/colorspace': 1.1.6 - enabled: 2.0.0 - kuler: 2.0.0 - '@date-fns/tz@1.4.1': {} '@discoveryjs/json-ext@0.5.7': {} @@ -15963,9 +14898,6 @@ snapshots: '@floating-ui/utils@0.2.11': {} - '@gar/promisify@1.1.3': - optional: true - '@geomatico/maplibre-cog-protocol@https://codeload.github.com/SvenVw/maplibre-cog-protocol/tar.gz/fd6765830cd1453c3d20d290d6c40684153c5b7d(maplibre-gl@5.24.0)': dependencies: '@mapbox/sphericalmercator': 1.2.0 @@ -15983,163 +14915,33 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 - '@google-cloud/opentelemetry-cloud-monitoring-exporter@0.21.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + '@google/genai@1.52.0': dependencies: - '@google-cloud/opentelemetry-resource-util': 3.0.0(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@google-cloud/precise-date': 4.0.0 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.7.1(@opentelemetry/api@1.9.0) - google-auth-library: 9.15.1(encoding@0.1.13) - googleapis: 137.1.0(encoding@0.1.13) + google-auth-library: 10.6.2 + p-retry: 4.6.2 + protobufjs: 7.5.8 + ws: 8.20.0 transitivePeerDependencies: - - encoding + - bufferutil - supports-color + - utf-8-validate - '@google-cloud/opentelemetry-cloud-trace-exporter@3.0.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)': - dependencies: - '@google-cloud/opentelemetry-resource-util': 3.0.0(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@grpc/grpc-js': 1.14.3 - '@grpc/proto-loader': 0.8.1 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.0) - google-auth-library: 9.15.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color + '@google/generative-ai@0.24.1': {} + + '@hapi/hoek@9.3.0': {} - '@google-cloud/opentelemetry-resource-util@3.0.0(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + '@hapi/topo@5.1.0': dependencies: - '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - gcp-metadata: 6.1.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color + '@hapi/hoek': 9.3.0 - '@google-cloud/paginator@5.0.2': + '@hookform/resolvers@5.2.2(react-hook-form@7.75.0(react@19.2.6))': dependencies: - arrify: 2.0.1 - extend: 3.0.2 + '@standard-schema/utils': 0.3.0 + react-hook-form: 7.75.0(react@19.2.6) - '@google-cloud/precise-date@4.0.0': {} - - '@google-cloud/projectify@4.0.0': {} - - '@google-cloud/promisify@4.0.0': {} - - '@google-cloud/storage@7.19.0(encoding@0.1.13)': - dependencies: - '@google-cloud/paginator': 5.0.2 - '@google-cloud/projectify': 4.0.0 - '@google-cloud/promisify': 4.0.0 - abort-controller: 3.0.0 - async-retry: 1.3.3 - duplexify: 4.1.3 - fast-xml-parser: 5.7.3 - gaxios: 6.7.1(encoding@0.1.13) - google-auth-library: 9.15.1(encoding@0.1.13) - html-entities: 2.6.0 - mime: 3.0.0 - p-limit: 3.1.0 - retry-request: 7.0.2(encoding@0.1.13) - teeny-request: 9.0.0(encoding@0.1.13) - uuid: 8.3.2 - transitivePeerDependencies: - - encoding - - supports-color - - '@google/adk@1.1.0(@grpc/grpc-js@1.14.3)(@mikro-orm/mariadb@6.6.14(@mikro-orm/core@6.6.14)(pg@8.20.0))(@mikro-orm/mssql@6.6.14(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.14(@mikro-orm/core@6.6.14)(@types/node@25.6.2)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)': - dependencies: - '@a2a-js/sdk': 0.3.13(@grpc/grpc-js@1.14.3)(express@4.22.1) - '@google-cloud/opentelemetry-cloud-monitoring-exporter': 0.21.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@google-cloud/opentelemetry-cloud-trace-exporter': 3.0.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@google-cloud/storage': 7.19.0(encoding@0.1.13) - '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) - '@mikro-orm/core': 6.6.14 - '@mikro-orm/mariadb': 6.6.14(@mikro-orm/core@6.6.14)(pg@8.20.0) - '@mikro-orm/mssql': 6.6.14(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0) - '@mikro-orm/mysql': 6.6.14(@mikro-orm/core@6.6.14)(@types/node@25.6.2)(mariadb@3.4.5)(pg@8.20.0) - '@mikro-orm/postgresql': 6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5) - '@mikro-orm/reflection': 6.6.14(@mikro-orm/core@6.6.14) - '@mikro-orm/sqlite': 6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0) - '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.205.0 - '@opentelemetry/exporter-logs-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-gcp': 0.40.3(@opentelemetry/api@1.9.0)(encoding@0.1.13) - '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.7.1(@opentelemetry/api@1.9.0) - express: 4.22.1 - google-auth-library: 10.6.2 - js-yaml: 4.1.1 - jsonpath-plus: 10.4.0 - lodash-es: 4.18.1 - winston: 3.19.0 - zod: 4.4.3 - zod-to-json-schema: 3.25.2(zod@4.4.3) - transitivePeerDependencies: - - '@bufbuild/protobuf' - - '@cfworker/json-schema' - - '@grpc/grpc-js' - - '@opentelemetry/core' - - bufferutil - - encoding - - supports-color - - utf-8-validate - - '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))': - dependencies: - google-auth-library: 10.6.2 - p-retry: 4.6.2 - protobufjs: 7.5.7 - ws: 8.20.0 - optionalDependencies: - '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@grpc/grpc-js@1.14.3': - dependencies: - '@grpc/proto-loader': 0.8.1 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.8.1': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.5.7 - yargs: 17.7.2 - - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - - '@hono/node-server@1.19.14(hono@4.12.18)': - dependencies: - hono: 4.12.18 - - '@hookform/resolvers@5.2.2(react-hook-form@7.75.0(react@19.2.6))': - dependencies: - '@standard-schema/utils': 0.3.0 - react-hook-form: 7.75.0(react@19.2.6) - - '@icons-pack/react-simple-icons@13.13.0(react@19.2.6)': - dependencies: - react: 19.2.6 + '@icons-pack/react-simple-icons@13.13.0(react@19.2.6)': + dependencies: + react: 19.2.6 '@img/colour@1.1.0': optional: true @@ -16238,12 +15040,12 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inquirer/external-editor@1.0.3(@types/node@25.6.2)': + '@inquirer/external-editor@1.0.3(@types/node@25.7.0)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@jest/schemas@29.6.3': dependencies: @@ -16254,7 +15056,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -16282,18 +15084,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@js-joda/core@5.7.0': {} - - '@js-sdsl/ordered-map@4.4.2': {} - - '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: tslib: 2.8.1 @@ -16421,6 +15211,72 @@ snapshots: '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) tslib: 2.8.1 + '@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0)': + dependencies: + '@cfworker/json-schema': 4.1.1 + '@standard-schema/spec': 1.1.0 + js-tiktoken: 1.0.21 + langsmith: 0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + mustache: 4.2.0 + p-queue: 6.6.2 + zod: 4.4.3 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - ws + + '@langchain/google-genai@2.1.30(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0))': + dependencies: + '@google/generative-ai': 0.24.1 + '@langchain/core': 1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + + '@langchain/langgraph-checkpoint@1.0.2(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0))': + dependencies: + '@langchain/core': 1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + uuid: 10.0.0 + + '@langchain/langgraph-sdk@1.9.2(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0)': + dependencies: + '@langchain/core': 1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + '@langchain/protocol': 0.0.15 + '@types/json-schema': 7.0.15 + p-queue: 9.2.0 + p-retry: 7.1.1 + uuid: 13.0.2 + optionalDependencies: + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - ws + + '@langchain/langgraph@1.3.0(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0)(zod@4.4.3)': + dependencies: + '@langchain/core': 1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + '@langchain/langgraph-checkpoint': 1.0.2(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0)) + '@langchain/langgraph-sdk': 1.9.2(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0) + '@langchain/protocol': 0.0.15 + '@standard-schema/spec': 1.1.0 + uuid: 10.0.0 + zod: 4.4.3 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - react + - react-dom + - svelte + - vue + - ws + + '@langchain/protocol@0.0.15': {} + '@leichtgewicht/ip-codec@2.0.5': {} '@lucide/lab@0.1.2': {} @@ -16558,194 +15414,8 @@ snapshots: '@types/react': 19.2.14 react: 19.2.6 - '@mikro-orm/core@6.6.14': - dependencies: - dataloader: 2.2.3 - dotenv: 17.3.1 - esprima: 4.0.1 - fs-extra: 11.3.3 - globby: 11.1.0 - mikro-orm: 6.6.14 - reflect-metadata: 0.2.2 - - '@mikro-orm/knex@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.14 - fs-extra: 11.3.3 - knex: 3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7) - sqlstring: 2.3.3 - optionalDependencies: - mariadb: 3.4.5 - transitivePeerDependencies: - - mysql - - mysql2 - - pg - - pg-native - - pg-query-stream - - sqlite3 - - supports-color - - tedious - - '@mikro-orm/knex@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0)(sqlite3@5.1.7)': - dependencies: - '@mikro-orm/core': 6.6.14 - fs-extra: 11.3.3 - knex: 3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7) - sqlstring: 2.3.3 - optionalDependencies: - mariadb: 3.4.5 - transitivePeerDependencies: - - mysql - - mysql2 - - pg - - pg-native - - pg-query-stream - - sqlite3 - - supports-color - - tedious - - '@mikro-orm/knex@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0)(tedious@19.2.1(@azure/core-client@1.10.1))': - dependencies: - '@mikro-orm/core': 6.6.14 - fs-extra: 11.3.3 - knex: 3.2.10(pg@8.20.0)(tedious@19.2.1(@azure/core-client@1.10.1)) - sqlstring: 2.3.3 - optionalDependencies: - mariadb: 3.4.5 - transitivePeerDependencies: - - mysql - - mysql2 - - pg - - pg-native - - pg-query-stream - - sqlite3 - - supports-color - - tedious - - '@mikro-orm/mariadb@6.6.14(@mikro-orm/core@6.6.14)(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.14 - '@mikro-orm/knex': 6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0) - mariadb: 3.4.5 - transitivePeerDependencies: - - better-sqlite3 - - libsql - - mysql - - mysql2 - - pg - - pg-native - - pg-query-stream - - sqlite3 - - supports-color - - tedious - - '@mikro-orm/mssql@6.6.14(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.14 - '@mikro-orm/knex': 6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0)(tedious@19.2.1(@azure/core-client@1.10.1)) - tedious: 19.2.1(@azure/core-client@1.10.1) - tsqlstring: 1.0.1 - transitivePeerDependencies: - - '@azure/core-client' - - better-sqlite3 - - libsql - - mariadb - - mysql - - mysql2 - - pg - - pg-native - - pg-query-stream - - sqlite3 - - supports-color - - '@mikro-orm/mysql@6.6.14(@mikro-orm/core@6.6.14)(@types/node@25.6.2)(mariadb@3.4.5)(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.14 - '@mikro-orm/knex': 6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0) - mysql2: 3.20.0(@types/node@25.6.2) - transitivePeerDependencies: - - '@types/node' - - better-sqlite3 - - libsql - - mariadb - - mysql - - pg - - pg-native - - pg-query-stream - - sqlite3 - - supports-color - - tedious - - '@mikro-orm/postgresql@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)': - dependencies: - '@mikro-orm/core': 6.6.14 - '@mikro-orm/knex': 6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0) - pg: 8.20.0 - postgres-array: 3.0.4 - postgres-date: 2.1.0 - postgres-interval: 4.0.2 - transitivePeerDependencies: - - better-sqlite3 - - libsql - - mariadb - - mysql - - mysql2 - - pg-native - - pg-query-stream - - sqlite3 - - supports-color - - tedious - - '@mikro-orm/reflection@6.6.14(@mikro-orm/core@6.6.14)': - dependencies: - '@mikro-orm/core': 6.6.14 - globby: 11.1.0 - ts-morph: 27.0.2 - - '@mikro-orm/sqlite@6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.14 - '@mikro-orm/knex': 6.6.14(@mikro-orm/core@6.6.14)(mariadb@3.4.5)(pg@8.20.0)(sqlite3@5.1.7) - fs-extra: 11.3.3 - sqlite3: 5.1.7 - sqlstring-sqlite: 0.1.1 - transitivePeerDependencies: - - better-sqlite3 - - bluebird - - libsql - - mariadb - - mysql - - mysql2 - - pg - - pg-native - - pg-query-stream - - supports-color - - tedious - '@mjackson/node-fetch-server@0.2.0': {} - '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': - dependencies: - '@hono/node-server': 1.19.14(hono@4.12.18) - ajv: 8.20.0 - ajv-formats: 3.0.1(ajv@8.20.0) - content-type: 1.0.5 - cors: 2.8.6 - cross-spawn: 7.0.6 - eventsource: 3.0.7 - eventsource-parser: 3.0.8 - express: 5.2.1 - express-rate-limit: 8.5.1(express@5.2.1) - hono: 4.12.18 - jose: 6.2.3 - json-schema-typed: 8.0.2 - pkce-challenge: 5.0.1 - raw-body: 3.0.2 - zod: 4.4.3 - zod-to-json-schema: 3.25.2(zod@4.4.3) - transitivePeerDependencies: - - supports-color - '@module-federation/error-codes@0.22.0': {} '@module-federation/runtime-core@0.22.0': @@ -16831,8 +15501,6 @@ snapshots: '@noble/hashes@2.2.0': {} - '@nodable/entities@2.1.0': {} - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -16845,22 +15513,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@npmcli/fs@1.1.1': - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.8.0 - optional: true - - '@npmcli/move-file@1.1.2': - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - optional: true - - '@opentelemetry/api-logs@0.205.0': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs@0.207.0': dependencies: '@opentelemetry/api': 1.9.1 @@ -16877,25 +15529,8 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/api@1.9.0': {} - '@opentelemetry/api@1.9.1': {} - '@opentelemetry/context-async-hooks@2.7.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.40.0 - - '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/semantic-conventions': 1.40.0 - optional: true - '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -16906,25 +15541,11 @@ snapshots: '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/exporter-logs-otlp-http@0.205.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.205.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http@0.208.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -16934,34 +15555,6 @@ snapshots: '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-metrics-otlp-http@0.205.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.1) - '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.1) - optional: true - '@opentelemetry/instrumentation-amqplib@0.61.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -17144,48 +15737,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/otlp-exporter-base@0.205.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/otlp-exporter-base@0.205.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.1) - optional: true - '@opentelemetry/otlp-exporter-base@0.208.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.1) - '@opentelemetry/otlp-transformer@0.205.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.205.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - protobufjs: 7.5.7 - - '@opentelemetry/otlp-transformer@0.205.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/api-logs': 0.205.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.1) - protobufjs: 7.5.7 - optional: true - '@opentelemetry/otlp-transformer@0.208.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -17197,62 +15754,18 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.1) protobufjs: 7.5.7 - '@opentelemetry/resource-detector-gcp@0.40.3(@opentelemetry/api@1.9.0)(encoding@0.1.13)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) - gcp-metadata: 6.1.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - - '@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.40.0 - optional: true - '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/resources@2.7.1(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/sdk-logs@0.205.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.205.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-logs@0.205.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/api-logs': 0.205.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.1) - optional: true - '@opentelemetry/sdk-logs@0.208.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -17260,46 +15773,12 @@ snapshots: '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-metrics@2.1.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-metrics@2.1.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.1) - optional: true - '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-metrics@2.7.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - - '@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.1)': - dependencies: - '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.40.0 - optional: true - '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -17307,13 +15786,6 @@ snapshots: '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -17321,13 +15793,6 @@ snapshots: '@opentelemetry/resources': 2.7.1(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/sdk-trace-node@2.7.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions@1.40.0': {} '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.1)': @@ -17449,12 +15914,45 @@ snapshots: '@polka/url@1.0.0-next.29': {} + '@posthog/ai@7.18.4(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(posthog-node@5.33.7)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0)': + dependencies: + '@anthropic-ai/sdk': 0.78.0(zod@4.4.3) + '@google/genai': 1.52.0 + '@langchain/core': 1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + '@posthog/core': 1.28.7 + langchain: 1.4.0(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0) + openai: 6.37.0(ws@8.20.0)(zod@4.4.3) + posthog-node: 5.33.7 + uuid: 11.1.1 + zod: 4.4.3 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - '@opentelemetry/exporter-trace-otlp-proto' + - bufferutil + - react + - react-dom + - supports-color + - svelte + - utf-8-validate + - vue + - ws + - zod-to-json-schema + '@posthog/core@1.28.4': dependencies: '@posthog/types': 1.372.10 + '@posthog/core@1.28.7': + dependencies: + '@posthog/types': 1.373.2 + '@posthog/types@1.372.10': {} + '@posthog/types@1.373.2': {} + '@prisma/instrumentation@7.6.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -18377,7 +16875,7 @@ snapshots: '@react-pdf/primitives': 4.3.0 '@react-pdf/stylesheet': 6.2.1 - '@react-router/dev@7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)': + '@react-router/dev@7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -18407,8 +16905,8 @@ snapshots: semver: 7.8.0 tinyglobby: 0.2.16 valibot: 1.4.0(typescript@6.0.3) - vite: 8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) - vite-node: 3.2.4(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + vite: 8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + vite-node: 3.2.4(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) optionalDependencies: '@react-router/serve': 7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3) typescript: 6.0.3 @@ -18435,9 +16933,9 @@ snapshots: optionalDependencies: typescript: 6.0.3 - '@react-router/fs-routes@7.15.0(@react-router/dev@7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4))(typescript@6.0.3)': + '@react-router/fs-routes@7.15.0(@react-router/dev@7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4))(typescript@6.0.3)': dependencies: - '@react-router/dev': 7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4) + '@react-router/dev': 7.15.0(@react-router/serve@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(terser@5.47.1)(tsx@4.21.0)(typescript@6.0.3)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4) minimatch: 9.0.9 optionalDependencies: typescript: 6.0.3 @@ -18776,11 +17274,11 @@ snapshots: '@sentry-internal/replay-canvas': 10.52.0 '@sentry/core': 10.52.0 - '@sentry/bundler-plugin-core@5.2.1(encoding@0.1.13)': + '@sentry/bundler-plugin-core@5.2.1': dependencies: '@babel/core': 7.29.0 '@sentry/babel-plugin-component-annotate': 5.2.1 - '@sentry/cli': 2.58.5(encoding@0.1.13) + '@sentry/cli': 2.58.5 dotenv: 16.6.1 find-up: 5.0.0 glob: 13.0.6 @@ -18813,10 +17311,10 @@ snapshots: '@sentry/cli-win32-x64@2.58.5': optional: true - '@sentry/cli@2.58.5(encoding@0.1.13)': + '@sentry/cli@2.58.5': dependencies: https-proxy-agent: 5.0.1 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.7.0 progress: 2.0.3 proxy-from-env: 1.1.0 which: 2.0.2 @@ -18835,7 +17333,7 @@ snapshots: '@sentry/core@10.52.0': {} - '@sentry/node-core@10.52.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)': + '@sentry/node-core@10.52.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)': dependencies: '@sentry/core': 10.52.0 '@sentry/opentelemetry': 10.52.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) @@ -18843,12 +17341,11 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-trace-otlp-http': 0.205.0(@opentelemetry/api@1.9.1) '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@sentry/node@10.52.0(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))': + '@sentry/node@10.52.0': dependencies: '@fastify/otel': 0.18.0(@opentelemetry/api@1.9.1) '@opentelemetry/api': 1.9.1 @@ -18876,7 +17373,7 @@ snapshots: '@opentelemetry/semantic-conventions': 1.40.0 '@prisma/instrumentation': 7.6.0(@opentelemetry/api@1.9.1) '@sentry/core': 10.52.0 - '@sentry/node-core': 10.52.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) + '@sentry/node-core': 10.52.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) '@sentry/opentelemetry': 10.52.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0) import-in-the-middle: 3.0.1 transitivePeerDependencies: @@ -18891,16 +17388,16 @@ snapshots: '@opentelemetry/semantic-conventions': 1.40.0 '@sentry/core': 10.52.0 - '@sentry/profiling-node@10.52.0(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))': + '@sentry/profiling-node@10.52.0': dependencies: '@sentry-internal/node-cpu-profiler': 2.4.0 '@sentry/core': 10.52.0 - '@sentry/node': 10.52.0(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1)) + '@sentry/node': 10.52.0 transitivePeerDependencies: - '@opentelemetry/exporter-trace-otlp-http' - supports-color - '@sentry/react-router@10.52.0(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))(@react-router/node@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(encoding@0.1.13)(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(rollup@4.60.3)': + '@sentry/react-router@10.52.0(@react-router/node@7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3))(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6)(rollup@4.60.3)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) @@ -18908,11 +17405,11 @@ snapshots: '@opentelemetry/semantic-conventions': 1.40.0 '@react-router/node': 7.15.0(react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.3) '@sentry/browser': 10.52.0 - '@sentry/cli': 2.58.5(encoding@0.1.13) + '@sentry/cli': 2.58.5 '@sentry/core': 10.52.0 - '@sentry/node': 10.52.0(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1)) + '@sentry/node': 10.52.0 '@sentry/react': 10.52.0(react@19.2.6) - '@sentry/vite-plugin': 5.2.1(encoding@0.1.13)(rollup@4.60.3) + '@sentry/vite-plugin': 5.2.1(rollup@4.60.3) glob: 13.0.6 react: 19.2.6 react-router: 7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -18928,9 +17425,9 @@ snapshots: '@sentry/core': 10.52.0 react: 19.2.6 - '@sentry/rollup-plugin@5.2.1(encoding@0.1.13)(rollup@4.60.3)': + '@sentry/rollup-plugin@5.2.1(rollup@4.60.3)': dependencies: - '@sentry/bundler-plugin-core': 5.2.1(encoding@0.1.13) + '@sentry/bundler-plugin-core': 5.2.1 magic-string: 0.30.21 optionalDependencies: rollup: 4.60.3 @@ -18938,10 +17435,10 @@ snapshots: - encoding - supports-color - '@sentry/vite-plugin@5.2.1(encoding@0.1.13)(rollup@4.60.3)': + '@sentry/vite-plugin@5.2.1(rollup@4.60.3)': dependencies: - '@sentry/bundler-plugin-core': 5.2.1(encoding@0.1.13) - '@sentry/rollup-plugin': 5.2.1(encoding@0.1.13)(rollup@4.60.3) + '@sentry/bundler-plugin-core': 5.2.1 + '@sentry/rollup-plugin': 5.2.1(rollup@4.60.3) transitivePeerDependencies: - encoding - rollup @@ -18999,11 +17496,6 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 - '@so-ric/colorspace@1.1.6': - dependencies: - color: 5.0.3 - text-hex: 1.0.0 - '@socket.io/component-emitter@3.1.2': {} '@standard-schema/spec@1.1.0': {} @@ -19300,12 +17792,12 @@ snapshots: postcss: 8.5.14 tailwindcss: 4.3.0 - '@tailwindcss/vite@4.3.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))': + '@tailwindcss/vite@4.3.0(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@tailwindcss/node': 4.3.0 '@tailwindcss/oxide': 4.3.0 tailwindcss: 4.3.0 - vite: 8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + vite: 8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) '@tanstack/react-table@8.21.3(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: @@ -19324,17 +17816,6 @@ snapshots: '@tokenizer/token@0.3.0': {} - '@tootallnate/once@1.1.2': - optional: true - - '@tootallnate/once@2.0.1': {} - - '@ts-morph/common@0.28.1': - dependencies: - minimatch: 10.2.5 - path-browserify: 1.0.1 - tinyglobby: 0.2.16 - '@turbo/darwin-64@2.9.12': optional: true @@ -19468,13 +17949,11 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/bonjour@3.5.13': dependencies: - '@types/node': 25.6.2 - - '@types/caseless@0.12.5': {} + '@types/node': 25.7.0 '@types/chai@5.2.3': dependencies: @@ -19484,15 +17963,15 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.8 - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/connect@3.4.38': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/cors@2.8.19': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/d3-array@3.2.2': {} @@ -19544,7 +18023,7 @@ snapshots: '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -19574,7 +18053,7 @@ snapshots: '@types/http-proxy@1.17.17': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/istanbul-lib-coverage@2.0.6': {} @@ -19618,27 +18097,27 @@ snapshots: '@types/mysql@2.15.27': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/node@12.20.55': {} '@types/node@17.0.45': {} - '@types/node@24.12.3': - dependencies: - undici-types: 7.16.0 - '@types/node@25.6.2': dependencies: undici-types: 7.19.2 + '@types/node@25.7.0': + dependencies: + undici-types: 7.21.0 + '@types/pg-pool@2.0.7': dependencies: '@types/pg': 8.15.6 '@types/pg@8.15.6': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 pg-protocol: 1.13.0 pg-types: 2.2.0 @@ -19683,17 +18162,6 @@ snapshots: dependencies: csstype: 3.2.3 - '@types/readable-stream@4.0.23': - dependencies: - '@types/node': 25.6.2 - - '@types/request@2.48.13': - dependencies: - '@types/caseless': 0.12.5 - '@types/node': 25.6.2 - '@types/tough-cookie': 4.0.5 - form-data: 2.5.5 - '@types/retry@0.12.0': {} '@types/retry@0.12.2': {} @@ -19705,11 +18173,11 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/send@1.2.1': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/serve-index@1.9.4': dependencies: @@ -19718,12 +18186,12 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/send': 0.17.6 '@types/sockjs@0.3.36': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/supercluster@7.1.3': dependencies: @@ -19731,11 +18199,7 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 25.6.2 - - '@types/tough-cookie@4.0.5': {} - - '@types/triple-beam@1.3.5': {} + '@types/node': 25.7.0 '@types/trusted-types@2.0.7': optional: true @@ -19754,7 +18218,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/yargs-parser@21.0.3': {} @@ -19762,14 +18226,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typespec/ts-http-runtime@0.3.5': - dependencies: - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - '@ungap/structured-clone@1.3.1': {} '@vis.gl/react-mapbox@8.1.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': @@ -19785,10 +18241,10 @@ snapshots: optionalDependencies: maplibre-gl: 5.24.0 - '@vitest/coverage-v8@4.1.5(vitest@4.1.5)': + '@vitest/coverage-v8@4.1.6(vitest@4.1.5)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.5 + '@vitest/utils': 4.1.6 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -19797,7 +18253,21 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + + '@vitest/coverage-v8@4.1.6(vitest@4.1.6)': + dependencies: + '@bcoe/v8-coverage': 1.0.2 + '@vitest/utils': 4.1.6 + ast-v8-to-istanbul: 1.0.0 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.2 + obug: 2.1.1 + std-env: 4.1.0 + tinyrainbow: 3.1.0 + vitest: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.7.0)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) '@vitest/expect@4.1.5': dependencies: @@ -19808,6 +18278,15 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 + '@vitest/expect@4.1.6': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.6 + '@vitest/utils': 4.1.6 + chai: 6.2.2 + tinyrainbow: 3.1.0 + '@vitest/mocker@4.1.5(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@vitest/spy': 4.1.5 @@ -19816,15 +18295,32 @@ snapshots: optionalDependencies: vite: 8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + '@vitest/mocker@4.1.6(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4))': + dependencies: + '@vitest/spy': 4.1.6 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + '@vitest/pretty-format@4.1.5': dependencies: tinyrainbow: 3.1.0 + '@vitest/pretty-format@4.1.6': + dependencies: + tinyrainbow: 3.1.0 + '@vitest/runner@4.1.5': dependencies: '@vitest/utils': 4.1.5 pathe: 2.0.3 + '@vitest/runner@4.1.6': + dependencies: + '@vitest/utils': 4.1.6 + pathe: 2.0.3 + '@vitest/snapshot@4.1.5': dependencies: '@vitest/pretty-format': 4.1.5 @@ -19832,14 +18328,29 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 + '@vitest/snapshot@4.1.6': + dependencies: + '@vitest/pretty-format': 4.1.6 + '@vitest/utils': 4.1.6 + magic-string: 0.30.21 + pathe: 2.0.3 + '@vitest/spy@4.1.5': {} + '@vitest/spy@4.1.6': {} + '@vitest/utils@4.1.5': dependencies: '@vitest/pretty-format': 4.1.5 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + '@vitest/utils@4.1.6': + dependencies: + '@vitest/pretty-format': 4.1.6 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -19926,13 +18437,6 @@ snapshots: unzipit: 2.0.0 optional: true - abbrev@1.1.1: - optional: true - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - abs-svg-path@0.1.1: {} accepts@1.3.8: @@ -19940,11 +18444,6 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - accepts@2.0.0: - dependencies: - mime-types: 3.0.2 - negotiator: 1.0.0 - acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -19973,11 +18472,6 @@ snapshots: agent-base@7.1.4: {} - agentkeepalive@4.6.0: - dependencies: - humanize-ms: 1.2.1 - optional: true - aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -20063,15 +18557,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 - aproba@2.1.0: - optional: true - - are-we-there-yet@3.0.1: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - optional: true - arg@5.0.2: {} argparse@1.0.10: @@ -20105,8 +18590,6 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - arrify@2.0.1: {} - asn1js@3.0.10: dependencies: pvtsutils: 1.3.6 @@ -20133,12 +18616,6 @@ snapshots: async-function@1.0.0: {} - async-retry@1.3.3: - dependencies: - retry: 0.13.1 - - async@3.2.6: {} - asynckit@0.4.0: {} atomically@2.1.1: @@ -20159,8 +18636,6 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - aws-ssl-profiles@1.1.2: {} - axios@1.16.0: dependencies: follow-redirects: 1.16.0 @@ -20241,10 +18716,40 @@ snapshots: batch@0.6.1: {} - better-auth@1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.2))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(pg@8.20.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5): + better-auth@1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.6): + dependencies: + '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) + '@better-auth/drizzle-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9)) + '@better-auth/kysely-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17) + '@better-auth/memory-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/mongo-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/prisma-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) + '@better-auth/telemetry': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21) + '@better-auth/utils': 0.4.0 + '@better-fetch/fetch': 1.1.21 + '@noble/ciphers': 2.2.0 + '@noble/hashes': 2.2.0 + better-call: 1.3.5(zod@4.4.3) + defu: 6.1.7 + jose: 6.2.3 + kysely: 0.28.17 + nanostores: 1.3.0 + zod: 4.4.3 + optionalDependencies: + drizzle-kit: 0.31.10 + drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) + next: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + vitest: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.7.0)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@opentelemetry/api' + + better-auth@1.6.10(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(vitest@4.1.5): dependencies: '@better-auth/core': 1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0) - '@better-auth/drizzle-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7)) + '@better-auth/drizzle-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9)) '@better-auth/kysely-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(kysely@0.28.17) '@better-auth/memory-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) '@better-auth/mongo-adapter': 1.6.10(@better-auth/core@1.6.10(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.4.3))(jose@6.2.3)(kysely@0.28.17)(nanostores@1.3.0))(@better-auth/utils@0.4.0) @@ -20262,13 +18767,11 @@ snapshots: zod: 4.4.3 optionalDependencies: drizzle-kit: 0.31.10 - drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7) - mysql2: 3.20.0(@types/node@25.6.2) + drizzle-orm: 0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9) next: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - pg: 8.20.0 react: 19.2.6 react-dom: 19.2.6(react@19.2.6) - vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) transitivePeerDependencies: - '@cloudflare/workers-types' - '@opentelemetry/api' @@ -20296,25 +18799,8 @@ snapshots: binary-extensions@2.3.0: {} - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - birpc@4.0.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - bl@6.1.6: - dependencies: - '@types/readable-stream': 4.0.23 - buffer: 6.0.3 - inherits: 2.0.4 - readable-stream: 4.7.0 - body-parser@1.20.5: dependencies: bytes: 3.1.2 @@ -20332,20 +18818,6 @@ snapshots: transitivePeerDependencies: - supports-color - body-parser@2.2.2: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.3 - http-errors: 2.0.1 - iconv-lite: 0.7.2 - on-finished: 2.4.1 - qs: 6.15.1 - raw-body: 3.0.2 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - bonjour-service@1.3.0: dependencies: fast-deep-equal: 3.1.3 @@ -20412,16 +18884,6 @@ snapshots: buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 @@ -20447,30 +18909,6 @@ snapshots: cac@7.0.0: {} - cacache@15.3.0: - dependencies: - '@npmcli/fs': 1.1.1 - '@npmcli/move-file': 1.1.2 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 7.2.3 - infer-owner: 1.0.4 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.7 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 8.0.1 - tar: 6.2.1 - unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird - optional: true - cacheable-lookup@7.0.0: {} cacheable-request@10.2.14: @@ -20578,10 +19016,6 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: {} - - chownr@2.0.0: {} - chrome-trace-event@1.0.4: {} chrono-node@2.9.1: {} @@ -20612,12 +19046,6 @@ snapshots: client-only@0.0.1: {} - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 @@ -20640,18 +19068,12 @@ snapshots: - '@types/react' - '@types/react-dom' - code-block-writer@13.0.3: {} - collapse-white-space@2.1.0: {} color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-convert@3.1.3: - dependencies: - color-name: 2.1.0 - color-name@1.1.4: {} color-name@2.1.0: {} @@ -20660,18 +19082,8 @@ snapshots: dependencies: color-name: 2.1.0 - color-support@1.1.3: - optional: true - - color@5.0.3: - dependencies: - color-convert: 3.1.3 - color-string: 2.1.4 - colord@2.9.3: {} - colorette@2.0.19: {} - colorette@2.0.20: {} combine-promises@1.2.0: {} @@ -20747,25 +19159,18 @@ snapshots: consola@3.4.2: {} - console-control-strings@1.1.0: - optional: true - content-disposition@0.5.2: {} content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - content-disposition@1.1.0: {} - content-type@1.0.5: {} convert-source-map@2.0.0: {} cookie-signature@1.0.7: {} - cookie-signature@1.2.2: {} - cookie@0.7.2: {} cookie@1.1.1: {} @@ -21018,8 +19423,6 @@ snapshots: dataloader@1.4.0: {} - dataloader@2.2.3: {} - date-fns-jalali@4.1.0-0: {} date-fns@4.1.0: {} @@ -21036,10 +19439,6 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -21091,11 +19490,6 @@ snapshots: delayed-stream@1.0.0: {} - delegates@1.0.0: - optional: true - - denque@2.1.0: {} - depd@1.1.2: {} depd@2.0.0: {} @@ -21195,8 +19589,6 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.3.1: {} - dotenv@17.4.2: {} dotenv@8.6.0: {} @@ -21208,16 +19600,12 @@ snapshots: esbuild: 0.25.12 tsx: 4.21.0 - drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.17)(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7): + drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(kysely@0.28.17)(postgres@3.4.9): optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/pg': 8.15.6 - knex: 3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7) kysely: 0.28.17 - mysql2: 3.20.0(@types/node@25.6.2) - pg: 8.20.0 postgres: 3.4.9 - sqlite3: 5.1.7 dts-resolver@3.0.0: {} @@ -21229,13 +19617,6 @@ snapshots: duplexer@0.1.2: {} - duplexify@4.1.3: - dependencies: - end-of-stream: 1.4.5 - inherits: 2.0.4 - readable-stream: 3.6.2 - stream-shift: 1.0.3 - earcut@3.0.2: {} eastasianwidth@0.2.0: {} @@ -21269,25 +19650,14 @@ snapshots: empathic@2.0.1: {} - enabled@2.0.0: {} - encodeurl@2.0.0: {} - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - engine.io-parser@5.2.3: {} engine.io@6.6.7: dependencies: '@types/cors': 2.8.19 - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/ws': 8.18.1 accepts: 1.3.8 base64id: 2.0.0 @@ -21317,14 +19687,8 @@ snapshots: entities@6.0.1: {} - env-paths@2.2.1: - optional: true - env-paths@3.0.0: {} - err-code@2.0.3: - optional: true - error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -21554,8 +19918,6 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - esm@3.2.25: {} - esprima@4.0.1: {} esrecurse@4.3.0: @@ -21611,23 +19973,15 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 require-like: 0.1.2 - event-target-shim@5.0.1: {} - eventemitter3@4.0.7: {} eventemitter3@5.0.4: {} events@3.3.0: {} - eventsource-parser@3.0.8: {} - - eventsource@3.0.7: - dependencies: - eventsource-parser: 3.0.8 - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -21642,15 +19996,8 @@ snapshots: exit-hook@2.2.1: {} - expand-template@2.0.3: {} - expect-type@1.3.0: {} - express-rate-limit@8.5.1(express@5.2.1): - dependencies: - express: 5.2.1 - ip-address: 10.2.0 - express@4.22.1: dependencies: accepts: 1.3.8 @@ -21687,39 +20034,6 @@ snapshots: transitivePeerDependencies: - supports-color - express@5.2.1: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.2 - content-disposition: 1.1.0 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.3 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.1 - fresh: 2.0.0 - http-errors: 2.0.1 - merge-descriptors: 2.0.0 - mime-types: 3.0.2 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.15.1 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 - statuses: 2.0.2 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - exsolve@1.0.8: {} extend-shallow@2.0.1: @@ -21749,18 +20063,6 @@ snapshots: fast-uri@3.1.2: {} - fast-xml-builder@1.2.0: - dependencies: - path-expression-matcher: 1.5.0 - xml-naming: 0.1.0 - - fast-xml-parser@5.7.3: - dependencies: - '@nodable/entities': 2.1.0 - fast-xml-builder: 1.2.0 - path-expression-matcher: 1.5.0 - strnum: 2.3.0 - fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -21777,8 +20079,6 @@ snapshots: optionalDependencies: picomatch: 4.0.4 - fecha@4.2.3: {} - feed@4.2.2: dependencies: xml-js: 1.6.11 @@ -21807,8 +20107,6 @@ snapshots: transitivePeerDependencies: - supports-color - file-uri-to-path@1.0.0: {} - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -21825,17 +20123,6 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@2.1.1: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - find-cache-dir@4.0.0: dependencies: common-path-prefix: 3.0.0 @@ -21868,8 +20155,6 @@ snapshots: optionalDependencies: ol: 10.9.0 - fn.name@1.1.0: {} - follow-redirects@1.16.0: {} fontkit@2.0.4: @@ -21890,15 +20175,6 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@2.5.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.3 - mime-types: 2.1.35 - safe-buffer: 5.2.1 - form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -21930,16 +20206,6 @@ snapshots: fresh@0.5.2: {} - fresh@2.0.0: {} - - fs-constants@1.0.0: {} - - fs-extra@11.3.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - fs-extra@11.3.5: dependencies: graceful-fs: 4.2.11 @@ -21958,13 +20224,6 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs.realpath@1.0.0: - optional: true - fsevents@2.3.3: optional: true @@ -21985,29 +20244,6 @@ snapshots: fuzzysort@3.1.0: {} - gauge@4.0.4: - dependencies: - aproba: 2.1.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - optional: true - - gaxios@6.7.1(encoding@0.1.13): - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - is-stream: 2.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - gaxios@7.1.4: dependencies: extend: 3.0.2 @@ -22016,15 +20252,6 @@ snapshots: transitivePeerDependencies: - supports-color - gcp-metadata@6.1.1(encoding@0.1.13): - dependencies: - gaxios: 6.7.1(encoding@0.1.13) - google-logging-utils: 0.0.2 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - gcp-metadata@8.1.2: dependencies: gaxios: 7.1.4 @@ -22033,10 +20260,6 @@ snapshots: transitivePeerDependencies: - supports-color - generate-function@2.3.1: - dependencies: - is-property: 1.0.2 - generator-function@2.0.1: {} gensync@1.0.0-beta.2: {} @@ -22065,8 +20288,6 @@ snapshots: xml-utils: 1.10.2 zstddec: 0.2.0 - get-caller-file@2.0.5: {} - get-east-asian-width@1.6.0: {} get-intrinsic@1.3.0: @@ -22086,8 +20307,6 @@ snapshots: get-own-enumerable-property-symbols@3.0.2: {} - get-package-type@0.1.0: {} - get-port@5.1.1: {} get-proto@1.0.1: @@ -22113,10 +20332,6 @@ snapshots: get-value@2.0.6: {} - getopts@2.3.0: {} - - github-from-package@0.0.0: {} - github-slugger@1.5.0: {} gl-matrix@3.4.4: {} @@ -22141,16 +20356,6 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.5 - once: 1.4.0 - path-is-absolute: 1.0.1 - optional: true - global-dirs@3.0.1: dependencies: ini: 2.0.0 @@ -22201,42 +20406,8 @@ snapshots: transitivePeerDependencies: - supports-color - google-auth-library@9.15.1(encoding@0.1.13): - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1(encoding@0.1.13) - gcp-metadata: 6.1.1(encoding@0.1.13) - gtoken: 7.1.0(encoding@0.1.13) - jws: 4.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - google-logging-utils@0.0.2: {} - google-logging-utils@1.1.3: {} - googleapis-common@7.2.0(encoding@0.1.13): - dependencies: - extend: 3.0.2 - gaxios: 6.7.1(encoding@0.1.13) - google-auth-library: 9.15.1(encoding@0.1.13) - qs: 6.15.1 - url-template: 2.0.8 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - googleapis@137.1.0(encoding@0.1.13): - dependencies: - google-auth-library: 9.15.1(encoding@0.1.13) - googleapis-common: 7.2.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - gopd@1.2.0: {} got@12.6.1: @@ -22264,14 +20435,6 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - gtoken@7.1.0(encoding@0.1.13): - dependencies: - gaxios: 6.7.1(encoding@0.1.13) - jws: 4.0.1 - transitivePeerDependencies: - - encoding - - supports-color - gzip-size@6.0.0: dependencies: duplexer: 0.1.2 @@ -22296,9 +20459,6 @@ snapshots: dependencies: has-symbols: 1.1.0 - has-unicode@2.0.1: - optional: true - has-yarn@3.0.0: {} hasown@2.0.3: @@ -22414,8 +20574,6 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.12.18: {} - hookable@6.1.1: {} hpack.js@2.1.6: @@ -22431,8 +20589,6 @@ snapshots: hsl-to-rgb-for-reals@1.1.1: {} - html-entities@2.6.0: {} - html-escaper@2.0.2: {} html-minifier-terser@6.1.0: @@ -22516,30 +20672,6 @@ snapshots: http-parser-js@0.5.10: {} - http-proxy-agent@4.0.1: - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - optional: true - - http-proxy-agent@5.0.0: - dependencies: - '@tootallnate/once': 2.0.1 - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - http-proxy-middleware@2.0.9(@types/express@4.17.25): dependencies: '@types/http-proxy': 1.17.17 @@ -22583,11 +20715,6 @@ snapshots: human-signals@2.1.0: {} - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - optional: true - hyperdyperid@1.2.0: {} hyphen@1.14.1: {} @@ -22596,10 +20723,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -22647,17 +20770,8 @@ snapshots: indent-string@4.0.0: {} - infer-owner@1.0.4: - optional: true - infima@0.2.0-alpha.45: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - optional: true - inherits@2.0.4: {} ini@1.3.8: {} @@ -22679,14 +20793,10 @@ snapshots: internmap@2.0.3: {} - interpret@2.2.0: {} - invariant@2.2.4: dependencies: loose-envify: 1.4.0 - ip-address@10.2.0: {} - ipaddr.js@1.9.1: {} ipaddr.js@2.4.0: {} @@ -22791,9 +20901,6 @@ snapshots: global-dirs: 3.0.1 is-path-inside: 3.0.3 - is-lambda@1.0.1: - optional: true - is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -22825,10 +20932,6 @@ snapshots: dependencies: isobject: 3.0.1 - is-promise@4.0.0: {} - - is-property@1.0.2: {} - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -22928,7 +21031,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 25.6.2 + '@types/node': 25.7.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -22936,13 +21039,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -22963,10 +21066,12 @@ snapshots: jose@6.2.3: {} - js-md4@0.3.2: {} - js-md5@0.8.3: {} + js-tiktoken@1.0.21: + dependencies: + base64-js: 1.5.1 + js-tokens@10.0.0: {} js-tokens@4.0.0: {} @@ -22980,8 +21085,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsep@1.4.0: {} - jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -22994,6 +21097,11 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-schema-to-ts@3.1.1: + dependencies: + '@babel/runtime': 7.29.2 + ts-algebra: 2.0.0 + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -23018,12 +21126,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonpath-plus@10.4.0: - dependencies: - '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - jsep: 1.4.0 - jsonpointer@5.0.1: {} jsonwebtoken@9.0.3: @@ -23064,54 +21166,35 @@ snapshots: kleur@3.0.3: {} - knex@3.2.10(mysql2@3.20.0(@types/node@25.6.2))(pg@8.20.0)(sqlite3@5.1.7): + kysely@0.28.17: {} + + langchain@1.4.0(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0): dependencies: - colorette: 2.0.19 - commander: 10.0.1 - debug: 4.3.4 - escalade: 3.2.0 - esm: 3.2.25 - get-package-type: 0.1.0 - getopts: 2.3.0 - interpret: 2.2.0 - lodash: 4.18.1 - pg-connection-string: 2.6.2 - rechoir: 0.8.0 - resolve-from: 5.0.0 - tarn: 3.0.2 - tildify: 2.0.0 - optionalDependencies: - mysql2: 3.20.0(@types/node@25.6.2) - pg: 8.20.0 - sqlite3: 5.1.7 + '@langchain/core': 1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + '@langchain/langgraph': 1.3.0(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(ws@8.20.0)(zod@4.4.3) + '@langchain/langgraph-checkpoint': 1.0.2(@langchain/core@1.1.46(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0)) + langsmith: 0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0) + zod: 4.4.3 transitivePeerDependencies: - - supports-color + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - react + - react-dom + - svelte + - vue + - ws + - zod-to-json-schema - knex@3.2.10(pg@8.20.0)(tedious@19.2.1(@azure/core-client@1.10.1)): + langsmith@0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.1(@opentelemetry/api@1.9.1))(openai@6.37.0(ws@8.20.0)(zod@4.4.3))(ws@8.20.0): dependencies: - colorette: 2.0.19 - commander: 10.0.1 - debug: 4.3.4 - escalade: 3.2.0 - esm: 3.2.25 - get-package-type: 0.1.0 - getopts: 2.3.0 - interpret: 2.2.0 - lodash: 4.18.1 - pg-connection-string: 2.6.2 - rechoir: 0.8.0 - resolve-from: 5.0.0 - tarn: 3.0.2 - tildify: 2.0.0 + p-queue: 6.6.2 optionalDependencies: - pg: 8.20.0 - tedious: 19.2.1(@azure/core-client@1.10.1) - transitivePeerDependencies: - - supports-color - - kuler@2.0.0: {} - - kysely@0.28.17: {} + '@opentelemetry/api': 1.9.1 + '@opentelemetry/sdk-trace-base': 2.7.1(@opentelemetry/api@1.9.1) + openai: 6.37.0(ws@8.20.0)(zod@4.4.3) + ws: 8.20.0 latest-version@7.0.0: dependencies: @@ -23210,10 +21293,6 @@ snapshots: dependencies: p-locate: 6.0.0 - lodash-es@4.18.1: {} - - lodash.camelcase@4.3.0: {} - lodash.debounce@4.0.8: {} lodash.includes@4.3.0: {} @@ -23245,15 +21324,6 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.1.2 - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - long@5.3.2: {} longest-streak@3.1.0: {} @@ -23268,21 +21338,12 @@ snapshots: lowercase-keys@3.0.0: {} - lru-cache@10.4.3: {} - lru-cache@11.3.6: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - optional: true - - lru.min@1.1.4: {} - lucide-react@1.14.0(react@19.2.6): dependencies: react: 19.2.6 @@ -23303,29 +21364,6 @@ snapshots: dependencies: semver: 7.8.0 - make-fetch-happen@9.1.0: - dependencies: - agentkeepalive: 4.6.0 - cacache: 15.3.0 - http-cache-semantics: 4.2.0 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 1.4.1 - minipass-flush: 1.0.7 - minipass-pipeline: 1.2.4 - negotiator: 0.6.4 - promise-retry: 2.0.1 - socks-proxy-agent: 6.2.1 - ssri: 8.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - maplibre-gl@5.24.0: dependencies: '@mapbox/jsonlint-lines-primitives': 2.0.2 @@ -23348,14 +21386,6 @@ snapshots: quickselect: 3.0.0 tinyqueue: 3.0.0 - mariadb@3.4.5: - dependencies: - '@types/geojson': 7946.0.16 - '@types/node': 24.12.3 - denque: 2.1.0 - iconv-lite: 0.6.3 - lru-cache: 10.4.3 - markdown-extensions@2.0.0: {} markdown-it@14.1.1: @@ -23605,8 +21635,6 @@ snapshots: media-typer@0.3.0: {} - media-typer@1.1.0: {} - memfs@4.57.2(tslib@2.8.1): dependencies: '@jsonjoy.com/fs-core': 4.57.2(tslib@2.8.1) @@ -23626,8 +21654,6 @@ snapshots: merge-descriptors@1.0.3: {} - merge-descriptors@2.0.0: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -23956,8 +21982,6 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 - mikro-orm@6.6.14: {} - mime-db@1.33.0: {} mime-db@1.52.0: {} @@ -23978,8 +22002,6 @@ snapshots: mime@1.6.0: {} - mime@3.0.0: {} - mimic-fn@2.1.0: {} mimic-function@5.0.1: {} @@ -24010,52 +22032,8 @@ snapshots: minimist@1.2.8: {} - minipass-collect@1.0.2: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-fetch@1.4.1: - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - optional: true - - minipass-flush@1.0.7: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - optional: true - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - minipass@7.1.3: {} - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - mkdirp-classic@0.5.3: {} - - mkdirp@1.0.4: {} - module-details-from-path@1.0.4: {} morgan@1.10.1: @@ -24080,8 +22058,6 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} multicast-dns@7.2.5: @@ -24091,21 +22067,7 @@ snapshots: murmurhash-js@1.0.0: {} - mysql2@3.20.0(@types/node@25.6.2): - dependencies: - '@types/node': 25.6.2 - aws-ssl-profiles: 1.1.2 - denque: 2.1.0 - generate-function: 2.3.1 - iconv-lite: 0.7.2 - long: 5.3.2 - lru.min: 1.1.4 - named-placeholders: 1.1.6 - sql-escaper: 1.3.3 - - named-placeholders@1.1.6: - dependencies: - lru.min: 1.1.4 + mustache@4.2.0: {} nanoid@3.3.12: {} @@ -24113,16 +22075,10 @@ snapshots: nanostores@1.3.0: {} - napi-build-utils@2.0.0: {} - - native-duplexpair@1.0.0: {} - negotiator@0.6.3: {} negotiator@0.6.4: {} - negotiator@1.0.0: {} - neo-async@2.6.2: {} next-themes@0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6): @@ -24164,8 +22120,6 @@ snapshots: dependencies: semver: 7.8.0 - node-addon-api@7.1.1: {} - node-domexception@1.0.0: {} node-emoji@2.2.0: @@ -24175,11 +22129,9 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-fetch@2.7.0(encoding@0.1.13): + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 node-fetch@3.3.2: dependencies: @@ -24187,30 +22139,8 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-gyp@8.4.1: - dependencies: - env-paths: 2.2.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - make-fetch-happen: 9.1.0 - nopt: 5.0.0 - npmlog: 6.0.2 - rimraf: 3.0.2 - semver: 7.8.0 - tar: 6.2.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - node-releases@2.0.38: {} - nopt@5.0.0: - dependencies: - abbrev: 1.1.1 - optional: true - normalize-path@3.0.0: {} normalize-svg-path@1.1.0: @@ -24223,14 +22153,6 @@ snapshots: dependencies: path-key: 3.1.1 - npmlog@6.0.2: - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - optional: true - nprogress@0.2.0: {} nth-check@2.1.1: @@ -24291,17 +22213,9 @@ snapshots: on-finished@2.4.1: dependencies: - ee-first: 1.1.1 - - on-headers@1.1.0: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 + ee-first: 1.1.1 - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 + on-headers@1.1.0: {} onetime@5.1.2: dependencies: @@ -24320,6 +22234,11 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openai@6.37.0(ws@8.20.0)(zod@4.4.3): + optionalDependencies: + ws: 8.20.0 + zod: 4.4.3 + opener@1.5.2: {} outdent@0.5.0: {} @@ -24375,6 +22294,11 @@ snapshots: eventemitter3: 4.0.7 p-timeout: 3.2.0 + p-queue@9.2.0: + dependencies: + eventemitter3: 5.0.4 + p-timeout: 7.0.1 + p-retry@4.6.2: dependencies: '@types/retry': 0.12.0 @@ -24386,10 +22310,16 @@ snapshots: is-network-error: 1.3.2 retry: 0.13.1 + p-retry@7.1.1: + dependencies: + is-network-error: 1.3.2 + p-timeout@3.2.0: dependencies: p-finally: 1.0.0 + p-timeout@7.0.1: {} + p-try@2.2.0: {} package-json@8.1.1: @@ -24464,17 +22394,10 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - path-browserify@1.0.1: {} - path-exists@4.0.0: {} path-exists@5.0.0: {} - path-expression-matcher@1.5.0: {} - - path-is-absolute@1.0.1: - optional: true - path-is-inside@1.0.2: {} path-key@3.1.1: {} @@ -24494,8 +22417,6 @@ snapshots: path-to-regexp@3.3.0: {} - path-to-regexp@8.4.2: {} - path-type@4.0.0: {} pathe@1.1.2: {} @@ -24508,19 +22429,8 @@ snapshots: peberminta@0.9.0: {} - pg-cloudflare@1.3.0: - optional: true - - pg-connection-string@2.12.0: {} - - pg-connection-string@2.6.2: {} - pg-int8@1.0.1: {} - pg-pool@3.13.0(pg@8.20.0): - dependencies: - pg: 8.20.0 - pg-protocol@1.13.0: {} pg-types@2.2.0: @@ -24531,20 +22441,6 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg@8.20.0: - dependencies: - pg-connection-string: 2.12.0 - pg-pool: 3.13.0(pg@8.20.0) - pg-protocol: 1.13.0 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.3.0 - - pgpass@1.0.5: - dependencies: - split2: 4.2.0 - picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -24555,8 +22451,6 @@ snapshots: pify@4.0.1: {} - pkce-challenge@5.0.1: {} - pkg-dir@7.0.0: dependencies: find-up: 6.3.0 @@ -25040,20 +22934,14 @@ snapshots: postgres-array@2.0.0: {} - postgres-array@3.0.4: {} - postgres-bytea@1.0.1: {} postgres-date@1.0.7: {} - postgres-date@2.1.0: {} - postgres-interval@1.2.0: dependencies: xtend: 4.0.2 - postgres-interval@4.0.2: {} - postgres@3.4.9: {} posthog-js@1.372.10: @@ -25076,6 +22964,10 @@ snapshots: dependencies: '@posthog/core': 1.28.4 + posthog-node@5.33.7: + dependencies: + '@posthog/core': 1.28.7 + postmark@4.0.7: dependencies: axios: 1.16.0 @@ -25086,21 +22978,6 @@ snapshots: preact@10.29.1: {} - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.1.2 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.92.0 - pump: 3.0.4 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.4 - tunnel-agent: 0.6.0 - prettier@2.8.8: {} prettier@3.8.3: {} @@ -25122,8 +22999,6 @@ snapshots: process-nextick-args@2.0.1: {} - process@0.11.10: {} - progress@2.0.3: {} proj4@2.20.8: @@ -25131,15 +23006,6 @@ snapshots: mgrs: 1.0.0 wkt-parser: 1.5.5 - promise-inflight@1.0.1: - optional: true - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - optional: true - prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -25167,7 +23033,22 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 - '@types/node': 25.6.2 + '@types/node': 25.7.0 + long: 5.3.2 + + protobufjs@7.5.8: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.1 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.1 + '@types/node': 25.7.0 long: 5.3.2 protocol-buffers-schema@3.6.1: {} @@ -25181,11 +23062,6 @@ snapshots: proxy-from-env@2.1.0: {} - pump@3.0.4: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - punycode.js@2.3.1: {} punycode@2.3.1: {} @@ -25306,13 +23182,6 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-body@3.0.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.1 - iconv-lite: 0.7.2 - unpipe: 1.0.0 - rbush@4.0.1: dependencies: quickselect: 3.0.0 @@ -25521,14 +23390,6 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readable-stream@4.7.0: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - readdirp@3.6.0: dependencies: picomatch: 2.3.2 @@ -25555,10 +23416,6 @@ snapshots: - '@types/react' - redux - rechoir@0.8.0: - dependencies: - resolve: 1.22.12 - recma-build-jsx@1.0.0: dependencies: '@types/estree': 1.0.9 @@ -25759,8 +23616,6 @@ snapshots: lodash: 4.18.1 strip-ansi: 6.0.1 - require-directory@2.1.1: {} - require-from-string@2.0.2: {} require-in-the-middle@8.0.1: @@ -25803,27 +23658,10 @@ snapshots: restructure@3.0.2: {} - retry-request@7.0.2(encoding@0.1.13): - dependencies: - '@types/request': 2.48.13 - extend: 3.0.2 - teeny-request: 9.0.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - retry@0.12.0: - optional: true - retry@0.13.1: {} reusify@1.1.0: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - optional: true - robust-predicates@3.0.3: {} rolldown-plugin-dts@0.25.0(rolldown@1.0.0)(typescript@6.0.3): @@ -25917,16 +23755,6 @@ snapshots: rou3@0.7.12: {} - router@2.2.0: - dependencies: - debug: 4.4.3 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.4.2 - transitivePeerDependencies: - - supports-color - rtlcss@4.3.0: dependencies: escalade: 3.2.0 @@ -26036,22 +23864,6 @@ snapshots: transitivePeerDependencies: - supports-color - send@1.2.1: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.1 - mime-types: 3.0.2 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -26087,18 +23899,6 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@2.2.1: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.1 - transitivePeerDependencies: - - supports-color - - set-blocking@2.0.0: - optional: true - set-cookie-parser@2.7.2: {} set-cookie-parser@3.1.0: {} @@ -26220,14 +24020,6 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.29 @@ -26255,9 +24047,6 @@ snapshots: slice-source@0.4.1: {} - smart-buffer@4.2.0: - optional: true - smol-toml@1.6.1: {} snake-case@3.0.4: @@ -26301,21 +24090,6 @@ snapshots: uuid: 8.3.2 websocket-driver: 0.7.4 - socks-proxy-agent@6.2.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - socks: 2.8.9 - transitivePeerDependencies: - - supports-color - optional: true - - socks@2.8.9: - dependencies: - ip-address: 10.2.0 - smart-buffer: 4.2.0 - optional: true - sonner@2.0.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: react: 19.2.6 @@ -26381,39 +24155,10 @@ snapshots: dependencies: extend-shallow: 3.0.2 - split2@4.2.0: {} - sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} - - sql-escaper@1.3.3: {} - - sqlite3@5.1.7: - dependencies: - bindings: 1.5.0 - node-addon-api: 7.1.1 - prebuild-install: 7.1.3 - tar: 6.2.1 - optionalDependencies: - node-gyp: 8.4.1 - transitivePeerDependencies: - - bluebird - - supports-color - - sqlstring-sqlite@0.1.1: {} - - sqlstring@2.3.3: {} - srcset@4.0.0: {} - ssri@8.0.1: - dependencies: - minipass: 3.3.6 - optional: true - - stack-trace@0.0.10: {} - stackback@0.0.2: {} statuses@1.5.0: {} @@ -26429,12 +24174,6 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - stream-events@1.0.5: - dependencies: - stubs: 3.0.0 - - stream-shift@1.0.3: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -26512,8 +24251,6 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@2.3.0: {} - strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -26524,8 +24261,6 @@ snapshots: stubborn-utils@1.0.2: {} - stubs@3.0.0: {} - style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -26600,59 +24335,6 @@ snapshots: tapable@2.3.3: {} - tar-fs@2.1.4: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.4 - tar-stream: 2.2.0 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - tarn@3.0.2: {} - - tedious@19.2.1(@azure/core-client@1.10.1): - dependencies: - '@azure/core-auth': 1.10.1 - '@azure/identity': 4.13.1 - '@azure/keyvault-keys': 4.10.0(@azure/core-client@1.10.1) - '@js-joda/core': 5.7.0 - '@types/node': 25.6.2 - bl: 6.1.6 - iconv-lite: 0.7.2 - js-md4: 0.3.2 - native-duplexpair: 1.0.0 - sprintf-js: 1.1.3 - transitivePeerDependencies: - - '@azure/core-client' - - supports-color - - teeny-request@9.0.0(encoding@0.1.13): - dependencies: - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - stream-events: 1.0.5 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - term-size@2.2.1: {} terser-webpack-plugin@5.6.0(@swc/core@1.15.33(@swc/helpers@0.5.21))(@swc/html@1.15.33)(lightningcss@1.32.0)(postcss@8.5.14)(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(postcss@8.5.14)): @@ -26689,16 +24371,12 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - text-hex@1.0.0: {} - thingies@2.6.0(tslib@2.8.1): dependencies: tslib: 2.8.1 thunky@1.1.0: {} - tildify@2.0.0: {} - tiny-inflate@1.0.3: {} tiny-invariant@1.3.3: {} @@ -26750,14 +24428,9 @@ snapshots: trim-lines@3.0.1: {} - triple-beam@1.4.1: {} - trough@2.2.0: {} - ts-morph@27.0.2: - dependencies: - '@ts-morph/common': 0.28.1 - code-block-writer: 13.0.3 + ts-algebra@2.0.0: {} tsconfig-paths@4.2.0: dependencies: @@ -26795,8 +24468,6 @@ snapshots: tslib@2.8.1: {} - tsqlstring@1.0.1: {} - tsx@4.21.0: dependencies: esbuild: 0.27.7 @@ -26808,10 +24479,6 @@ snapshots: dependencies: tslib: 1.14.1 - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - turbo@2.9.12: optionalDependencies: '@turbo/darwin-64': 2.9.12 @@ -26834,12 +24501,6 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.2 - typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -26933,10 +24594,10 @@ snapshots: '@quansync/fs': 1.0.0 quansync: 1.0.0 - undici-types@7.16.0: {} - undici-types@7.19.2: {} + undici-types@7.21.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} @@ -26979,16 +24640,6 @@ snapshots: is-extendable: 0.1.1 set-value: 2.0.1 - unique-filename@1.1.1: - dependencies: - unique-slug: 2.0.2 - optional: true - - unique-slug@2.0.2: - dependencies: - imurmurhash: 0.1.4 - optional: true - unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 @@ -27067,8 +24718,6 @@ snapshots: optionalDependencies: file-loader: 6.2.0(webpack@5.106.2(@swc/core@1.15.33(@swc/helpers@0.5.21))(postcss@8.5.14)) - url-template@2.0.8: {} - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.6): dependencies: react: 19.2.6 @@ -27096,11 +24745,13 @@ snapshots: utils-merge@1.0.1: {} + uuid@10.0.0: {} + uuid@11.1.1: {} - uuid@8.3.2: {} + uuid@13.0.2: {} - uuid@9.0.1: {} + uuid@8.3.2: {} valibot@1.4.0(typescript@6.0.3): optionalDependencies: @@ -27150,13 +24801,13 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite-node@3.2.4(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4): + vite-node@3.2.4(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.3(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + vite: 7.3.3(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) transitivePeerDependencies: - '@types/node' - jiti @@ -27171,13 +24822,13 @@ snapshots: - tsx - yaml - vite-node@6.0.0(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4): + vite-node@6.0.0(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4): dependencies: cac: 7.0.0 es-module-lexer: 2.1.0 obug: 2.1.1 pathe: 2.0.3 - vite: 8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + vite: 8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) transitivePeerDependencies: - '@types/node' - '@vitejs/devtools' @@ -27192,7 +24843,7 @@ snapshots: - tsx - yaml - vite@7.3.3(@types/node@25.6.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4): + vite@7.3.3(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -27201,7 +24852,7 @@ snapshots: rollup: 4.60.3 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 fsevents: 2.3.3 jiti: 2.7.0 lightningcss: 1.32.0 @@ -27225,7 +24876,23 @@ snapshots: tsx: 4.21.0 yaml: 2.8.4 - vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)): + vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.14 + rolldown: 1.0.0-rc.18 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 25.7.0 + esbuild: 0.28.0 + fsevents: 2.3.3 + jiti: 2.7.0 + terser: 5.47.1 + tsx: 4.21.0 + yaml: 2.8.4 + + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)): dependencies: '@vitest/expect': 4.1.5 '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) @@ -27248,21 +24915,21 @@ snapshots: vite: 8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) why-is-node-running: 2.3.0 optionalDependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@types/node': 25.6.2 - '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) + '@vitest/coverage-v8': 4.1.6(vitest@4.1.5) transitivePeerDependencies: - msw - vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.5)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)): + vitest@4.1.6(@opentelemetry/api@1.9.1)(@types/node@25.7.0)(@vitest/coverage-v8@4.1.6)(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)): dependencies: - '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) - '@vitest/pretty-format': 4.1.5 - '@vitest/runner': 4.1.5 - '@vitest/snapshot': 4.1.5 - '@vitest/spy': 4.1.5 - '@vitest/utils': 4.1.5 + '@vitest/expect': 4.1.6 + '@vitest/mocker': 4.1.6(vite@8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4)) + '@vitest/pretty-format': 4.1.6 + '@vitest/runner': 4.1.6 + '@vitest/snapshot': 4.1.6 + '@vitest/spy': 4.1.6 + '@vitest/utils': 4.1.6 es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -27274,12 +24941,12 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.11(@types/node@25.6.2)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) + vite: 8.0.11(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.21.0)(yaml@2.8.4) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 25.6.2 - '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) + '@types/node': 25.7.0 + '@vitest/coverage-v8': 4.1.6(vitest@4.1.6) transitivePeerDependencies: - msw @@ -27545,53 +25212,20 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - wide-align@1.1.5: - dependencies: - string-width: 4.2.3 - optional: true - widest-line@4.0.1: dependencies: string-width: 5.1.2 wildcard@2.0.1: {} - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.19.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.8 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - wkt-parser@1.5.5: {} - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.3 string-width: 5.1.2 strip-ansi: 7.2.0 - wrappy@1.0.2: {} - write-file-atomic@3.0.3: dependencies: imurmurhash: 0.1.4 @@ -27615,8 +25249,6 @@ snapshots: dependencies: sax: 1.6.0 - xml-naming@0.1.0: {} - xml-utils@1.10.2: {} xml2js@0.6.2: @@ -27630,26 +25262,10 @@ snapshots: xxhash-wasm@1.1.0: {} - y18n@5.0.8: {} - yallist@3.1.1: {} - yallist@4.0.0: {} - yaml@2.8.4: {} - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yocto-queue@0.1.0: {} yocto-queue@1.2.2: {} @@ -27668,10 +25284,6 @@ snapshots: numcodecs: 0.3.2 optional: true - zod-to-json-schema@3.25.2(zod@4.4.3): - dependencies: - zod: 4.4.3 - zod@4.4.3: {} zstddec@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c29858026..d15482298 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,8 +9,8 @@ packages: catalog: '@dotenvx/dotenvx': ^1.65.0 - '@types/node': ^25.6.2 - '@vitest/coverage-v8': 4.1.5 + '@types/node': ^25.7.0 + '@vitest/coverage-v8': 4.1.6 better-auth: ^1.6.10 drizzle-kit: ^0.31.10 drizzle-orm: ^0.45.2 @@ -19,7 +19,7 @@ catalog: typedoc-plugin-missing-exports: ^4.1.3 typescript: ^6.0.3 vite-tsconfig-paths: ^5.1.4 - vitest: ^4.1.5 + vitest: ^4.1.6 blockExoticSubdeps: true strictDepBuilds: true