From 145466048fb0e5e52ec2e0d4e19708722cb2c0be Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Fri, 1 May 2026 17:04:26 +0200 Subject: [PATCH 01/17] refactor: Migrate from @google/adk to LangChain --- .changeset/better-pants-eat.md | 5 + fdm-agents/package.json | 7 +- fdm-agents/src/agents/gerrit/agent.test.ts | 27 +- fdm-agents/src/agents/gerrit/agent.ts | 53 +- fdm-agents/src/models/default.test.ts | 34 +- fdm-agents/src/models/default.ts | 8 +- fdm-agents/src/runners/one-shot.test.ts | 325 ++++++------ fdm-agents/src/runners/one-shot.ts | 226 ++++----- .../tools/fertilizer-planner/index.test.ts | 207 +++----- .../src/tools/fertilizer-planner/index.ts | 308 ++++++------ pnpm-lock.yaml | 466 ++++++++++++++++-- 11 files changed, 1002 insertions(+), 664 deletions(-) create mode 100644 .changeset/better-pants-eat.md 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/package.json b/fdm-agents/package.json index f6af362c5..949d519fc 100644 --- a/fdm-agents/package.json +++ b/fdm-agents/package.json @@ -24,11 +24,14 @@ "test-coverage": "vitest run --coverage" }, "dependencies": { - "@google/adk": "^1.1.0", - "@google/genai": "^1.50.1", + "@langchain/core": "^1.1.42", + "@langchain/google-genai": "^2.1.29", + "@langchain/langgraph": "^1.2.9", "@nmi-agro/fdm-calculator": "workspace:^", "@nmi-agro/fdm-core": "workspace:^", "@nmi-agro/fdm-data": "workspace:^", + "@posthog/ai": "^7.17.2", + "langchain": "^1.3.5", "posthog-node": "^5.30.8", "zod": "^4.3.6" }, diff --git a/fdm-agents/src/agents/gerrit/agent.test.ts b/fdm-agents/src/agents/gerrit/agent.test.ts index a756a22ee..29b287203 100644 --- a/fdm-agents/src/agents/gerrit/agent.test.ts +++ b/fdm-agents/src/agents/gerrit/agent.test.ts @@ -1,5 +1,10 @@ import { describe, expect, it, vi } from "vitest" -import { createFertilizerPlannerAgent } from "./agent" +import { + GERRIT_DESCRIPTION, + GERRIT_INSTRUCTION, + GERRIT_NAME, + createFertilizerPlannerAgent, +} from "./agent" // Mock models and tools to avoid external calls vi.mock("../../models/default", () => ({ @@ -11,22 +16,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", () => { diff --git a/fdm-agents/src/agents/gerrit/agent.ts b/fdm-agents/src/agents/gerrit/agent.ts index a7a958c25..0ce6f30f0 100644 --- a/fdm-agents/src/agents/gerrit/agent.ts +++ b/fdm-agents/src/agents/gerrit/agent.ts @@ -1,31 +1,13 @@ -import { Agent } from "@google/adk" +import { createReactAgent } from "@langchain/langgraph/prebuilt" import type { FdmType } from "@nmi-agro/fdm-core" import { createDefaultModel } from "../../models/default" import { createFertilizerPlannerTools } from "../../tools/fertilizer-planner" -/** - * 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." + +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: @@ -151,7 +133,28 @@ 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. -`, +` + +/** + * 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, +): ReturnType { + 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 createReactAgent({ + llm: createDefaultModel(resolvedKey, model), tools: createFertilizerPlannerTools(fdm), + stateModifier: GERRIT_INSTRUCTION, }) } diff --git a/fdm-agents/src/models/default.test.ts b/fdm-agents/src/models/default.test.ts index ec5267c36..93237ad7b 100644 --- a/fdm-agents/src/models/default.test.ts +++ b/fdm-agents/src/models/default.test.ts @@ -1,30 +1,26 @@ 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", @@ -35,8 +31,8 @@ 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", diff --git a/fdm-agents/src/models/default.ts b/fdm-agents/src/models/default.ts index 94907fcb6..74f7c1eaa 100644 --- a/fdm-agents/src/models/default.ts +++ b/fdm-agents/src/models/default.ts @@ -1,13 +1,13 @@ -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, }) diff --git a/fdm-agents/src/runners/one-shot.test.ts b/fdm-agents/src/runners/one-shot.test.ts index 9fddaf889..6826edccd 100644 --- a/fdm-agents/src/runners/one-shot.test.ts +++ b/fdm-agents/src/runners/one-shot.test.ts @@ -1,213 +1,210 @@ -import { beforeEach, describe, expect, it, vi } from "vitest" -import { runOneShotAgent } from "./one-shot" +import { afterEach, describe, expect, it, vi } from "vitest" +import { 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, + 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 } +} + +function createMockAgent(chunks: Array<[string, Record]>): any { + return { + stream: vi.fn().mockResolvedValue( + (async function* () { + for (const chunk of chunks) { + yield chunk + } + })(), + ), + } +} -import { isFinalResponse, stringifyContent } from "@google/adk" +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.") - - const result = await runOneShotAgent(mockAgent, "Generate plan") + const agent = createMockAgent([ + [ + "updates", + { agent: { 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", { agent: { 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", + { + agent: { + 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", + { + agent: { + 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", { agent: { 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", { agent: { 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", + { + agent: { + messages: [ + makeAIMessage("", { + tool_calls: [{ name: "simulateFarmPlan" }], + }), + ], + }, + }, + ], + ["updates", { agent: { 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", { agent: { 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, ) - expect(result.result).toBe("Done.") + vi.advanceTimersByTime(6000) + await expect(runPromise).rejects.toThrow(AgentTimeoutError) + vi.useRealTimers() }) }) + diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index a334164c9..61ed82496 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -1,5 +1,5 @@ -import type { BaseAgent } from "@google/adk" -import { InMemoryRunner, isFinalResponse, stringifyContent } from "@google/adk" +import { isAIMessage } from "@langchain/core/messages" +import type { LangChainCallbackHandler } from "@posthog/ai/langchain" export interface OneShotAgentResult { result: string @@ -18,156 +18,138 @@ export class AgentTimeoutError extends Error { } } +// Structural type for any LangGraph compiled agent graph +interface StreamableAgentGraph { + stream(input: unknown, options?: unknown): Promise> +} + +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. * @returns The final response and token usage from the agent. */ export async function runOneShotAgent( - agent: BaseAgent, + agent: StreamableAgentGraph, input: string, context: Record = {}, posthog?: { client: any; distinctId: string }, timeoutMs = 20 * 60 * 1000, ): 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) 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"}`, - ) - } + const streamPromise = (async (): Promise => { + let finalResponse = "" + let inputTokens = 0 + let outputTokens = 0 + const toolCalls: string[] = [] + + const stream = (await agent.stream( + { messages: [{ role: "user", content: input }] }, + { + configurable: context, + streamMode: ["updates", "custom"], + signal: abortController.signal, + ...(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 === "agent" && Array.isArray(nodeData?.messages)) { + const lastMsg = nodeData.messages.at(-1) + if (isAIMessage(lastMsg)) { + if (lastMsg.usage_metadata) { + inputTokens += lastMsg.usage_metadata.input_tokens ?? 0 + outputTokens += lastMsg.usage_metadata.output_tokens ?? 0 + } + if (lastMsg.tool_calls?.length) { + for (const tc of lastMsg.tool_calls) { + if (tc.name) toolCalls.push(tc.name) + } + } else { + // No pending tool calls — this is the final response + const content = lastMsg.content + finalResponse = + typeof content === "string" + ? content + : JSON.stringify(content) + } + } + } - // Accumulate usage metadata across all events. - const usage = event.usageMetadata - if (usage) { - inputTokens += usage.promptTokenCount ?? 0 - outputTokens += usage.candidatesTokenCount ?? 0 - totalTokens += usage.totalTokenCount ?? 0 + if (node === "tools" && Array.isArray(nodeData?.messages)) { + for (const msg of nodeData.messages) { + if (msg?.name && !toolCalls.includes(msg.name)) { + toolCalls.push(msg.name) + } + } + } } + // "custom" mode: progress events from config.writer — consumed by callers + // who use the raw stream; ignored here since runOneShotAgent is one-shot. + } - extractToolCalls(event) + const uniqueToolCalls = [...new Set(toolCalls)] + const totalTokens = inputTokens + outputTokens - // Only capture the final text response, not intermediate reasoning or tool calls. - if (isFinalResponse(event)) { - const text = stringifyContent(event) - if (text) { - finalResponse = text - } - } + return { + result: finalResponse, + usage: totalTokens > 0 ? { inputTokens, outputTokens, totalTokens } : null, + toolCalls: uniqueToolCalls, } })() try { - await Promise.race([streamPromise, timeoutPromise]) + return await Promise.race([streamPromise, timeoutPromise]) } 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..79b53653b 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( @@ -579,9 +528,9 @@ describe("tool execute functions", () => { it("should throw when fertilizer is not found in inventory", async () => { ;(getFertilizers as any).mockResolvedValue([]) await expect( - getTool("simulateFarmPlan").execute( + getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ), ).rejects.toThrow("not found in farm inventory") }) @@ -591,9 +540,9 @@ describe("tool execute functions", () => { { ...mockFertilizer, p_app_method_options: ["injection"] }, ]) await expect( - getTool("simulateFarmPlan").execute( + getTool("simulateFarmPlan").invoke( makeSimInput(), - makeContext(), + makeConfigurable(), ), ).rejects.toThrow("Invalid application method") }) @@ -602,9 +551,9 @@ describe("tool execute functions", () => { ;(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..bedd519b4 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,9 @@ 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 const timeframe = { start: new Date(`${input.calendar}-01-01`), end: new Date(`${input.calendar}-12-31`), @@ -130,25 +123,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,7 +149,7 @@ 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 @@ -194,26 +187,26 @@ export function createFertilizerPlannerTools(fdm: FdmType) { // 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) @@ -251,32 +244,26 @@ export function createFertilizerPlannerTools(fdm: FdmType) { // 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 +316,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 @@ -998,26 +937,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. @@ -1067,7 +1063,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/pnpm-lock.yaml b/pnpm-lock.yaml index c9de0c922..2bd864c8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,10 +63,19 @@ importers: dependencies: '@google/adk': specifier: ^1.1.0 - version: 1.1.0(@grpc/grpc-js@1.14.3)(@mikro-orm/mariadb@6.6.11(@mikro-orm/core@6.6.13)(pg@8.20.0))(@mikro-orm/mssql@6.6.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.11(@mikro-orm/core@6.6.13)(@types/node@25.6.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.1))(encoding@0.1.13) + version: 1.1.0(@cfworker/json-schema@4.1.1)(@grpc/grpc-js@1.14.3)(@mikro-orm/mariadb@6.6.11(@mikro-orm/core@6.6.13)(pg@8.20.0))(@mikro-orm/mssql@6.6.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.11(@mikro-orm/core@6.6.13)(@types/node@25.6.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) '@google/genai': specifier: ^1.50.1 - version: 1.50.1(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)) + version: 1.50.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)) + '@langchain/core': + specifier: ^1.1.42 + version: 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/google-genai': + specifier: ^2.1.29 + version: 2.1.29(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) + '@langchain/langgraph': + specifier: ^1.2.9 + version: 1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6) '@nmi-agro/fdm-calculator': specifier: workspace:^ version: link:../fdm-calculator @@ -76,6 +85,12 @@ importers: '@nmi-agro/fdm-data': specifier: workspace:^ version: link:../fdm-data + '@posthog/ai': + specifier: ^7.17.2 + version: 7.17.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(posthog-node@5.31.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) + langchain: + specifier: ^1.3.5 + version: 1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) posthog-node: specifier: ^5.30.8 version: 5.31.0 @@ -97,7 +112,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) fdm-app: dependencies: @@ -187,7 +202,7 @@ importers: version: 7.3.5 better-auth: specifier: 'catalog:' - version: 1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5) + version: 1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5) chrono-node: specifier: ^2.9.0 version: 2.9.0 @@ -426,7 +441,7 @@ importers: version: 7946.0.16 better-auth: specifier: 'catalog:' - version: 1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5) + version: 1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5) decimal.js: specifier: ^10.6.0 version: 10.6.0 @@ -727,6 +742,15 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@anthropic-ai/sdk@0.78.0': + resolution: {integrity: sha512-PzQhR715td/m1UaaN5hHXjYB8Gl2lF9UVhrrGrZeysiF6Rb74Wc9GCB8hzLdzmQtBd1qe89F9OptgB9Za1Ib5w==} + hasBin: true + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + zod: + optional: true + '@azure-rest/core-client@2.6.0': resolution: {integrity: sha512-iuFKDm8XPzNxPfRjhyU5/xKZmcRDzSuEghXDHHk4MjBV/wFL34GmYVBZnn9wmuoLBeS1qAw9ceMdaeJBPcB1QQ==} engines: {node: '>=20.0.0'} @@ -1537,6 +1561,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==} @@ -2858,6 +2885,10 @@ packages: '@modelcontextprotocol/sdk': optional: true + '@google/generative-ai@0.24.1': + resolution: {integrity: sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==} + engines: {node: '>=18.0.0'} + '@grpc/grpc-js@1.14.3': resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} engines: {node: '>=12.10.0'} @@ -3217,6 +3248,53 @@ packages: peerDependencies: tslib: '2' + '@langchain/core@1.1.42': + resolution: {integrity: sha512-d0tN96BrwPMryYyWR9VfyAntSivn7EQrZCe5Kpxum93tcjTXbKKmKvItFec8AluQt88iTcmAJrahUZUNfzGwTA==} + engines: {node: '>=20'} + + '@langchain/google-genai@2.1.29': + resolution: {integrity: sha512-x+K4GuzXpF9sZFPj+kKJ47WSX4+LOqRo9qwvtmqCBhx9KADcnMrhP2O+Q/58IN0EHv8GoksgiKg2/GmyzkhEfw==} + engines: {node: '>=20'} + peerDependencies: + '@langchain/core': ^1.1.42 + + '@langchain/langgraph-checkpoint@1.0.1': + resolution: {integrity: sha512-HM0cJLRpIsSlWBQ/xuDC67l52SqZ62Bh2Y61DX+Xorqwoh5e1KxYvfCD7GnSTbWWhjBOutvnR0vPhu4orFkZfw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': ^1.0.1 + + '@langchain/langgraph-sdk@1.8.10': + resolution: {integrity: sha512-wrB3rkRw5KAmsqezwvKP3midT4qJrV6Hj9XJMYo+cbvXC4HYpSAmyY/VriSyeTFRbLG/OP/pY2Yz+9Z54nSaXQ==} + peerDependencies: + '@langchain/core': ^1.1.16 + react: ^18 || ^19 + react-dom: ^18 || ^19 + svelte: ^4.0.0 || ^5.0.0 + vue: ^3.0.0 + peerDependenciesMeta: + '@langchain/core': + optional: true + react: + optional: true + react-dom: + optional: true + svelte: + optional: true + vue: + optional: true + + '@langchain/langgraph@1.2.9': + resolution: {integrity: sha512-3c7BtGycHC2v9p6w/Hv8L7kEl1YnZYOQTDJtmAp3knk6JOedO7d2bYP3y0SRyhv5orUEGf/KGvx8ZsB/ideP7g==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': ^1.1.40 + zod: ^3.25.32 || ^4.2.0 + zod-to-json-schema: ^3.x + peerDependenciesMeta: + zod-to-json-schema: + optional: true + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -3901,18 +3979,46 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@posthog/ai@7.17.2': + resolution: {integrity: sha512-Rj9g/dv5DYWpkC5uL+MwWz+uvVSTEWi69GimUNsZJ5JKbi/arWIPE1xpFCIh8Lj0apXONgL+F0t7LKY6SIrNyA==} + 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.27.7': resolution: {integrity: sha512-6rzOZajUkhuezgPeF+ReMMly0D9oiwIZtMQrsJtZcS/mwi5OtvuYgxeaohgP9PKOhkK1c7cvGskX0Y2YUtBYCw==} '@posthog/core@1.27.9': resolution: {integrity: sha512-7FFWWYWvRFxQqDXYzv8klCjk0Pox1IpuPr61eeOCBsKkmt6xvvHwH0jc3ObvwDXZj2NSAWg+V9N2E2F1ul2CRQ==} + '@posthog/core@1.28.0': + resolution: {integrity: sha512-753giUMWuk602UtS101tDZuNcwiKkr+3UEhLgfOwHAk2W32n53knOxAjyWT0JwMq5/+0uSQ2y4uaZXQAxwvBSw==} + '@posthog/types@1.372.3': resolution: {integrity: sha512-4mkXC9AhsquJnvogWtWsCi+ReODj/jbK0d3fkwCNLLTOpaiAF125FJ6OJyRFax2u+dEKXAPA/dCTGx1S2WF0nw==} '@posthog/types@1.372.5': resolution: {integrity: sha512-6sYOISiHjfr50FNlFcd8Zw/zCDJzxRCdC7aZzwTCvJABEOLWf41kcsiozi2c3q1cNXYL018X7DAGkUukrNLVIw==} + '@posthog/types@1.372.6': + resolution: {integrity: sha512-sqI36LBvuo8xcYsXIlVa0q3IXJJjqtatM2LrXlyOM7kgHrldBwS4ldzaTXrTdpe/TiIl1b4ZHxtSHMzPig+DnQ==} + '@prisma/instrumentation@7.6.0': resolution: {integrity: sha512-ZPW2gRiwpPzEfgeZgaekhqXrbW+Y2RJKHVqUmlhZhKzRNCcvR6DykzylDrynpArKKRQtLxoZy36fK7U0p3pdgQ==} peerDependencies: @@ -6322,6 +6428,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -7304,6 +7414,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} @@ -9007,6 +9121,9 @@ packages: 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==} @@ -9044,6 +9161,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==} @@ -9148,6 +9269,32 @@ packages: resolution: {integrity: sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww==} engines: {node: '>=20.0.0'} + langchain@1.3.5: + resolution: {integrity: sha512-QSB8TEo6G1tWupgNt1Osm8ylLLoOMq1lLw5NeijnIwRPI5BqdBjUn4/U8usbjEJJcQnbXSK2qTKgTx7zvblnBw==} + engines: {node: '>=20'} + peerDependencies: + '@langchain/core': ^1.1.42 + + langsmith@0.6.0: + resolution: {integrity: sha512-GGaj5IMRfLv2HXXFzGk9diISMYLTpSTh6fzCZGKxWYW/NqEztIFtnXLq6G/RVhzFRmCykLap1fuC67LVKoQLcg==} + peerDependencies: + '@opentelemetry/api': '*' + '@opentelemetry/exporter-trace-otlp-proto': '*' + '@opentelemetry/sdk-trace-base': '*' + openai: '*' + ws: '>=7' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/exporter-trace-otlp-proto': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + openai: + optional: true + ws: + optional: true + latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -9825,6 +9972,10 @@ packages: murmurhash-js@1.0.0: resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + mysql2@3.20.0: resolution: {integrity: sha512-eCLUs7BNbgA6nf/MZXsaBO1SfGs0LtLVrJD3WeWq+jPLDWkSufTD+aGMwykfUVPdZnblaUK1a8G/P63cl9FkKg==} engines: {node: '>= 8.0'} @@ -10048,6 +10199,18 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + openai@6.35.0: + resolution: {integrity: sha512-L/skwIGnt5xQZHb0UfTu9uAUKbis3ehKypOuJKi20QvG7UStV6C8IC3myGYHcdiF4kms/bAvOJ9UqqNWqi8x/Q==} + 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 @@ -10115,6 +10278,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'} @@ -10123,10 +10290,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'} @@ -12127,6 +12302,9 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-algebra@2.0.0: + resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} + ts-morph@27.0.2: resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} @@ -12449,10 +12627,19 @@ 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.0: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true + uuid@13.0.1: + resolution: {integrity: sha512-9ezox2roIft6ExBVTVqibSd5dc5/47Sw/uY6b4SjQUT2TzQ0tltNquWA46y4xPQmdZYqvnio22SgWd41M86+jw==} + 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). @@ -13055,6 +13242,12 @@ snapshots: '@alloc/quick-lru@5.2.0': {} + '@anthropic-ai/sdk@0.78.0(zod@4.3.6)': + dependencies: + json-schema-to-ts: 3.1.1 + optionalDependencies: + zod: 4.3.6 + '@azure-rest/core-client@2.6.0': dependencies: '@azure/abort-controller': 2.1.2 @@ -14080,6 +14273,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 @@ -15753,38 +15948,38 @@ 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.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + '@google-cloud/opentelemetry-cloud-monitoring-exporter@0.21.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': dependencies: - '@google-cloud/opentelemetry-resource-util': 3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@google-cloud/opentelemetry-resource-util': 3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@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.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) google-auth-library: 9.15.1(encoding@0.1.13) googleapis: 137.1.0(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color - '@google-cloud/opentelemetry-cloud-trace-exporter@3.0.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@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.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': dependencies: - '@google-cloud/opentelemetry-resource-util': 3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@google-cloud/opentelemetry-resource-util': 3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) '@grpc/grpc-js': 1.14.3 '@grpc/proto-loader': 0.8.0 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.0) google-auth-library: 9.15.1(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color - '@google-cloud/opentelemetry-resource-util@3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + '@google-cloud/opentelemetry-resource-util@3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': dependencies: - '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 gcp-metadata: 6.1.1(encoding@0.1.13) transitivePeerDependencies: @@ -15823,13 +16018,13 @@ snapshots: - encoding - supports-color - '@google/adk@1.1.0(@grpc/grpc-js@1.14.3)(@mikro-orm/mariadb@6.6.11(@mikro-orm/core@6.6.13)(pg@8.20.0))(@mikro-orm/mssql@6.6.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.11(@mikro-orm/core@6.6.13)(@types/node@25.6.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.1))(encoding@0.1.13)': + '@google/adk@1.1.0(@cfworker/json-schema@4.1.1)(@grpc/grpc-js@1.14.3)(@mikro-orm/mariadb@6.6.11(@mikro-orm/core@6.6.13)(pg@8.20.0))(@mikro-orm/mssql@6.6.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.11(@mikro-orm/core@6.6.13)(@types/node@25.6.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.7.0(@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.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.2.0(@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.0(@opentelemetry/api@1.9.1))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@google-cloud/opentelemetry-cloud-monitoring-exporter': 0.21.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.2.0(@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.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) '@google-cloud/storage': 7.19.0(encoding@0.1.13) - '@google/genai': 1.50.1(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)) + '@google/genai': 1.50.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)) '@mikro-orm/core': 6.6.13 '@mikro-orm/mariadb': 6.6.11(@mikro-orm/core@6.6.13)(pg@8.20.0) '@mikro-orm/mssql': 6.6.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0) @@ -15837,17 +16032,17 @@ snapshots: '@mikro-orm/postgresql': 6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5) '@mikro-orm/reflection': 6.6.13(@mikro-orm/core@6.6.13) '@mikro-orm/sqlite': 6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0) - '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6) '@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.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 2.6.1(@opentelemetry/api@1.9.0) express: 4.22.1 google-auth-library: 10.6.2 @@ -15867,19 +16062,21 @@ snapshots: - supports-color - utf-8-validate - '@google/genai@1.50.1(@modelcontextprotocol/sdk@1.29.0(zod@4.3.6))': + '@google/genai@1.50.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))': dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 protobufjs: 7.5.6 ws: 8.20.0 optionalDependencies: - '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + '@google/generative-ai@0.24.1': {} + '@grpc/grpc-js@1.14.3': dependencies: '@grpc/proto-loader': 0.8.0 @@ -16191,6 +16388,62 @@ snapshots: '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) tslib: 2.8.1 + '@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)': + dependencies: + '@cfworker/json-schema': 4.1.1 + '@standard-schema/spec': 1.1.0 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.21 + langsmith: 0.6.0(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + mustache: 4.2.0 + p-queue: 6.6.2 + zod: 4.3.6 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - ws + + '@langchain/google-genai@2.1.29(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))': + dependencies: + '@google/generative-ai': 0.24.1 + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + + '@langchain/langgraph-checkpoint@1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))': + dependencies: + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + uuid: 10.0.0 + + '@langchain/langgraph-sdk@1.8.10(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@types/json-schema': 7.0.15 + p-queue: 9.2.0 + p-retry: 7.1.1 + uuid: 13.0.1 + optionalDependencies: + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + '@langchain/langgraph@1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6)': + dependencies: + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) + '@langchain/langgraph-sdk': 1.8.10(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@standard-schema/spec': 1.1.0 + uuid: 10.0.0 + zod: 4.3.6 + optionalDependencies: + zod-to-json-schema: 3.25.2(zod@4.3.6) + transitivePeerDependencies: + - react + - react-dom + - svelte + - vue + '@leichtgewicht/ip-codec@2.0.5': {} '@lucide/lab@0.1.2': {} @@ -16495,7 +16748,7 @@ snapshots: '@mjackson/node-fetch-server@0.2.0': {} - '@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)': + '@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.15) ajv: 8.20.0 @@ -16514,6 +16767,8 @@ snapshots: raw-body: 3.0.2 zod: 4.3.6 zod-to-json-schema: 3.25.2(zod@4.3.6) + optionalDependencies: + '@cfworker/json-schema': 4.1.1 transitivePeerDependencies: - supports-color @@ -17030,7 +17285,7 @@ snapshots: '@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.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 '@opentelemetry/resources@2.6.1(@opentelemetry/api@1.9.0)': @@ -17086,12 +17341,18 @@ snapshots: '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.1) optional: true - '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.1)': + '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0)': dependencies: - '@opentelemetry/api': 1.9.1 + '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@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-trace-base@2.1.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -17121,10 +17382,17 @@ snapshots: '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 + '@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 @@ -17250,6 +17518,34 @@ snapshots: '@polka/url@1.0.0-next.29': {} + '@posthog/ai@7.17.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(posthog-node@5.31.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6))': + dependencies: + '@anthropic-ai/sdk': 0.78.0(zod@4.3.6) + '@google/genai': 1.50.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)) + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@posthog/core': 1.28.0 + langchain: 1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) + openai: 6.35.0(ws@8.20.0)(zod@4.3.6) + posthog-node: 5.31.0 + uuid: 11.1.0 + zod: 4.3.6 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/exporter-trace-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.0) + 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.27.7': dependencies: '@posthog/types': 1.372.3 @@ -17258,10 +17554,16 @@ snapshots: dependencies: '@posthog/types': 1.372.5 + '@posthog/core@1.28.0': + dependencies: + '@posthog/types': 1.372.6 + '@posthog/types@1.372.3': {} '@posthog/types@1.372.5': {} + '@posthog/types@1.372.6': {} + '@prisma/instrumentation@7.6.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -19553,7 +19855,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@4.1.5': dependencies: @@ -19812,6 +20114,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} ansis@4.2.0: {} @@ -20001,7 +20305,7 @@ snapshots: batch@0.6.1: {} - better-auth@1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5): + better-auth@1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5): dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7)) @@ -20827,6 +21131,8 @@ snapshots: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + decimal.js-light@2.5.1: {} decimal.js@10.6.0: {} @@ -22764,6 +23070,10 @@ snapshots: 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: {} @@ -22791,6 +23101,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: {} @@ -22910,6 +23225,34 @@ snapshots: kysely@0.28.16: {} + langchain@1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)): + dependencies: + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/langgraph': 1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6) + '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) + langsmith: 0.6.0(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + zod: 4.3.6 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - react + - react-dom + - svelte + - vue + - ws + - zod-to-json-schema + + langsmith@0.6.0(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0): + dependencies: + p-queue: 6.6.2 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.0) + openai: 6.35.0(ws@8.20.0)(zod@4.3.6) + ws: 8.20.0 + latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -23897,6 +24240,8 @@ snapshots: murmurhash-js@1.0.0: {} + mustache@4.2.0: {} + mysql2@3.20.0(@types/node@25.6.0): dependencies: '@types/node': 25.6.0 @@ -24132,6 +24477,11 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + openai@6.35.0(ws@8.20.0)(zod@4.3.6): + optionalDependencies: + ws: 8.20.0 + zod: 4.3.6 + opener@1.5.2: {} ora@8.2.0: @@ -24199,6 +24549,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 @@ -24210,10 +24565,16 @@ snapshots: is-network-error: 1.3.1 retry: 0.13.1 + p-retry@7.1.1: + dependencies: + is-network-error: 1.3.1 + 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: @@ -26561,6 +26922,8 @@ snapshots: trough@2.2.0: {} + ts-algebra@2.0.0: {} + ts-morph@27.0.2: dependencies: '@ts-morph/common': 0.28.1 @@ -26916,8 +27279,12 @@ snapshots: utils-merge@1.0.1: {} + uuid@10.0.0: {} + uuid@11.1.0: {} + uuid@13.0.1: {} + uuid@8.3.2: {} uuid@9.0.1: {} @@ -27045,6 +27412,35 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 + vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) + '@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 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.1.1 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@types/node': 25.6.0 + '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) + transitivePeerDependencies: + - msw + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.5 From e1a89d18833b8b81899ceec9742e1e386b6e621d Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Fri, 1 May 2026 17:06:55 +0200 Subject: [PATCH 02/17] feat: add langsmith tracing --- fdm-agents/.env.example | 18 ++++++++++++++++++ fdm-agents/src/runners/one-shot.ts | 4 ++++ 2 files changed, 22 insertions(+) create mode 100644 fdm-agents/.env.example diff --git a/fdm-agents/.env.example b/fdm-agents/.env.example new file mode 100644 index 000000000..0c8969a7c --- /dev/null +++ b/fdm-agents/.env.example @@ -0,0 +1,18 @@ +# ------------------------------------- +# 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) +LANGCHAIN_TRACING_V2=false +LANGCHAIN_API_KEY= +LANGCHAIN_PROJECT=fdm-agents diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index 61ed82496..72514fb54 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -88,6 +88,10 @@ export async function runOneShotAgent( configurable: context, streamMode: ["updates", "custom"], signal: abortController.signal, + runName: "gerrit-one-shot", + metadata: { + b_id_farm: context.b_id_farm, + }, ...(callbacks ? { callbacks } : {}), }, )) as AsyncIterable From f54080725713d824cec22dbcef8b760784b9aa1f Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Mon, 4 May 2026 10:24:36 +0200 Subject: [PATCH 03/17] fix: lockfile --- pnpm-lock.yaml | 1880 +++++------------------------------------------- 1 file changed, 162 insertions(+), 1718 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2bd864c8d..8c3191b73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,21 +61,15 @@ importers: fdm-agents: dependencies: - '@google/adk': - specifier: ^1.1.0 - version: 1.1.0(@cfworker/json-schema@4.1.1)(@grpc/grpc-js@1.14.3)(@mikro-orm/mariadb@6.6.11(@mikro-orm/core@6.6.13)(pg@8.20.0))(@mikro-orm/mssql@6.6.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.11(@mikro-orm/core@6.6.13)(@types/node@25.6.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@google/genai': - specifier: ^1.50.1 - version: 1.50.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)) '@langchain/core': specifier: ^1.1.42 - version: 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + version: 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) '@langchain/google-genai': specifier: ^2.1.29 - version: 2.1.29(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) + version: 2.1.29(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) '@langchain/langgraph': specifier: ^1.2.9 - version: 1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6) + version: 1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6) '@nmi-agro/fdm-calculator': specifier: workspace:^ version: link:../fdm-calculator @@ -87,10 +81,10 @@ importers: version: link:../fdm-data '@posthog/ai': specifier: ^7.17.2 - version: 7.17.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(posthog-node@5.31.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) + version: 7.17.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(@opentelemetry/api@1.9.1)(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(posthog-node@5.31.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) langchain: specifier: ^1.3.5 - version: 1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) + version: 1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) posthog-node: specifier: ^5.30.8 version: 5.31.0 @@ -112,7 +106,7 @@ importers: version: 6.0.3 vitest: specifier: 'catalog:' - version: 4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) fdm-app: dependencies: @@ -202,7 +196,7 @@ importers: version: 7.3.5 better-auth: specifier: 'catalog:' - version: 1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5) + version: 1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5) chrono-node: specifier: ^2.9.0 version: 2.9.0 @@ -441,7 +435,7 @@ importers: version: 7946.0.16 better-auth: specifier: 'catalog:' - version: 1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5) + version: 1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5) decimal.js: specifier: ^10.6.0 version: 10.6.0 @@ -650,21 +644,6 @@ importers: 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.17.0': resolution: {integrity: sha512-nuhHZdTiCtRzJEe9VSNzyqE9cOQMt01UWBzymFnjbgwrxxZpbGHQde6Oa/y9zyspTCjbUtb7Q5HQek1CLiLyeg==} engines: {node: '>= 14.0.0'} @@ -751,77 +730,6 @@ packages: zod: optional: true - '@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'} - 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.8.0': - resolution: {integrity: sha512-X7IZV77bN56l7sbLjkcbQJX1t3U4tgxqztDr/XFbUcUfKk+z2FavcLgKP+OYUNj0wl/pEEtV9lldW9siY8BuHQ==} - engines: {node: '>=0.8.0'} - - '@azure/msal-common@16.5.1': - resolution: {integrity: sha512-WS9w9SfI8SEYO7mTnxGeZ3UwQfhAVYCWglYF2/7GNx3ioHiAs2gPkl9eSwVs8cPrmiGh+zi9ai/OOKoq4cyzDw==} - engines: {node: '>=0.8.0'} - - '@azure/msal-node@5.1.4': - resolution: {integrity: sha512-G4LXGGggok1QC48uKu64/SV2DPRDlddmV8EieK8pflsNYMj9/Zz+Y9OHoEBhT15h+zpdwXXLYA/7PJCR/yZ8aw==} - engines: {node: '>=20'} - '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -1629,10 +1537,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'} @@ -1933,9 +1837,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==} @@ -2822,60 +2723,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.50.1': resolution: {integrity: sha512-YbkX7H9+1Pt8wOt7DDREy8XSoiL6fRDzZQRyaVBarFf8MR3zHGqVdvM4cLbDXqPhxqvegZShgfxb8kw9C7YhAQ==} engines: {node: '>=20.0.0'} @@ -2889,15 +2736,6 @@ packages: resolution: {integrity: sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==} engines: {node: '>=18.0.0'} - '@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.0': - resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} - engines: {node: '>=6'} - hasBin: true - '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -3110,24 +2948,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'} @@ -3380,62 +3200,6 @@ packages: '@types/react': '>=16' react: '>=16' - '@mikro-orm/core@6.6.13': - resolution: {integrity: sha512-Zf00ZCUV1/fTCE60jJUDDbFb6dDYaojUWr0yoavNYJaFX+qoLdgKSj3tX6j2v//cGKfb/sLqs72FEEtSwvhviA==} - engines: {node: '>= 18.12.0'} - - '@mikro-orm/knex@6.6.11': - resolution: {integrity: sha512-MUxqw+3COpcM06DC3ufW4Aov5RZWpW1Rv/kMfJkHQX+bO81jPdinXkRtx1l8EVWFRiLJEB+3MNhptFQRlmJNXA==} - 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.11': - resolution: {integrity: sha512-TPUFGJHGPGiQC2LE263iyyBbaG1nwSsa6UVQ8ma2QFxLRt62XqGFEw7XJ1uUXXoqZn/4RW8jrIAWFgbrmfnx3g==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/mssql@6.6.11': - resolution: {integrity: sha512-LjMiObzrwKJw9Pt/VUgAgsNU3j/FDZjW8wxvD8522rPdXnNyHtNBDAQQhdWt/e+yJr4bZh7HhoQYekH8Z9G6Yg==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/mysql@6.6.11': - resolution: {integrity: sha512-SPtBLl82Qq+pKx/d5rF276LosKz6JO7D8vTaeudadk6/zlXjpE3SciGmyvt5/+htzts4k348F8zQMCf297NdzQ==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/postgresql@6.6.11': - resolution: {integrity: sha512-YIQroXsAPXRJc3ruk8M5ynbQEQtGUO0Swjb/MMtjn5o9qypqmPBoq4ANCwUY9P2jVlmheQM1O5VK/1OBm7/EVg==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/reflection@6.6.13': - resolution: {integrity: sha512-pH4jsGTRQ/jyC8WFhFtqvGWXUyNUqDUbPiL5DJU9lRKQH0AEeH15cYW1ZbfY85ECJSCAeR9qJsJo6gfFcl09vA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@mikro-orm/core': ^6.0.0 - - '@mikro-orm/sqlite@6.6.11': - resolution: {integrity: sha512-WCO9w6JERp7qMRJKXoNF1ELrQ6PrMBU24EwDdhkY8LH76uqDM4jtfSbIcBDafORiZG/D+Rs8JshS1qEQEX9x7w==} - 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==} @@ -3559,9 +3323,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'} @@ -3602,20 +3363,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.6.1': - resolution: {integrity: sha512-XHzhwRNkBpeP8Fs/qjGrAf9r9PRv67wkJQ/7ZPaBQQ68DYlTBBx5MF9LvPx7mhuXcDessKK2b+DcxqwpgkcivQ==} - 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} @@ -3640,24 +3391,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} @@ -3830,12 +3569,6 @@ packages: resolution: {integrity: sha512-VCghU1JYs/4gP6Gqf/xro9MEsZ7LrMv2uONVsaESKL38ZOB9BqnI98FfS23wjMnHlpuE+TTaWSoAVNpTwYXzjw==} engines: {node: ^18.19.0 || >=20.6.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} @@ -3848,12 +3581,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.6.1': - resolution: {integrity: sha512-lID/vxSuKWXM55XhAKNoYXu9Cutoq5hFdkbTdI/zDKQktXzcWBVhNsOkiZFTMU9UtEWuGRNe0HUgmsFldIdxVA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.7.0': resolution: {integrity: sha512-K+oi0hNMv94EpZbnW3eyu2X6SGVpD3O5DhG2NIp65Hc7lhAj9brRXTAVzh3wB82+q3ThakEf7Zd7RsFUqcTc7A==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3896,24 +3623,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.6.1': - resolution: {integrity: sha512-r86ut4T1e8vNwB35CqCcKd45yzqH6/6Wzvpk2/cZB8PsPLlZFTvrh8yfOS3CYZYcUmAx4hHTZJ8AO8Dj8nrdhw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.7.0': resolution: {integrity: sha512-Yg9zEXJB50DLVLpsKPk7NmNqlPlS+OvqhJGh0A8oawIOTPOwlm4eXs9BMJV7L79lvEwI+dWtAj+YjTyddV336A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-node@2.6.1': - resolution: {integrity: sha512-Hh2i4FwHWRFhnO2Q/p6svMxy8MPsNCG0uuzUY3glqm0rwM0nQvbTO1dXSp9OqQoTKXcQzaz9q1f65fsurmOhNw==} - 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'} @@ -5434,9 +5149,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==} @@ -5832,13 +5544,6 @@ packages: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - - '@ts-morph/common@0.28.1': - resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} - '@turbo/darwin-64@2.9.6': resolution: {integrity: sha512-X/56SnVXIQZBLKwniGTwEQTGmtE5brSACnKMBWpY3YafuxVYefrC2acamfjgxP7BG5w3I+6jf0UrLoSzgPcSJg==} cpu: [x64] @@ -5923,9 +5628,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==} @@ -6064,9 +5766,6 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@24.12.2': - resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} - '@types/node@25.6.0': resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} @@ -6108,12 +5807,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==} @@ -6144,12 +5837,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==} @@ -6177,10 +5864,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.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -6299,10 +5982,6 @@ packages: 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==} @@ -6484,10 +6163,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'} @@ -6515,12 +6190,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==} @@ -6712,9 +6381,6 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - bl@6.1.6: - resolution: {integrity: sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==} - body-parser@1.20.4: resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -6776,9 +6442,6 @@ packages: 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'} @@ -6968,10 +6631,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'} @@ -6990,9 +6649,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==} @@ -7000,10 +6656,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==} @@ -7019,10 +6671,6 @@ packages: 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==} @@ -7368,9 +7016,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==} @@ -7587,10 +7232,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'} @@ -7711,9 +7352,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==} @@ -7762,9 +7400,6 @@ packages: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} 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'} @@ -7963,10 +7598,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==} @@ -8045,13 +7676,6 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-builder@1.1.5: - resolution: {integrity: sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==} - - fast-xml-parser@5.7.2: - resolution: {integrity: sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==} - hasBin: true - fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -8071,9 +7695,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'} @@ -8143,9 +7764,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'} @@ -8166,10 +7784,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'} @@ -8217,10 +7831,6 @@ packages: 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.4: resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} engines: {node: '>=14.14'} @@ -8267,18 +7877,10 @@ packages: 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'} @@ -8305,10 +7907,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.5.0: resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} @@ -8420,26 +8018,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'} @@ -8458,10 +8040,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'} @@ -8557,9 +8135,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==} @@ -8626,14 +8201,6 @@ packages: 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'} @@ -9115,9 +8682,6 @@ 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==} @@ -9138,10 +8702,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'} @@ -9194,11 +8754,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'} @@ -9262,9 +8817,6 @@ packages: tedious: optional: true - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - kysely@0.28.16: resolution: {integrity: sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww==} engines: {node: '>=20.0.0'} @@ -9419,12 +8971,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==} @@ -9472,10 +9018,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==} @@ -9493,9 +9035,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.5: resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} engines: {node: 20 || >=22} @@ -9537,10 +9076,6 @@ packages: 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'} @@ -9814,10 +9349,6 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - mikro-orm@6.6.13: - resolution: {integrity: sha512-o7HtpBllUIjWwBQB8sQ/0MBJ90vqBM4fzmb2IeRScgWVtZgpcqDOEscuOgfxMFfaaUfA14meNdE8mxsre8JjKg==} - engines: {node: '>= 18.12.0'} - mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} @@ -9847,11 +9378,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'} @@ -10003,9 +9529,6 @@ packages: 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'} @@ -10180,9 +9703,6 @@ packages: 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'} @@ -10364,9 +9884,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'} @@ -10375,10 +9892,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'} @@ -10905,10 +10418,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'} @@ -10917,18 +10426,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'} @@ -10998,10 +10499,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'} @@ -11308,10 +10805,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'} @@ -11485,10 +10978,6 @@ packages: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} - 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'} @@ -11542,10 +11031,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'} @@ -11936,9 +11421,6 @@ packages: 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'} @@ -11946,14 +11428,6 @@ packages: 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'} @@ -11962,9 +11436,6 @@ packages: 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==} @@ -11990,12 +11461,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'} @@ -12065,9 +11530,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@2.2.3: - resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==} - strtok3@10.3.5: resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} @@ -12078,9 +11540,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==} @@ -12179,14 +11638,6 @@ packages: 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'} @@ -12212,9 +11663,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'} @@ -12295,19 +11743,12 @@ 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-algebra@2.0.0: resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} - ts-morph@27.0.2: - resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} - tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} @@ -12346,10 +11787,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'} @@ -12461,9 +11898,6 @@ 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==} @@ -12585,9 +12019,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'} @@ -12645,11 +12076,6 @@ packages: 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@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - 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 - valibot@1.3.1: resolution: {integrity: sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==} peerDependencies: @@ -12952,14 +12378,6 @@ 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==} @@ -13043,10 +12461,6 @@ 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==} @@ -13058,14 +12472,6 @@ packages: 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'} @@ -13125,13 +12531,6 @@ packages: snapshots: - '@a2a-js/sdk@0.3.13(@grpc/grpc-js@1.14.3)(express@4.22.1)': - dependencies: - uuid: 11.1.0 - optionalDependencies: - '@grpc/grpc-js': 1.14.3 - express: 4.22.1 - '@algolia/abtesting@1.17.0': dependencies: '@algolia/client-common': 5.51.0 @@ -13248,150 +12647,6 @@ snapshots: optionalDependencies: zod: 4.3.6 - '@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': - 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.8.0 - '@azure/msal-node': 5.1.4 - 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.8.0': - dependencies: - '@azure/msal-common': 16.5.1 - - '@azure/msal-common@16.5.1': {} - - '@azure/msal-node@5.1.4': - dependencies: - '@azure/msal-common': 16.5.1 - jsonwebtoken: 9.0.3 - uuid: 8.3.2 - '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -14436,8 +13691,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) @@ -14747,12 +14000,6 @@ snapshots: dependencies: postcss: 8.5.12 - '@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': {} @@ -15948,120 +15195,6 @@ 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.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': - dependencies: - '@google-cloud/opentelemetry-resource-util': 3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@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.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) - google-auth-library: 9.15.1(encoding@0.1.13) - googleapis: 137.1.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@google-cloud/opentelemetry-cloud-trace-exporter@3.0.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': - dependencies: - '@google-cloud/opentelemetry-resource-util': 3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@grpc/grpc-js': 1.14.3 - '@grpc/proto-loader': 0.8.0 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.0) - google-auth-library: 9.15.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@google-cloud/opentelemetry-resource-util@3.0.0(@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': - dependencies: - '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - gcp-metadata: 6.1.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@google-cloud/paginator@5.0.2': - dependencies: - arrify: 2.0.1 - extend: 3.0.2 - - '@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.2 - 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(@cfworker/json-schema@4.1.1)(@grpc/grpc-js@1.14.3)(@mikro-orm/mariadb@6.6.11(@mikro-orm/core@6.6.13)(pg@8.20.0))(@mikro-orm/mssql@6.6.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.11(@mikro-orm/core@6.6.13)(@types/node@25.6.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.7.0(@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.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.2.0(@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.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) - '@google-cloud/storage': 7.19.0(encoding@0.1.13) - '@google/genai': 1.50.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)) - '@mikro-orm/core': 6.6.13 - '@mikro-orm/mariadb': 6.6.11(@mikro-orm/core@6.6.13)(pg@8.20.0) - '@mikro-orm/mssql': 6.6.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0) - '@mikro-orm/mysql': 6.6.11(@mikro-orm/core@6.6.13)(@types/node@25.6.0)(mariadb@3.4.5)(pg@8.20.0) - '@mikro-orm/postgresql': 6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5) - '@mikro-orm/reflection': 6.6.13(@mikro-orm/core@6.6.13) - '@mikro-orm/sqlite': 6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0) - '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6) - '@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.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.6.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.3.6 - zod-to-json-schema: 3.25.2(zod@4.3.6) - transitivePeerDependencies: - - '@bufbuild/protobuf' - - '@cfworker/json-schema' - - '@grpc/grpc-js' - - '@opentelemetry/core' - - bufferutil - - encoding - - supports-color - - utf-8-validate - '@google/genai@1.50.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))': dependencies: google-auth-library: 10.6.2 @@ -16077,18 +15210,6 @@ snapshots: '@google/generative-ai@0.24.1': {} - '@grpc/grpc-js@1.14.3': - dependencies: - '@grpc/proto-loader': 0.8.0 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.8.0': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.5.6 - yargs: 17.7.2 - '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': @@ -16098,6 +15219,7 @@ snapshots: '@hono/node-server@1.19.14(hono@4.12.15)': dependencies: hono: 4.12.15 + optional: true '@hookform/resolvers@5.2.2(react-hook-form@7.74.0(react@19.2.5))': dependencies: @@ -16249,18 +15371,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 @@ -16388,7 +15498,7 @@ snapshots: '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) tslib: 2.8.1 - '@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)': + '@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)': dependencies: '@cfworker/json-schema': 4.1.1 '@standard-schema/spec': 1.1.0 @@ -16396,7 +15506,7 @@ snapshots: camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.6.0(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + langsmith: 0.6.0(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) mustache: 4.2.0 p-queue: 6.6.2 zod: 4.3.6 @@ -16407,32 +15517,32 @@ snapshots: - openai - ws - '@langchain/google-genai@2.1.29(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))': + '@langchain/google-genai@2.1.29(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))': dependencies: '@google/generative-ai': 0.24.1 - '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) - '@langchain/langgraph-checkpoint@1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))': + '@langchain/langgraph-checkpoint@1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))': dependencies: - '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) uuid: 10.0.0 - '@langchain/langgraph-sdk@1.8.10(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@langchain/langgraph-sdk@1.8.10(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@types/json-schema': 7.0.15 p-queue: 9.2.0 p-retry: 7.1.1 uuid: 13.0.1 optionalDependencies: - '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - '@langchain/langgraph@1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6)': + '@langchain/langgraph@1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6)': dependencies: - '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) - '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) - '@langchain/langgraph-sdk': 1.8.10(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) + '@langchain/langgraph-sdk': 1.8.10(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@standard-schema/spec': 1.1.0 uuid: 10.0.0 zod: 4.3.6 @@ -16582,170 +15692,6 @@ snapshots: '@types/react': 19.2.14 react: 19.2.5 - '@mikro-orm/core@6.6.13': - 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.13 - reflect-metadata: 0.2.2 - - '@mikro-orm/knex@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.13 - fs-extra: 11.3.3 - knex: 3.2.8(mysql2@3.20.0(@types/node@25.6.0))(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.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0)(sqlite3@5.1.7)': - dependencies: - '@mikro-orm/core': 6.6.13 - fs-extra: 11.3.3 - knex: 3.2.8(mysql2@3.20.0(@types/node@25.6.0))(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.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0)(tedious@19.2.1(@azure/core-client@1.10.1))': - dependencies: - '@mikro-orm/core': 6.6.13 - fs-extra: 11.3.3 - knex: 3.2.8(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.11(@mikro-orm/core@6.6.13)(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.13 - '@mikro-orm/knex': 6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@25.6.0))(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.11(@azure/core-client@1.10.1)(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.13 - '@mikro-orm/knex': 6.6.11(@mikro-orm/core@6.6.13)(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.11(@mikro-orm/core@6.6.13)(@types/node@25.6.0)(mariadb@3.4.5)(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.13 - '@mikro-orm/knex': 6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0) - mysql2: 3.20.0(@types/node@25.6.0) - transitivePeerDependencies: - - '@types/node' - - better-sqlite3 - - libsql - - mariadb - - mysql - - pg - - pg-native - - pg-query-stream - - sqlite3 - - supports-color - - tedious - - '@mikro-orm/postgresql@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)': - dependencies: - '@mikro-orm/core': 6.6.13 - '@mikro-orm/knex': 6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@25.6.0))(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.13(@mikro-orm/core@6.6.13)': - dependencies: - '@mikro-orm/core': 6.6.13 - globby: 11.1.0 - ts-morph: 27.0.2 - - '@mikro-orm/sqlite@6.6.11(@mikro-orm/core@6.6.13)(mariadb@3.4.5)(pg@8.20.0)': - dependencies: - '@mikro-orm/core': 6.6.13 - '@mikro-orm/knex': 6.6.11(@mikro-orm/core@6.6.13)(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(@cfworker/json-schema@4.1.1)(zod@4.3.6)': @@ -16771,6 +15717,7 @@ snapshots: '@cfworker/json-schema': 4.1.1 transitivePeerDependencies: - supports-color + optional: true '@module-federation/error-codes@0.22.0': {} @@ -16857,8 +15804,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 @@ -16886,6 +15831,7 @@ snapshots: '@opentelemetry/api-logs@0.205.0': dependencies: '@opentelemetry/api': 1.9.1 + optional: true '@opentelemetry/api-logs@0.207.0': dependencies: @@ -16903,64 +15849,29 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/api@1.9.0': {} - '@opentelemetry/api@1.9.1': {} - '@opentelemetry/context-async-hooks@2.6.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.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/core@2.7.0(@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 @@ -16970,24 +15881,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 @@ -17198,12 +16091,6 @@ 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 @@ -17217,17 +16104,6 @@ snapshots: '@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.6 - '@opentelemetry/otlp-transformer@0.205.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -17253,22 +16129,6 @@ snapshots: '@opentelemetry/redis-common@0.38.3': {} - '@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.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.0(@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 @@ -17276,43 +16136,18 @@ snapshots: '@opentelemetry/semantic-conventions': 1.40.0 optional: true - '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - '@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.6.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - - '@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.7.0(@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 @@ -17328,12 +16163,6 @@ 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 @@ -17341,25 +16170,12 @@ snapshots: '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.1) optional: true - '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@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-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 @@ -17375,20 +16191,6 @@ snapshots: '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/sdk-trace-base@2.6.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - - '@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 @@ -17396,13 +16198,6 @@ snapshots: '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/sdk-trace-node@2.6.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.6.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions@1.40.0': {} '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.1)': @@ -17518,21 +16313,21 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@posthog/ai@7.17.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(posthog-node@5.31.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6))': + '@posthog/ai@7.17.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(@opentelemetry/api@1.9.1)(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(posthog-node@5.31.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6))': dependencies: '@anthropic-ai/sdk': 0.78.0(zod@4.3.6) '@google/genai': 1.50.1(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6)) - '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) '@posthog/core': 1.28.0 - langchain: 1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) + langchain: 1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) openai: 6.35.0(ws@8.20.0)(zod@4.3.6) posthog-node: 5.31.0 uuid: 11.1.0 zod: 4.3.6 optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/exporter-trace-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/exporter-trace-otlp-http': 0.205.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.1) transitivePeerDependencies: - '@modelcontextprotocol/sdk' - '@opentelemetry/exporter-trace-otlp-proto' @@ -19059,11 +17854,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': {} @@ -19387,14 +18177,6 @@ snapshots: '@tootallnate/once@1.1.2': optional: true - '@tootallnate/once@2.0.0': {} - - '@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.6': optional: true @@ -19534,8 +18316,6 @@ snapshots: dependencies: '@types/node': 25.6.0 - '@types/caseless@0.12.5': {} - '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -19682,10 +18462,6 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@24.12.2': - dependencies: - undici-types: 7.16.0 - '@types/node@25.6.0': dependencies: undici-types: 7.19.2 @@ -19741,17 +18517,6 @@ snapshots: dependencies: csstype: 3.2.3 - '@types/readable-stream@4.0.23': - dependencies: - '@types/node': 25.6.0 - - '@types/request@2.48.13': - dependencies: - '@types/caseless': 0.12.5 - '@types/node': 25.6.0 - '@types/tough-cookie': 4.0.5 - form-data: 2.5.5 - '@types/retry@0.12.0': {} '@types/retry@0.12.2': {} @@ -19791,10 +18556,6 @@ snapshots: dependencies: '@types/node': 25.6.0 - '@types/tough-cookie@4.0.5': {} - - '@types/triple-beam@1.3.5': {} - '@types/trusted-types@2.0.7': optional: true @@ -19820,14 +18581,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.0': {} '@vis.gl/react-mapbox@8.1.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': @@ -19855,7 +18608,7 @@ 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.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@4.1.5': dependencies: @@ -19987,10 +18740,6 @@ snapshots: 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: @@ -20002,6 +18751,7 @@ snapshots: dependencies: mime-types: 3.0.2 negotiator: 1.0.0 + optional: true acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: @@ -20167,8 +18917,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 @@ -20195,12 +18943,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: @@ -20221,7 +18963,8 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - aws-ssl-profiles@1.1.2: {} + aws-ssl-profiles@1.1.2: + optional: true axios@1.15.2: dependencies: @@ -20305,7 +19048,7 @@ snapshots: batch@0.6.1: {} - better-auth@1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5): + better-auth@1.6.9(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7))(mysql2@3.20.0(@types/node@25.6.0))(next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.5): dependencies: '@better-auth/core': 1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.28.16)(nanostores@1.3.0) '@better-auth/drizzle-adapter': 1.6.9(@better-auth/core@1.6.9(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.28.16)(nanostores@1.3.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.3)(@opentelemetry/api@1.9.1)(@types/pg@8.15.6)(knex@3.2.8(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(sqlite3@5.1.7))(kysely@0.28.16)(mysql2@3.20.0(@types/node@25.6.0))(pg@8.20.0)(postgres@3.4.9)(sqlite3@5.1.7)) @@ -20363,6 +19106,7 @@ snapshots: bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 + optional: true birpc@4.0.0: {} @@ -20371,13 +19115,7 @@ snapshots: 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 + optional: true body-parser@1.20.4: dependencies: @@ -20409,6 +19147,7 @@ snapshots: type-is: 2.0.1 transitivePeerDependencies: - supports-color + optional: true bonjour-service@1.3.0: dependencies: @@ -20488,11 +19227,7 @@ snapshots: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + optional: true bundle-name@4.1.0: dependencies: @@ -20659,9 +19394,11 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: {} + chownr@1.1.4: + optional: true - chownr@2.0.0: {} + chownr@2.0.0: + optional: true chrome-trace-event@1.0.4: {} @@ -20699,12 +19436,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 @@ -20727,18 +19458,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: {} @@ -20750,14 +19475,10 @@ snapshots: 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.19: + optional: true colorette@2.0.20: {} @@ -20843,7 +19564,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 - content-disposition@1.1.0: {} + content-disposition@1.1.0: + optional: true content-type@1.0.5: {} @@ -20851,7 +19573,8 @@ snapshots: cookie-signature@1.0.7: {} - cookie-signature@1.2.2: {} + cookie-signature@1.2.2: + optional: true cookie@0.7.2: {} @@ -21105,8 +19828,6 @@ snapshots: dataloader@1.4.0: {} - dataloader@2.2.3: {} - date-fns-jalali@4.1.0-0: {} date-fns@4.1.0: {} @@ -21126,6 +19847,7 @@ snapshots: debug@4.3.4: dependencies: ms: 2.1.2 + optional: true debug@4.4.3: dependencies: @@ -21183,7 +19905,8 @@ snapshots: delegates@1.0.0: optional: true - denque@2.1.0: {} + denque@2.1.0: + optional: true depd@1.1.2: {} @@ -21284,8 +20007,6 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.3.1: {} - dotenv@17.4.2: {} dotenv@8.6.0: {} @@ -21319,13 +20040,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: {} @@ -21363,8 +20077,6 @@ snapshots: empathic@2.0.0: {} - enabled@2.0.0: {} - encodeurl@2.0.0: {} encoding@0.1.13: @@ -21375,6 +20087,7 @@ snapshots: end-of-stream@1.4.5: dependencies: once: 1.4.0 + optional: true engine.io-parser@5.2.3: {} @@ -21650,7 +20363,8 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - esm@3.2.25: {} + esm@3.2.25: + optional: true esprima@4.0.1: {} @@ -21710,19 +20424,19 @@ snapshots: '@types/node': 25.6.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-parser@3.0.8: + optional: true eventsource@3.0.7: dependencies: eventsource-parser: 3.0.8 + optional: true execa@5.1.1: dependencies: @@ -21738,7 +20452,8 @@ snapshots: exit-hook@2.2.1: {} - expand-template@2.0.3: {} + expand-template@2.0.3: + optional: true expect-type@1.3.0: {} @@ -21746,6 +20461,7 @@ snapshots: dependencies: express: 5.2.1 ip-address: 10.1.0 + optional: true express@4.22.1: dependencies: @@ -21815,6 +20531,7 @@ snapshots: vary: 1.1.2 transitivePeerDependencies: - supports-color + optional: true exsolve@1.0.8: {} @@ -21845,17 +20562,6 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-builder@1.1.5: - dependencies: - path-expression-matcher: 1.5.0 - - fast-xml-parser@5.7.2: - dependencies: - '@nodable/entities': 2.1.0 - fast-xml-builder: 1.1.5 - path-expression-matcher: 1.5.0 - strnum: 2.2.3 - fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -21872,8 +20578,6 @@ snapshots: optionalDependencies: picomatch: 4.0.4 - fecha@4.2.3: {} - feed@4.2.2: dependencies: xml-js: 1.6.11 @@ -21906,7 +20610,8 @@ snapshots: transitivePeerDependencies: - supports-color - file-uri-to-path@1.0.0: {} + file-uri-to-path@1.0.0: + optional: true fill-range@7.1.1: dependencies: @@ -21934,6 +20639,7 @@ snapshots: statuses: 2.0.2 transitivePeerDependencies: - supports-color + optional: true find-cache-dir@4.0.0: dependencies: @@ -21967,8 +20673,6 @@ snapshots: optionalDependencies: ol: 10.9.0 - fn.name@1.1.0: {} - follow-redirects@1.16.0: {} fontkit@2.0.4: @@ -21989,15 +20693,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 @@ -22029,15 +20724,11 @@ snapshots: fresh@0.5.2: {} - fresh@2.0.0: {} - - fs-constants@1.0.0: {} + fresh@2.0.0: + optional: true - fs-extra@11.3.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 + fs-constants@1.0.0: + optional: true fs-extra@11.3.4: dependencies: @@ -22060,6 +20751,7 @@ snapshots: fs-minipass@2.1.0: dependencies: minipass: 3.3.6 + optional: true fs.realpath@1.0.0: optional: true @@ -22096,17 +20788,6 @@ snapshots: 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 @@ -22115,15 +20796,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 @@ -22135,6 +20807,7 @@ snapshots: generate-function@2.3.1: dependencies: is-property: 1.0.2 + optional: true generator-function@2.0.1: {} @@ -22164,8 +20837,6 @@ snapshots: xml-utils: 1.10.2 zstddec: 0.2.0 - get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} get-intrinsic@1.3.0: @@ -22185,7 +20856,8 @@ snapshots: get-own-enumerable-property-symbols@3.0.2: {} - get-package-type@0.1.0: {} + get-package-type@0.1.0: + optional: true get-port@5.1.1: {} @@ -22208,9 +20880,11 @@ snapshots: get-value@2.0.6: {} - getopts@2.3.0: {} + getopts@2.3.0: + optional: true - github-from-package@0.0.0: {} + github-from-package@0.0.0: + optional: true github-slugger@1.5.0: {} @@ -22296,42 +20970,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: @@ -22359,14 +20999,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 @@ -22513,7 +21145,8 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.12.15: {} + hono@4.12.15: + optional: true hookable@6.1.1: {} @@ -22530,8 +21163,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: @@ -22624,21 +21255,6 @@ snapshots: - supports-color optional: true - http-proxy-agent@5.0.0: - dependencies: - '@tootallnate/once': 2.0.0 - 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 @@ -22698,6 +21314,7 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true iconv-lite@0.7.2: dependencies: @@ -22778,13 +21395,15 @@ snapshots: internmap@2.0.3: {} - interpret@2.2.0: {} + interpret@2.2.0: + optional: true invariant@2.2.4: dependencies: loose-envify: 1.4.0 - ip-address@10.1.0: {} + ip-address@10.1.0: + optional: true ipaddr.js@1.9.1: {} @@ -22926,9 +21545,11 @@ snapshots: dependencies: isobject: 3.0.1 - is-promise@4.0.0: {} + is-promise@4.0.0: + optional: true - is-property@1.0.2: {} + is-property@1.0.2: + optional: true is-regex@1.2.1: dependencies: @@ -23066,8 +21687,6 @@ snapshots: jose@6.2.3: {} - js-md4@0.3.2: {} - js-md5@0.8.3: {} js-tiktoken@1.0.21: @@ -23087,8 +21706,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsep@1.4.0: {} - jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -23130,12 +21747,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: @@ -23198,39 +21809,16 @@ snapshots: sqlite3: 5.1.7 transitivePeerDependencies: - supports-color - - knex@3.2.8(pg@8.20.0)(tedious@19.2.1(@azure/core-client@1.10.1)): - 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: - pg: 8.20.0 - tedious: 19.2.1(@azure/core-client@1.10.1) - transitivePeerDependencies: - - supports-color - - kuler@2.0.0: {} + optional: true kysely@0.28.16: {} - langchain@1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)): + langchain@1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)): dependencies: - '@langchain/core': 1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) - '@langchain/langgraph': 1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6) - '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) - langsmith: 0.6.0(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/core': 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) + '@langchain/langgraph': 1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6) + '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) + langsmith: 0.6.0(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) zod: 4.3.6 transitivePeerDependencies: - '@opentelemetry/api' @@ -23244,12 +21832,12 @@ snapshots: - ws - zod-to-json-schema - langsmith@0.6.0(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.0))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0): + langsmith@0.6.0(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0): dependencies: p-queue: 6.6.2 optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.1) openai: 6.35.0(ws@8.20.0)(zod@4.3.6) ws: 8.20.0 @@ -23350,10 +21938,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: {} @@ -23390,15 +21974,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: {} @@ -23413,8 +21988,6 @@ snapshots: lowercase-keys@3.0.0: {} - lru-cache@10.4.3: {} - lru-cache@11.3.5: {} lru-cache@5.1.1: @@ -23426,7 +21999,8 @@ snapshots: yallist: 4.0.0 optional: true - lru.min@1.1.4: {} + lru.min@1.1.4: + optional: true lucide-react@1.11.0(react@19.2.5): dependencies: @@ -23493,14 +22067,6 @@ snapshots: quickselect: 3.0.0 tinyqueue: 3.0.0 - mariadb@3.4.5: - dependencies: - '@types/geojson': 7946.0.16 - '@types/node': 24.12.2 - denque: 2.1.0 - iconv-lite: 0.6.3 - lru-cache: 10.4.3 - markdown-extensions@2.0.0: {} markdown-it@14.1.1: @@ -23754,7 +22320,8 @@ snapshots: media-typer@0.3.0: {} - media-typer@1.1.0: {} + media-typer@1.1.0: + optional: true memfs@4.57.2(tslib@2.8.1): dependencies: @@ -23775,7 +22342,8 @@ snapshots: merge-descriptors@1.0.3: {} - merge-descriptors@2.0.0: {} + merge-descriptors@2.0.0: + optional: true merge-stream@2.0.0: {} @@ -24105,8 +22673,6 @@ snapshots: braces: 3.0.3 picomatch: 2.3.2 - mikro-orm@6.6.13: {} - mime-db@1.33.0: {} mime-db@1.52.0: {} @@ -24127,8 +22693,6 @@ snapshots: mime@1.6.0: {} - mime@3.0.0: {} - mimic-fn@2.1.0: {} mimic-function@5.0.1: {} @@ -24191,8 +22755,10 @@ snapshots: minipass@3.3.6: dependencies: yallist: 4.0.0 + optional: true - minipass@5.0.0: {} + minipass@5.0.0: + optional: true minipass@7.1.3: {} @@ -24200,10 +22766,13 @@ snapshots: dependencies: minipass: 3.3.6 yallist: 4.0.0 + optional: true - mkdirp-classic@0.5.3: {} + mkdirp-classic@0.5.3: + optional: true - mkdirp@1.0.4: {} + mkdirp@1.0.4: + optional: true module-details-from-path@1.0.4: {} @@ -24229,7 +22798,8 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: {} + ms@2.1.2: + optional: true ms@2.1.3: {} @@ -24253,10 +22823,12 @@ snapshots: lru.min: 1.1.4 named-placeholders: 1.1.6 sql-escaper: 1.3.3 + optional: true named-placeholders@1.1.6: dependencies: lru.min: 1.1.4 + optional: true nanoid@3.3.11: {} @@ -24264,15 +22836,15 @@ snapshots: nanostores@1.3.0: {} - napi-build-utils@2.0.0: {} - - native-duplexpair@1.0.0: {} + napi-build-utils@2.0.0: + optional: true negotiator@0.6.3: {} negotiator@0.6.4: {} - negotiator@1.0.0: {} + negotiator@1.0.0: + optional: true neo-async@2.6.2: {} @@ -24315,7 +22887,8 @@ snapshots: dependencies: semver: 7.7.4 - node-addon-api@7.1.1: {} + node-addon-api@7.1.1: + optional: true node-domexception@1.0.0: {} @@ -24451,10 +23024,7 @@ snapshots: once@1.4.0: dependencies: wrappy: 1.0.2 - - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 + optional: true onetime@5.1.2: dependencies: @@ -24649,14 +23219,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 @@ -24679,7 +23245,8 @@ snapshots: path-to-regexp@3.3.0: {} - path-to-regexp@8.4.2: {} + path-to-regexp@8.4.2: + optional: true path-type@4.0.0: {} @@ -24696,15 +23263,18 @@ snapshots: pg-cloudflare@1.3.0: optional: true - pg-connection-string@2.12.0: {} + pg-connection-string@2.12.0: + optional: true - pg-connection-string@2.6.2: {} + pg-connection-string@2.6.2: + optional: true pg-int8@1.0.1: {} pg-pool@3.13.0(pg@8.20.0): dependencies: pg: 8.20.0 + optional: true pg-protocol@1.13.0: {} @@ -24725,10 +23295,12 @@ snapshots: pgpass: 1.0.5 optionalDependencies: pg-cloudflare: 1.3.0 + optional: true pgpass@1.0.5: dependencies: split2: 4.2.0 + optional: true picocolors@1.1.1: {} @@ -24738,7 +23310,8 @@ snapshots: pify@4.0.1: {} - pkce-challenge@5.0.1: {} + pkce-challenge@5.0.1: + optional: true pkg-dir@7.0.0: dependencies: @@ -25223,20 +23796,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.3: @@ -25287,6 +23854,7 @@ snapshots: simple-get: 4.0.1 tar-fs: 2.1.4 tunnel-agent: 0.6.0 + optional: true prettier@2.8.8: {} @@ -25309,8 +23877,6 @@ snapshots: process-nextick-args@2.0.1: {} - process@0.11.10: {} - progress@2.0.3: {} proj4@2.20.8: @@ -25372,6 +23938,7 @@ snapshots: dependencies: end-of-stream: 1.4.5 once: 1.4.0 + optional: true punycode.js@2.3.1: {} @@ -25394,6 +23961,7 @@ snapshots: qs@6.15.1: dependencies: side-channel: 1.1.0 + optional: true quansync@0.2.11: {} @@ -25499,6 +24067,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.7.2 unpipe: 1.0.0 + optional: true rbush@4.0.1: dependencies: @@ -25710,14 +24279,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 @@ -25747,6 +24308,7 @@ snapshots: rechoir@0.8.0: dependencies: resolve: 1.22.12 + optional: true recma-build-jsx@1.0.0: dependencies: @@ -25950,8 +24512,6 @@ snapshots: repeat-string@1.6.1: {} - require-directory@2.1.1: {} - require-from-string@2.0.2: {} require-in-the-middle@8.0.1: @@ -25999,15 +24559,6 @@ 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 @@ -26103,6 +24654,7 @@ snapshots: path-to-regexp: 8.4.2 transitivePeerDependencies: - supports-color + optional: true rtlcss@4.3.0: dependencies: @@ -26228,6 +24780,7 @@ snapshots: statuses: 2.0.2 transitivePeerDependencies: - supports-color + optional: true serialize-javascript@6.0.2: dependencies: @@ -26272,6 +24825,7 @@ snapshots: send: 1.2.1 transitivePeerDependencies: - supports-color + optional: true set-blocking@2.0.0: optional: true @@ -26397,13 +24951,15 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: {} + simple-concat@1.0.1: + optional: true simple-get@4.0.1: dependencies: decompress-response: 6.0.0 once: 1.4.0 simple-concat: 1.0.1 + optional: true sirv@2.0.4: dependencies: @@ -26558,13 +25114,13 @@ snapshots: dependencies: extend-shallow: 3.0.2 - split2@4.2.0: {} + split2@4.2.0: + optional: true sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} - - sql-escaper@1.3.3: {} + sql-escaper@1.3.3: + optional: true sqlite3@5.1.7: dependencies: @@ -26577,10 +25133,7 @@ snapshots: transitivePeerDependencies: - bluebird - supports-color - - sqlstring-sqlite@0.1.1: {} - - sqlstring@2.3.3: {} + optional: true srcset@4.0.0: {} @@ -26589,8 +25142,6 @@ snapshots: minipass: 3.3.6 optional: true - stack-trace@0.0.10: {} - stackback@0.0.2: {} statuses@1.5.0: {} @@ -26608,12 +25159,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 @@ -26697,8 +25242,6 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@2.2.3: {} - strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -26709,8 +25252,6 @@ snapshots: stubborn-utils@1.0.2: {} - stubs@3.0.0: {} - style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -26791,6 +25332,7 @@ snapshots: mkdirp-classic: 0.5.3 pump: 3.0.4 tar-stream: 2.2.0 + optional: true tar-stream@2.2.0: dependencies: @@ -26799,6 +25341,7 @@ snapshots: fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 + optional: true tar@6.2.1: dependencies: @@ -26808,35 +25351,10 @@ snapshots: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 + optional: true - 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.0 - 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 + tarn@3.0.2: + optional: true term-size@2.2.1: {} @@ -26857,15 +25375,14 @@ 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: {} + tildify@2.0.0: + optional: true tiny-inflate@1.0.3: {} @@ -26918,17 +25435,10 @@ snapshots: trim-lines@3.0.1: {} - triple-beam@1.4.1: {} - trough@2.2.0: {} ts-algebra@2.0.0: {} - ts-morph@27.0.2: - dependencies: - '@ts-morph/common': 0.28.1 - code-block-writer: 13.0.3 - tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 @@ -26966,8 +25476,6 @@ snapshots: tslib@2.8.1: {} - tsqlstring@1.0.1: {} - tsx@4.21.0: dependencies: esbuild: 0.27.7 @@ -26982,6 +25490,7 @@ snapshots: tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 + optional: true turbo@2.9.6: optionalDependencies: @@ -27012,6 +25521,7 @@ snapshots: content-type: 1.0.5 media-typer: 1.1.0 mime-types: 3.0.2 + optional: true typed-array-buffer@1.0.3: dependencies: @@ -27106,8 +25616,6 @@ snapshots: '@quansync/fs': 1.0.0 quansync: 1.0.0 - undici-types@7.16.0: {} - undici-types@7.19.2: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -27250,8 +25758,6 @@ snapshots: optionalDependencies: file-loader: 6.2.0(webpack@5.106.2(@swc/core@1.15.32(@swc/helpers@0.5.21))) - url-template@2.0.8: {} - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.5): dependencies: react: 19.2.5 @@ -27287,8 +25793,6 @@ snapshots: uuid@8.3.2: {} - uuid@9.0.1: {} - valibot@1.3.1(typescript@6.0.3): optionalDependencies: typescript: 6.0.3 @@ -27412,35 +25916,6 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): - dependencies: - '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)) - '@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 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.1.1 - tinyglobby: 0.2.16 - tinyrainbow: 3.1.0 - vite: 8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3) - why-is-node-running: 2.3.0 - optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@types/node': 25.6.0 - '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) - transitivePeerDependencies: - - msw - vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(vite@8.0.10(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.5 @@ -27696,26 +26171,6 @@ snapshots: 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: @@ -27730,7 +26185,8 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.2.0 - wrappy@1.0.2: {} + wrappy@1.0.2: + optional: true write-file-atomic@3.0.3: dependencies: @@ -27768,26 +26224,13 @@ snapshots: xxhash-wasm@1.1.0: {} - y18n@5.0.8: {} - yallist@3.1.1: {} - yallist@4.0.0: {} + yallist@4.0.0: + optional: true yaml@2.8.3: {} - 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: {} @@ -27809,6 +26252,7 @@ snapshots: zod-to-json-schema@3.25.2(zod@4.3.6): dependencies: zod: 4.3.6 + optional: true zod@4.3.6: {} From ef704cc6b2c0eeb13fe362fe7f0d566dedf882c7 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Mon, 4 May 2026 14:15:03 +0200 Subject: [PATCH 04/17] fix: for too long response --- fdm-agents/src/models/default.ts | 1 + fdm-agents/src/runners/one-shot.test.ts | 22 +++++++++++++++++++++- fdm-agents/src/runners/one-shot.ts | 25 ++++++++++++++++++++----- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/fdm-agents/src/models/default.ts b/fdm-agents/src/models/default.ts index 74f7c1eaa..25fc9338e 100644 --- a/fdm-agents/src/models/default.ts +++ b/fdm-agents/src/models/default.ts @@ -10,5 +10,6 @@ export function createDefaultModel(apiKey?: string, model?: string) { 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 6826edccd..5c86936c7 100644 --- a/fdm-agents/src/runners/one-shot.test.ts +++ b/fdm-agents/src/runners/one-shot.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it, vi } from "vitest" import { AgentTimeoutError, runOneShotAgent } from "./one-shot" function makeAIMessage( - content: string, + content: string | Array>, opts: { tool_calls?: any[]; usage_metadata?: any } = {}, ): any { return { @@ -51,6 +51,26 @@ describe("runOneShotAgent", () => { vi.clearAllMocks() }) + it("should extract text from array content (e.g. Gemini thinking models)", async () => { + const agent = createMockAgent([ + [ + "updates", + { + agent: { + 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":[]}') + }) + it("should return the final response on success", async () => { const agent = createMockAgent([ [ diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index 72514fb54..8e7498104 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -18,6 +18,25 @@ export class AgentTimeoutError extends Error { } } +/** + * 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) +} + // Structural type for any LangGraph compiled agent graph interface StreamableAgentGraph { stream(input: unknown, options?: unknown): Promise> @@ -120,11 +139,7 @@ export async function runOneShotAgent( } } else { // No pending tool calls — this is the final response - const content = lastMsg.content - finalResponse = - typeof content === "string" - ? content - : JSON.stringify(content) + finalResponse = extractTextContent(lastMsg.content) } } } From 57794464d4419d7346905aaa420bb980b65f2851 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Mon, 4 May 2026 14:15:13 +0200 Subject: [PATCH 05/17] fix: add missing env --- fdm-app/.env.example | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/fdm-app/.env.example b/fdm-app/.env.example index 6127791a6..0846d85a4 100644 --- a/fdm-app/.env.example +++ b/fdm-app/.env.example @@ -128,4 +128,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) +LANGCHAIN_TRACING=true +LANGCHAIN_API_KEY= +LANGCHAIN_PROJECT= \ No newline at end of file From a588afabeb42d3cb9757c1c84a881e7195a7e9f9 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Wed, 13 May 2026 14:37:20 +0200 Subject: [PATCH 06/17] chore: update fdm-agents dependencies --- fdm-agents/package.json | 12 +- pnpm-lock.yaml | 3085 +++++++-------------------------------- pnpm-workspace.yaml | 6 +- 3 files changed, 529 insertions(+), 2574 deletions(-) diff --git a/fdm-agents/package.json b/fdm-agents/package.json index 85f39e7ab..32c9ec7dd 100644 --- a/fdm-agents/package.json +++ b/fdm-agents/package.json @@ -24,15 +24,15 @@ "test-coverage": "vitest run --coverage" }, "dependencies": { - "@langchain/core": "^1.1.42", - "@langchain/google-genai": "^2.1.29", - "@langchain/langgraph": "^1.2.9", + "@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/ai": "^7.17.2", - "langchain": "^1.3.5", - "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/pnpm-lock.yaml b/pnpm-lock.yaml index 5e28a3677..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 @@ -72,24 +78,24 @@ importers: specifier: workspace:^ version: link:../fdm-data '@posthog/ai': - specifier: ^7.17.2 - version: 7.17.2(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(@opentelemetry/api@1.9.1)(@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(posthog-node@5.31.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) + 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.3.5 - version: 1.3.5(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(ws@8.20.0)(zod-to-json-schema@3.25.2(zod@4.3.6)) + 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) @@ -98,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: @@ -158,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) @@ -188,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 @@ -209,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 @@ -327,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 @@ -366,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: @@ -397,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 @@ -415,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: @@ -427,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 @@ -464,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 @@ -488,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: @@ -504,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) @@ -519,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: @@ -620,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) @@ -632,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'} @@ -751,54 +742,6 @@ packages: zod: optional: true - '@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'} - '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -2783,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 @@ -2795,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'} @@ -2862,23 +2748,12 @@ packages: resolution: {integrity: sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==} engines: {node: '>=18.0.0'} - '@grpc/proto-loader@0.8.1': - resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} - engines: {node: '>=6'} - hasBin: true - '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} '@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: @@ -3199,33 +3074,30 @@ packages: peerDependencies: tslib: '2' - '@langchain/core@1.1.42': - resolution: {integrity: sha512-d0tN96BrwPMryYyWR9VfyAntSivn7EQrZCe5Kpxum93tcjTXbKKmKvItFec8AluQt88iTcmAJrahUZUNfzGwTA==} + '@langchain/core@1.1.46': + resolution: {integrity: sha512-i8rDC83BpItxChCw4Lf+6tAr+k+OUcbirc5ZkrhI9ywYWmvxegUljLGOGYvtJNTbEAIFkhYIODPE5QRqyjF6sA==} engines: {node: '>=20'} - '@langchain/google-genai@2.1.29': - resolution: {integrity: sha512-x+K4GuzXpF9sZFPj+kKJ47WSX4+LOqRo9qwvtmqCBhx9KADcnMrhP2O+Q/58IN0EHv8GoksgiKg2/GmyzkhEfw==} + '@langchain/google-genai@2.1.30': + resolution: {integrity: sha512-0wKgy1NvV89fw5MwYiOOhh18SnUEH20z6MZrPV6Tj2hMAA3jAHVSLlIcCQ2mDRJo2r1aHLV8MDXhzkvD1tEHoQ==} engines: {node: '>=20'} peerDependencies: - '@langchain/core': ^1.1.42 + '@langchain/core': ^1.1.43 - '@langchain/langgraph-checkpoint@1.0.1': - resolution: {integrity: sha512-HM0cJLRpIsSlWBQ/xuDC67l52SqZ62Bh2Y61DX+Xorqwoh5e1KxYvfCD7GnSTbWWhjBOutvnR0vPhu4orFkZfw==} + '@langchain/langgraph-checkpoint@1.0.2': + resolution: {integrity: sha512-F4E5Tr0nt8FGghgdscJtHw+ABzChOHeI80R7Y1pjIHdiJom6c2ieo76vL+FWiny80JmoGqhrVAEIWrw0cXKPxg==} engines: {node: '>=18'} peerDependencies: - '@langchain/core': ^1.0.1 + '@langchain/core': ^1.1.44 - '@langchain/langgraph-sdk@1.8.10': - resolution: {integrity: sha512-wrB3rkRw5KAmsqezwvKP3midT4qJrV6Hj9XJMYo+cbvXC4HYpSAmyY/VriSyeTFRbLG/OP/pY2Yz+9Z54nSaXQ==} + '@langchain/langgraph-sdk@1.9.2': + resolution: {integrity: sha512-1kDPjR0VH/39q2h8k0Sxi35KxOvEQPModVCepxGLlRkbZmuWUH+zfICuJd3rmD1ByeOKQBZEaB7Y+VCYmSMt1w==} peerDependencies: - '@langchain/core': ^1.1.16 react: ^18 || ^19 react-dom: ^18 || ^19 svelte: ^4.0.0 || ^5.0.0 vue: ^3.0.0 peerDependenciesMeta: - '@langchain/core': - optional: true react: optional: true react-dom: @@ -3235,17 +3107,20 @@ packages: vue: optional: true - '@langchain/langgraph@1.2.9': - resolution: {integrity: sha512-3c7BtGycHC2v9p6w/Hv8L7kEl1YnZYOQTDJtmAp3knk6JOedO7d2bYP3y0SRyhv5orUEGf/KGvx8ZsB/ideP7g==} + '@langchain/langgraph@1.3.0': + resolution: {integrity: sha512-QvhTjiyqFPz81A+y6LHs223w6DTjv5+882DT4mup72bd72rRhNjTYo5fhes5um0swnKArvY/arc7KeFInfHHWw==} engines: {node: '>=18'} peerDependencies: - '@langchain/core': ^1.1.40 + '@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==} @@ -3331,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==} @@ -3522,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'} @@ -3554,18 +3351,6 @@ packages: 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} @@ -3590,12 +3375,6 @@ packages: 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} @@ -3722,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} @@ -3770,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} @@ -3818,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'} @@ -3895,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: @@ -5805,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] @@ -6041,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==} @@ -6142,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==} @@ -6169,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 @@ -6181,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: @@ -6192,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==} @@ -6261,9 +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==} - abs-svg-path@0.1.1: resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} @@ -6271,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: @@ -6312,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'} @@ -6385,10 +6141,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} @@ -6405,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==} @@ -6489,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==} @@ -6649,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==} @@ -6714,9 +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==} - bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -6750,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'} @@ -6844,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'} @@ -6927,16 +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 - 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==} @@ -7014,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'} @@ -7025,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'} @@ -7039,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'} @@ -7301,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'} @@ -7319,10 +7005,6 @@ packages: supports-color: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} @@ -7387,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'} @@ -7658,12 +7333,6 @@ packages: 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'} @@ -7691,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==} @@ -7787,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'} @@ -7858,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'} @@ -7874,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==} @@ -7926,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==} @@ -7976,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'} @@ -7987,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'} @@ -8077,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'} @@ -8100,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} @@ -8129,11 +7733,6 @@ 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@7.1.4: resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==} engines: {node: '>=18'} @@ -8142,9 +7741,6 @@ packages: 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'} @@ -8164,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'} @@ -8183,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'} @@ -8214,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==} @@ -8247,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'} @@ -8335,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} @@ -8380,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==} @@ -8458,10 +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-middleware@2.0.9: resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} engines: {node: '>=12.0.0'} @@ -8495,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'} @@ -8509,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'} @@ -8572,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==} @@ -8610,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'} @@ -8731,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'} @@ -8786,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'} @@ -9039,52 +8575,18 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - knex@3.2.10: - resolution: {integrity: sha512-oypTHfrc9i72iyxaUQBKHOxhcr0xM65MPf6FpN02nimsftXwzXprIkLjfXdubvhbu4PMWLp023q8o8CYvHSuZw==} - engines: {node: '>=16'} - hasBin: true - peerDependencies: - better-sqlite3: '*' - mysql: '*' - mysql2: '*' - pg: '*' - pg-native: '*' - pg-query-stream: ^4.14.0 - sqlite3: '*' - tedious: '*' - peerDependenciesMeta: - better-sqlite3: - optional: true - mysql: - optional: true - mysql2: - optional: true - pg: - optional: true - pg-native: - optional: true - pg-query-stream: - optional: true - sqlite3: - optional: true - tedious: - 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'} - langchain@1.3.5: - resolution: {integrity: sha512-QSB8TEo6G1tWupgNt1Osm8ylLLoOMq1lLw5NeijnIwRPI5BqdBjUn4/U8usbjEJJcQnbXSK2qTKgTx7zvblnBw==} + langchain@1.4.0: + resolution: {integrity: sha512-p3H5U1vfO0T4ri/xxqI6jccRP3LYmOW6KGxaJcwI5mIGVR/G6eNhZyjSZB9d7me6J7an4Pc6zA8tH8Qa6/7xwA==} engines: {node: '>=20'} peerDependencies: - '@langchain/core': ^1.1.42 + '@langchain/core': ^1.1.44 - langsmith@0.6.0: - resolution: {integrity: sha512-GGaj5IMRfLv2HXXFzGk9diISMYLTpSTh6fzCZGKxWYW/NqEztIFtnXLq6G/RVhzFRmCykLap1fuC67LVKoQLcg==} + langsmith@0.6.3: + resolution: {integrity: sha512-pXrQ4/4myQvjFFOAUmt5pWRrLEZR20gzIJD7MNdUH+5/S5nLI4ZRBo/SYKC6coaYj9pYTfQdBIzcs+3kfJ5uDA==} peerDependencies: '@opentelemetry/api': '*' '@opentelemetry/exporter-trace-otlp-proto': '*' @@ -9287,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} @@ -9297,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: @@ -9323,10 +8814,6 @@ 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'} @@ -9438,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: @@ -9450,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==} @@ -9601,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'} @@ -9673,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==} @@ -9741,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==} @@ -9758,16 +9190,6 @@ packages: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true - 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'} - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -9782,9 +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==} - negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -9793,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==} @@ -9834,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'} @@ -9859,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'} @@ -9887,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==} @@ -9953,9 +9350,6 @@ packages: resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -9968,8 +9362,8 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openai@6.35.0: - resolution: {integrity: sha512-L/skwIGnt5xQZHb0UfTu9uAUKbis3ehKypOuJKi20QvG7UStV6C8IC3myGYHcdiF4kms/bAvOJ9UqqNWqi8x/Q==} + openai@6.37.0: + resolution: {integrity: sha512-0H5dEGFmmLv6KSd0W1w2nyL8WsLkX6yoLeQpU+dZAOuGcany5qkYQMmj35ZrKgb6yiyYqpUzFOpR8mZQkgqeEQ==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -10137,10 +9531,6 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.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==} @@ -10164,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'} @@ -10184,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==} @@ -10209,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==} @@ -10240,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'} @@ -10695,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==} @@ -10704,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'} @@ -10746,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'} @@ -10775,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==} @@ -10789,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'} @@ -10877,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==} @@ -11061,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==} @@ -11214,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'} @@ -11267,10 +10604,6 @@ packages: restructure@3.0.2: resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==} - 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'} @@ -11279,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==} @@ -11324,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'} @@ -11426,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==} @@ -11444,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==} @@ -11528,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'} @@ -11565,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'} @@ -11590,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: @@ -11655,28 +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==} - 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==} - srcset@4.0.0: resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} engines: {node: '>=12'} - ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -11763,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'} @@ -11858,22 +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'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -11935,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==} @@ -12065,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 @@ -12088,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'} @@ -12166,6 +11416,9 @@ packages: 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'} @@ -12203,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'} @@ -12313,12 +11560,17 @@ 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@13.0.1: - resolution: {integrity: sha512-9ezox2roIft6ExBVTVqibSd5dc5/47Sw/uY6b4SjQUT2TzQ0tltNquWA46y4xPQmdZYqvnio22SgWd41M86+jw==} + uuid@13.0.2: + resolution: {integrity: sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==} hasBin: true uuid@8.3.2: @@ -12326,11 +11578,6 @@ packages: 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@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - 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 - valibot@1.4.0: resolution: {integrity: sha512-iC/x7fVcSyOwlm/VSt7RlHnzNGLGvR9GnxdifUeWoCJo0q4ZZvrVkIHC6faTlkxG47I2Y4UrFquPuVHCrOnrLg==} peerDependencies: @@ -12500,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'} @@ -12629,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'} @@ -12642,17 +11927,10 @@ packages: 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==} @@ -12704,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==} @@ -12729,9 +12003,6 @@ packages: 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'} @@ -12759,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==} @@ -12796,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 @@ -12935,173 +12194,41 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@anthropic-ai/sdk@0.78.0(zod@4.3.6)': + '@anthropic-ai/sdk@0.78.0(zod@4.4.3)': dependencies: json-schema-to-ts: 3.1.1 optionalDependencies: - zod: 4.3.6 + zod: 4.4.3 - '@azure/abort-controller@2.1.2': + '@babel/code-frame@7.29.0': dependencies: - tslib: 2.8.1 + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.3': {} - '@azure/core-auth@1.10.1': + '@babel/core@7.29.0': dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.13.1 - tslib: 2.8.1 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.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': - 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 - - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.3': {} - - '@babel/core@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.3 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.1': + '@babel/generator@7.29.1': dependencies: '@babel/parser': 7.29.3 '@babel/types': 7.29.0 @@ -13885,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: @@ -13994,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 @@ -14018,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 @@ -14055,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 @@ -15771,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 @@ -15791,144 +14915,18 @@ 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)': - 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) - transitivePeerDependencies: - - encoding - - supports-color - - '@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-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)': - 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 - - '@google-cloud/paginator@5.0.2': - dependencies: - arrify: 2.0.1 - extend: 3.0.2 - - '@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))': + '@google/genai@1.52.0': dependencies: google-auth-library: 10.6.2 p-retry: 4.6.2 - protobufjs: 7.5.7 + protobufjs: 7.5.8 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 + '@google/generative-ai@0.24.1': {} '@hapi/hoek@9.3.0': {} @@ -15936,10 +14934,6 @@ snapshots: 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 @@ -16046,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: @@ -16062,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 @@ -16217,18 +15211,15 @@ snapshots: '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) tslib: 2.8.1 - '@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.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)': dependencies: '@cfworker/json-schema': 4.1.1 '@standard-schema/spec': 1.1.0 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.6.0(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(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) mustache: 4.2.0 p-queue: 6.6.2 - zod: 4.3.6 + zod: 4.4.3 transitivePeerDependencies: - '@opentelemetry/api' - '@opentelemetry/exporter-trace-otlp-proto' @@ -16236,42 +15227,55 @@ snapshots: - openai - ws - '@langchain/google-genai@2.1.29(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))': + '@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.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.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) - '@langchain/langgraph-checkpoint@1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(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.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.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) uuid: 10.0.0 - '@langchain/langgraph-sdk@1.8.10(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@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.1 + uuid: 13.0.2 optionalDependencies: - '@langchain/core': 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + 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.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6)': + '@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.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) - '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) - '@langchain/langgraph-sdk': 1.8.10(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@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.3.6 - optionalDependencies: - zod-to-json-schema: 3.25.2(zod@4.3.6) + 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': {} @@ -16410,195 +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 - optional: true - '@module-federation/error-codes@0.22.0': {} '@module-federation/runtime-core@0.22.0': @@ -16696,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 @@ -16730,21 +15531,6 @@ snapshots: '@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 @@ -16755,11 +15541,6 @@ 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 @@ -16774,16 +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-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 @@ -16966,42 +15737,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@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 @@ -17013,40 +15754,11 @@ 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)': + '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.1)': 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/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.1)': dependencies: @@ -17054,14 +15766,6 @@ snapshots: '@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.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 @@ -17069,40 +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.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 @@ -17110,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 @@ -17124,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)': @@ -17252,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 @@ -18180,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 @@ -18210,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 @@ -18238,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 @@ -18579,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 @@ -18616,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 @@ -18638,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) @@ -18646,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 @@ -18679,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: @@ -18694,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) @@ -18711,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) @@ -18731,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 @@ -18741,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 @@ -19098,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: @@ -19122,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 @@ -19266,11 +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/node': 25.7.0 '@types/chai@5.2.3': dependencies: @@ -19280,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': {} @@ -19340,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 @@ -19370,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': {} @@ -19414,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 @@ -19479,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': {} @@ -19501,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: @@ -19514,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: @@ -19527,7 +18199,7 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 '@types/trusted-types@2.0.7': optional: true @@ -19546,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': {} @@ -19554,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)': @@ -19577,10 +18241,24 @@ 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 + 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.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 @@ -19589,7 +18267,7 @@ 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.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: @@ -19600,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 @@ -19608,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 @@ -19624,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 @@ -19718,9 +18437,6 @@ snapshots: unzipit: 2.0.0 optional: true - abbrev@1.1.1: - optional: true - abs-svg-path@0.1.1: {} accepts@1.3.8: @@ -19728,12 +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 - optional: true - acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -19762,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 @@ -19841,8 +18546,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.3: {} ansis@3.17.0: {} @@ -19854,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: @@ -19942,9 +18636,6 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - aws-ssl-profiles@1.1.2: - optional: true - axios@1.16.0: dependencies: follow-redirects: 1.16.0 @@ -20025,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) @@ -20046,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' @@ -20080,27 +18799,8 @@ snapshots: binary-extensions@2.3.0: {} - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - optional: true - birpc@4.0.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true - - 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 @@ -20118,21 +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 - optional: true - bonjour-service@1.3.0: dependencies: fast-deep-equal: 3.1.3 @@ -20199,12 +18884,6 @@ snapshots: buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - optional: true - bundle-name@4.1.0: dependencies: run-applescript: 7.1.0 @@ -20230,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: @@ -20361,12 +19016,6 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: - optional: true - - chownr@2.0.0: - optional: true - chrome-trace-event@1.0.4: {} chrono-node@2.9.1: {} @@ -20433,14 +19082,8 @@ snapshots: dependencies: color-name: 2.1.0 - color-support@1.1.3: - optional: true - colord@2.9.3: {} - colorette@2.0.19: - optional: true - colorette@2.0.20: {} combine-promises@1.2.0: {} @@ -20516,27 +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: - optional: true - content-type@1.0.5: {} convert-source-map@2.0.0: {} cookie-signature@1.0.7: {} - cookie-signature@1.2.2: - optional: true - cookie@0.7.2: {} cookie@1.1.1: {} @@ -20805,17 +19439,10 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.4: - dependencies: - ms: 2.1.2 - optional: true - debug@4.4.3: dependencies: ms: 2.1.3 - decamelize@1.2.0: {} - decimal.js-light@2.5.1: {} decimal.js@10.6.0: {} @@ -20863,12 +19490,6 @@ snapshots: delayed-stream@1.0.0: {} - delegates@1.0.0: - optional: true - - denque@2.1.0: - optional: true - depd@1.1.2: {} depd@2.0.0: {} @@ -20979,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: {} @@ -21035,22 +19652,12 @@ snapshots: 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 - optional: true - 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 @@ -21080,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 @@ -21317,9 +19918,6 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - esm@3.2.25: - optional: true - esprima@4.0.1: {} esrecurse@4.3.0: @@ -21375,7 +19973,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 25.6.2 + '@types/node': 25.7.0 require-like: 0.1.2 eventemitter3@4.0.7: {} @@ -21384,14 +19982,6 @@ snapshots: events@3.3.0: {} - eventsource-parser@3.0.8: - optional: true - - eventsource@3.0.7: - dependencies: - eventsource-parser: 3.0.8 - optional: true - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -21406,16 +19996,8 @@ snapshots: exit-hook@2.2.1: {} - expand-template@2.0.3: - optional: true - 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 @@ -21452,40 +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 - optional: true - exsolve@1.0.8: {} extend-shallow@2.0.1: @@ -21515,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 @@ -21571,9 +20107,6 @@ snapshots: transitivePeerDependencies: - supports-color - file-uri-to-path@1.0.0: - optional: true - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -21590,18 +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 - optional: true - find-cache-dir@4.0.0: dependencies: common-path-prefix: 3.0.0 @@ -21685,18 +20206,6 @@ snapshots: fresh@0.5.2: {} - fresh@2.0.0: - optional: true - - fs-constants@1.0.0: - optional: true - - 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 @@ -21715,14 +20224,6 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - optional: true - - fs.realpath@1.0.0: - optional: true - fsevents@2.3.3: optional: true @@ -21743,18 +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@7.1.4: dependencies: extend: 3.0.2 @@ -21771,11 +20260,6 @@ snapshots: transitivePeerDependencies: - supports-color - generate-function@2.3.1: - dependencies: - is-property: 1.0.2 - optional: true - generator-function@2.0.1: {} gensync@1.0.0-beta.2: {} @@ -21804,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: @@ -21825,9 +20307,6 @@ snapshots: get-own-enumerable-property-symbols@3.0.2: {} - get-package-type@0.1.0: - optional: true - get-port@5.1.1: {} get-proto@1.0.1: @@ -21853,12 +20332,6 @@ snapshots: get-value@2.0.6: {} - getopts@2.3.0: - optional: true - - github-from-package@0.0.0: - optional: true - github-slugger@1.5.0: {} gl-matrix@3.4.4: {} @@ -21883,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 @@ -21996,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: @@ -22114,8 +20574,6 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.12.18: {} - hookable@6.1.1: {} hpack.js@2.1.6: @@ -22214,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 @@ -22281,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: {} @@ -22294,11 +20723,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - optional: true - iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -22346,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: {} @@ -22378,15 +20793,10 @@ snapshots: internmap@2.0.3: {} - interpret@2.2.0: - optional: true - 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: {} @@ -22491,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: {} @@ -22525,12 +20932,6 @@ snapshots: dependencies: isobject: 3.0.1 - is-promise@4.0.0: - optional: true - - is-property@1.0.2: - optional: true - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -22630,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 @@ -22638,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 @@ -22765,37 +21166,15 @@ 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): - 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 - transitivePeerDependencies: - - supports-color - optional: true + kysely@0.28.17: {} - knex@3.2.10(pg@8.20.0)(tedious@19.2.1(@azure/core-client@1.10.1)): + 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: - '@langchain/core': 1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) - '@langchain/langgraph': 1.2.9(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6) - '@langchain/langgraph-checkpoint': 1.0.1(@langchain/core@1.1.42(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0)) - langsmith: 0.6.0(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(ws@8.20.0) - zod: 4.3.6 + '@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: - '@opentelemetry/api' - '@opentelemetry/exporter-trace-otlp-proto' @@ -22808,17 +21187,15 @@ snapshots: - ws - zod-to-json-schema - langsmith@0.6.0(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.7.0(@opentelemetry/api@1.9.1))(openai@6.35.0(ws@8.20.0)(zod@4.3.6))(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): dependencies: p-queue: 6.6.2 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/sdk-trace-base': 2.7.0(@opentelemetry/api@1.9.1) - openai: 6.35.0(ws@8.20.0)(zod@4.3.6) + '@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 - kysely@0.28.17: {} - latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -22961,22 +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: - optional: true - lucide-react@1.14.0(react@19.2.6): dependencies: react: 19.2.6 @@ -22997,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 @@ -23042,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: @@ -23299,9 +21635,6 @@ snapshots: media-typer@0.3.0: {} - media-typer@1.1.0: - optional: true - memfs@4.57.2(tslib@2.8.1): dependencies: '@jsonjoy.com/fs-core': 4.57.2(tslib@2.8.1) @@ -23321,9 +21654,6 @@ snapshots: merge-descriptors@1.0.3: {} - merge-descriptors@2.0.0: - optional: true - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -23652,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: {} @@ -23704,57 +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 - optional: true - - minipass@5.0.0: - optional: true - minipass@7.1.3: {} - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - optional: true - - mkdirp-classic@0.5.3: - optional: true - - mkdirp@1.0.4: - optional: true - module-details-from-path@1.0.4: {} morgan@1.10.1: @@ -23779,9 +22058,6 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: - optional: true - ms@2.1.3: {} multicast-dns@7.2.5: @@ -23791,23 +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 - optional: true - - named-placeholders@1.1.6: - dependencies: - lru.min: 1.1.4 - optional: true + mustache@4.2.0: {} nanoid@3.3.12: {} @@ -23815,16 +22075,10 @@ snapshots: nanostores@1.3.0: {} - napi-build-utils@2.0.0: - optional: true - negotiator@0.6.3: {} negotiator@0.6.4: {} - negotiator@1.0.0: - optional: true - neo-async@2.6.2: {} next-themes@0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6): @@ -23866,9 +22120,6 @@ snapshots: dependencies: semver: 7.8.0 - node-addon-api@7.1.1: - optional: true - node-domexception@1.0.0: {} node-emoji@2.2.0: @@ -23878,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: @@ -23890,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: @@ -23926,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: @@ -23998,11 +22217,6 @@ snapshots: on-headers@1.1.0: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 - optional: true - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -24020,10 +22234,10 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@6.35.0(ws@8.20.0)(zod@4.3.6): + openai@6.37.0(ws@8.20.0)(zod@4.4.3): optionalDependencies: ws: 8.20.0 - zod: 4.3.6 + zod: 4.4.3 opener@1.5.2: {} @@ -24098,7 +22312,7 @@ snapshots: p-retry@7.1.1: dependencies: - is-network-error: 1.3.1 + is-network-error: 1.3.2 p-timeout@3.2.0: dependencies: @@ -24184,9 +22398,6 @@ snapshots: path-exists@5.0.0: {} - path-is-absolute@1.0.1: - optional: true - path-is-inside@1.0.2: {} path-key@3.1.1: {} @@ -24206,9 +22417,6 @@ snapshots: path-to-regexp@3.3.0: {} - path-to-regexp@8.4.2: - optional: true - path-type@4.0.0: {} pathe@1.1.2: {} @@ -24221,22 +22429,8 @@ snapshots: peberminta@0.9.0: {} - pg-cloudflare@1.3.0: - optional: true - - pg-connection-string@2.12.0: - optional: true - - pg-connection-string@2.6.2: - optional: true - pg-int8@1.0.1: {} - pg-pool@3.13.0(pg@8.20.0): - dependencies: - pg: 8.20.0 - optional: true - pg-protocol@1.13.0: {} pg-types@2.2.0: @@ -24247,22 +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 - optional: true - - pgpass@1.0.5: - dependencies: - split2: 4.2.0 - optional: true - picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -24273,9 +22451,6 @@ snapshots: pify@4.0.1: {} - pkce-challenge@5.0.1: - optional: true - pkg-dir@7.0.0: dependencies: find-up: 6.3.0 @@ -24789,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 @@ -24799,22 +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 - optional: true - prettier@2.8.8: {} prettier@3.8.3: {} @@ -24843,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 @@ -24879,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: {} @@ -24893,12 +23062,6 @@ snapshots: proxy-from-env@2.1.0: {} - pump@3.0.4: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - optional: true - punycode.js@2.3.1: {} punycode@2.3.1: {} @@ -24920,7 +23083,6 @@ snapshots: qs@6.15.1: dependencies: side-channel: 1.1.0 - optional: true quansync@0.2.11: {} @@ -25020,14 +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 - optional: true - rbush@4.0.1: dependencies: quickselect: 3.0.0 @@ -25262,11 +23416,6 @@ snapshots: - '@types/react' - redux - rechoir@0.8.0: - dependencies: - resolve: 1.22.12 - optional: true - recma-build-jsx@1.0.0: dependencies: '@types/estree': 1.0.9 @@ -25467,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: @@ -25511,18 +23658,10 @@ snapshots: restructure@3.0.2: {} - 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): @@ -25616,17 +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 - optional: true - rtlcss@4.3.0: dependencies: escalade: 3.2.0 @@ -25736,23 +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 - optional: true - serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -25788,19 +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 - optional: true - - set-blocking@2.0.0: - optional: true - set-cookie-parser@2.7.2: {} set-cookie-parser@3.1.0: {} @@ -25922,16 +24020,6 @@ snapshots: signal-exit@4.1.0: {} - simple-concat@1.0.1: - optional: true - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - optional: true - sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.29 @@ -25959,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: @@ -26005,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 @@ -26085,34 +24155,10 @@ snapshots: dependencies: extend-shallow: 3.0.2 - split2@4.2.0: - optional: true - sprintf-js@1.0.3: {} - sql-escaper@1.3.3: - optional: true - - 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 - optional: true - srcset@4.0.0: {} - ssri@8.0.1: - dependencies: - minipass: 3.3.6 - optional: true - stackback@0.0.2: {} statuses@1.5.0: {} @@ -26205,8 +24251,6 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@2.3.0: {} - strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -26291,63 +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 - optional: true - - 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 - optional: true - - 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 - optional: true - - tarn@3.0.2: - optional: true - - 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)): @@ -26390,9 +24377,6 @@ snapshots: thunky@1.1.0: {} - tildify@2.0.0: - optional: true - tiny-inflate@1.0.3: {} tiny-invariant@1.3.3: {} @@ -26495,11 +24479,6 @@ snapshots: dependencies: tslib: 1.14.1 - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - turbo@2.9.12: optionalDependencies: '@turbo/darwin-64': 2.9.12 @@ -26522,13 +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 - optional: true - typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -26624,6 +24596,8 @@ snapshots: 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: {} @@ -26666,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 @@ -26754,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 @@ -26783,14 +24745,14 @@ snapshots: utils-merge@1.0.1: {} + uuid@10.0.0: {} + uuid@11.1.1: {} - uuid@13.0.1: {} + uuid@13.0.2: {} uuid@8.3.2: {} - uuid@9.0.1: {} - valibot@1.4.0(typescript@6.0.3): optionalDependencies: typescript: 6.0.3 @@ -26839,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 @@ -26860,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' @@ -26881,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) @@ -26890,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 @@ -26914,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)) @@ -26937,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 @@ -26963,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 @@ -27234,11 +25212,6 @@ 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 @@ -27247,21 +25220,12 @@ snapshots: 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: - optional: true - write-file-atomic@3.0.3: dependencies: imurmurhash: 0.1.4 @@ -27285,8 +25249,6 @@ snapshots: dependencies: sax: 1.6.0 - xml-naming@0.1.0: {} - xml-utils@1.10.2: {} xml2js@0.6.2: @@ -27302,9 +25264,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: - optional: true - yaml@2.8.4: {} yocto-queue@0.1.0: {} @@ -27325,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 From b95ead42cf9b7860b1bde5f3f8462a935baa2250 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Wed, 13 May 2026 14:48:41 +0200 Subject: [PATCH 07/17] refactor: swith to ga version of gemini 3.1 flash lite --- fdm-app/app/components/blocks/gerrit/schema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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)", }, ] From 63ce68581c400a34567e35e72a629c72cea659b9 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Wed, 13 May 2026 15:11:06 +0200 Subject: [PATCH 08/17] fix: add a recursionLimit --- fdm-agents/src/runners/one-shot.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index 8e7498104..0d1352bba 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -75,6 +75,7 @@ function buildCallbacks( * @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( @@ -83,6 +84,7 @@ export async function runOneShotAgent( context: Record = {}, posthog?: { client: any; distinctId: string }, timeoutMs = 20 * 60 * 1000, + recursionLimit = 100, ): Promise { const abortController = new AbortController() const callbacks = buildCallbacks(posthog, context) @@ -105,6 +107,7 @@ export async function runOneShotAgent( { messages: [{ role: "user", content: input }] }, { configurable: context, + recursionLimit, streamMode: ["updates", "custom"], signal: abortController.signal, runName: "gerrit-one-shot", From 979628912fc9289e6ae886078e51901b86866af0 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Wed, 13 May 2026 15:21:02 +0200 Subject: [PATCH 09/17] feat: when approaching max tools call try to wrap up the answer --- fdm-agents/src/agents/gerrit/agent.test.ts | 60 +++++++++++++++++++ fdm-agents/src/agents/gerrit/agent.ts | 38 +++++++++++- fdm-agents/src/index.ts | 2 +- fdm-agents/src/runners/one-shot.test.ts | 20 ++++++- fdm-agents/src/runners/one-shot.ts | 18 ++++++ .../farm.$b_id_farm.$calendar.gerrit.tsx | 7 +++ 6 files changed, 142 insertions(+), 3 deletions(-) diff --git a/fdm-agents/src/agents/gerrit/agent.test.ts b/fdm-agents/src/agents/gerrit/agent.test.ts index 29b287203..0b964689e 100644 --- a/fdm-agents/src/agents/gerrit/agent.test.ts +++ b/fdm-agents/src/agents/gerrit/agent.test.ts @@ -1,8 +1,12 @@ +import { AIMessage } from "@langchain/core/messages" import { describe, expect, it, vi } from "vitest" import { + DEFAULT_TOOL_ROUND_LIMIT, GERRIT_DESCRIPTION, GERRIT_INSTRUCTION, GERRIT_NAME, + TOOL_LIMIT_WARNING, + countToolRoundtrips, createFertilizerPlannerAgent, } from "./agent" @@ -36,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 JSON response 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 0ce6f30f0..2f4524d69 100644 --- a/fdm-agents/src/agents/gerrit/agent.ts +++ b/fdm-agents/src/agents/gerrit/agent.ts @@ -1,3 +1,5 @@ +import { isAIMessage, SystemMessage } from "@langchain/core/messages" +import type { BaseMessageLike } from "@langchain/core/messages" import { createReactAgent } from "@langchain/langgraph/prebuilt" import type { FdmType } from "@nmi-agro/fdm-core" import { createDefaultModel } from "../../models/default" @@ -7,6 +9,11 @@ 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. You MUST produce your final JSON response NOW using the best plan you have so far. Do NOT call any more tools — output your JSON immediately.` + 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. @@ -135,16 +142,38 @@ TOOL RETURN SHAPES: 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. ` +/** + * 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 { tool_calls?: unknown[] }[] | BaseMessageLike[], +): number { + let count = 0 + for (const msg of messages) { + if ( + isAIMessage(msg as any) && + (msg as any).tool_calls && + (msg as any).tool_calls.length > 0 + ) { + count++ + } + } + return count +} + /** * 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, model?: string, + toolRoundLimit: number = DEFAULT_TOOL_ROUND_LIMIT, ): ReturnType { const resolvedKey = apiKey ?? process.env.GEMINI_API_KEY if (!resolvedKey) { @@ -155,6 +184,13 @@ export function createFertilizerPlannerAgent( return createReactAgent({ llm: createDefaultModel(resolvedKey, model), tools: createFertilizerPlannerTools(fdm), - stateModifier: GERRIT_INSTRUCTION, + prompt: (state): BaseMessageLike[] => { + const rounds = countToolRoundtrips(state.messages) + const systemContent = + rounds >= toolRoundLimit + ? `${GERRIT_INSTRUCTION}\n\n${TOOL_LIMIT_WARNING}` + : GERRIT_INSTRUCTION + return [new SystemMessage(systemContent), ...state.messages] + }, }) } diff --git a/fdm-agents/src/index.ts b/fdm-agents/src/index.ts index 29db3b61e..23e616eac 100644 --- a/fdm-agents/src/index.ts +++ b/fdm-agents/src/index.ts @@ -5,7 +5,7 @@ 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 interface FertilizerPlanStrategies { diff --git a/fdm-agents/src/runners/one-shot.test.ts b/fdm-agents/src/runners/one-shot.test.ts index 5c86936c7..7fd034549 100644 --- a/fdm-agents/src/runners/one-shot.test.ts +++ b/fdm-agents/src/runners/one-shot.test.ts @@ -1,5 +1,5 @@ import { afterEach, describe, expect, it, vi } from "vitest" -import { AgentTimeoutError, runOneShotAgent } from "./one-shot" +import { AgentRecursionLimitError, AgentTimeoutError, runOneShotAgent } from "./one-shot" function makeAIMessage( content: string | Array>, @@ -226,5 +226,23 @@ describe("runOneShotAgent", () => { 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", + ) + }) }) diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index 0d1352bba..72de3b924 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -18,6 +18,15 @@ 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 @@ -171,6 +180,15 @@ export async function runOneShotAgent( try { return await Promise.race([streamPromise, timeoutPromise]) + } catch (err: unknown) { + // Wrap LangGraph recursion limit errors in a typed error + if ( + err instanceof Error && + err.message?.includes("Recursion limit") + ) { + throw new AgentRecursionLimitError() + } + throw err } finally { clearTimeout(timeoutHandle) } 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..92a732af9 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,5 +1,6 @@ import { zodResolver } from "@hookform/resolvers/zod" import { + AgentRecursionLimitError, AgentTimeoutError, buildFertilizerPlanPrompt, createFertilizerPlannerAgent, @@ -754,6 +755,12 @@ 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.", + ) + } return dataWithError( null, err instanceof Error From c8899a396c5d851ebed9e63cf588fb359df94a6a Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Wed, 13 May 2026 15:37:32 +0200 Subject: [PATCH 10/17] refactor: various improvements --- fdm-agents/src/index.ts | 2 +- fdm-agents/src/runners/one-shot.ts | 6 +- .../tools/fertilizer-planner/index.test.ts | 28 ++-- .../src/tools/fertilizer-planner/index.ts | 143 +++++++++++------- .../farm.$b_id_farm.$calendar.gerrit.tsx | 38 ++++- 5 files changed, 138 insertions(+), 79 deletions(-) diff --git a/fdm-agents/src/index.ts b/fdm-agents/src/index.ts index 23e616eac..975c7c840 100644 --- a/fdm-agents/src/index.ts +++ b/fdm-agents/src/index.ts @@ -104,7 +104,7 @@ export function buildFertilizerPlanPrompt( ? `\nFARM FIELDS (${fieldsSummary.length} fields, pre-loaded for your reference):\n${fieldsSummary .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/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index 72de3b924..01b1a579d 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -181,10 +181,12 @@ export async function runOneShotAgent( try { return await Promise.race([streamPromise, timeoutPromise]) } catch (err: unknown) { - // Wrap LangGraph recursion limit errors in a typed error + // 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.message?.includes("Recursion limit") || + err.constructor?.name === "GraphRecursionError") ) { throw new AgentRecursionLimitError() } diff --git a/fdm-agents/src/tools/fertilizer-planner/index.test.ts b/fdm-agents/src/tools/fertilizer-planner/index.test.ts index 79b53653b..27b885fc9 100644 --- a/fdm-agents/src/tools/fertilizer-planner/index.test.ts +++ b/fdm-agents/src/tools/fertilizer-planner/index.test.ts @@ -525,26 +525,26 @@ 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").invoke( - makeSimInput(), - makeConfigurable(), - ), - ).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").invoke( - makeSimInput(), - makeConfigurable(), - ), - ).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 () => { diff --git a/fdm-agents/src/tools/fertilizer-planner/index.ts b/fdm-agents/src/tools/fertilizer-planner/index.ts index bedd519b4..638b89997 100644 --- a/fdm-agents/src/tools/fertilizer-planner/index.ts +++ b/fdm-agents/src/tools/fertilizer-planner/index.ts @@ -156,32 +156,40 @@ export function createFertilizerPlannerTools(fdm: FdmType) { 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. @@ -212,32 +220,43 @@ export function createFertilizerPlannerTools(fdm: FdmType) { 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), + } } }), ) @@ -384,7 +403,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, @@ -614,6 +634,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, + } + } }), ) @@ -1032,9 +1061,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() 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 92a732af9..80ca80ce5 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 @@ -134,14 +134,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: { @@ -713,6 +713,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, @@ -1007,6 +1022,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, @@ -1014,7 +1036,7 @@ export async function action({ request, params }: ActionFunctionArgs) { fertilizer.p_id, amount, app.p_app_method, - new Date(app.p_app_date), + appDate, ) } } @@ -1026,11 +1048,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}`) } } From 7742f0a3940733cd5842394bc940a00f336c475d Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Wed, 13 May 2026 15:58:32 +0200 Subject: [PATCH 11/17] refactor: make use of structured output for model response --- fdm-agents/src/agents/gerrit/agent.ts | 26 +++--- fdm-agents/src/agents/gerrit/schema.ts | 91 +++++++++++++++++++ fdm-agents/src/index.ts | 2 + fdm-agents/src/runners/one-shot.ts | 8 ++ .../farm.$b_id_farm.$calendar.gerrit.tsx | 64 ++++++++----- 5 files changed, 154 insertions(+), 37 deletions(-) create mode 100644 fdm-agents/src/agents/gerrit/schema.ts diff --git a/fdm-agents/src/agents/gerrit/agent.ts b/fdm-agents/src/agents/gerrit/agent.ts index 2f4524d69..f6431ab31 100644 --- a/fdm-agents/src/agents/gerrit/agent.ts +++ b/fdm-agents/src/agents/gerrit/agent.ts @@ -1,9 +1,10 @@ -import { isAIMessage, SystemMessage } from "@langchain/core/messages" +import { isAIMessage } from "@langchain/core/messages" import type { BaseMessageLike } from "@langchain/core/messages" -import { createReactAgent } from "@langchain/langgraph/prebuilt" +import { createAgent, dynamicSystemPromptMiddleware } 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" export const GERRIT_NAME = "Gerrit" export const GERRIT_DESCRIPTION = @@ -172,25 +173,26 @@ export function countToolRoundtrips( export function createFertilizerPlannerAgent( fdm: FdmType, apiKey?: string, - model?: string, + modelName?: string, toolRoundLimit: number = DEFAULT_TOOL_ROUND_LIMIT, -): ReturnType { +) { 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 createReactAgent({ - llm: createDefaultModel(resolvedKey, model), + return createAgent({ + model: createDefaultModel(resolvedKey, modelName), tools: createFertilizerPlannerTools(fdm), - prompt: (state): BaseMessageLike[] => { - const rounds = countToolRoundtrips(state.messages) - const systemContent = - rounds >= toolRoundLimit + middleware: [ + dynamicSystemPromptMiddleware((state) => { + const rounds = countToolRoundtrips(state.messages) + return rounds >= toolRoundLimit ? `${GERRIT_INSTRUCTION}\n\n${TOOL_LIMIT_WARNING}` : GERRIT_INSTRUCTION - return [new SystemMessage(systemContent), ...state.messages] - }, + }), + ], + responseFormat: FertilizerPlanSchema, }) } diff --git a/fdm-agents/src/agents/gerrit/schema.ts b/fdm-agents/src/agents/gerrit/schema.ts new file mode 100644 index 000000000..7eccc78e8 --- /dev/null +++ b/fdm-agents/src/agents/gerrit/schema.ts @@ -0,0 +1,91 @@ +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().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.ts b/fdm-agents/src/index.ts index 975c7c840..1851ef529 100644 --- a/fdm-agents/src/index.ts +++ b/fdm-agents/src/index.ts @@ -7,6 +7,8 @@ import { getMainCultivation } from "./tools/fertilizer-planner" export type { OneShotAgentResult } 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 interface FertilizerPlanStrategies { /** Whether the farm is organic (prohibits mineral fertilizers) */ diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index 01b1a579d..8e96d9be0 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -3,6 +3,7 @@ import type { LangChainCallbackHandler } from "@posthog/ai/langchain" export interface OneShotAgentResult { result: string + structuredResponse?: Record usage: { inputTokens: number outputTokens: number @@ -108,6 +109,7 @@ export async function runOneShotAgent( const streamPromise = (async (): Promise => { let finalResponse = "" + let structuredResponse: Record | undefined let inputTokens = 0 let outputTokens = 0 const toolCalls: string[] = [] @@ -163,6 +165,11 @@ export async function runOneShotAgent( } } } + + // 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. @@ -173,6 +180,7 @@ export async function runOneShotAgent( return { result: finalResponse, + structuredResponse, usage: totalTokens > 0 ? { inputTokens, outputTokens, totalTokens } : null, toolCalls: uniqueToolCalls, } 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 80ca80ce5..e3c2f664b 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 @@ -5,6 +5,7 @@ import { buildFertilizerPlanPrompt, createFertilizerPlannerAgent, type FarmFieldSummary, + FertilizerPlanSchema, type OneShotAgentResult, runOneShotAgent, } from "@nmi-agro/fdm-agents" @@ -753,6 +754,7 @@ export async function action({ request, params }: ActionFunctionArgs) { let rawResult = "" let usageData: OneShotAgentResult["usage"] = null let toolCalls: string[] | undefined + let structuredResponse: Record | undefined try { const agentResult = await runOneShotAgent( @@ -763,6 +765,7 @@ export async function action({ request, params }: ActionFunctionArgs) { rawResult = agentResult.result usageData = agentResult.usage toolCalls = agentResult.toolCalls + structuredResponse = agentResult.structuredResponse } catch (err: unknown) { if (err instanceof AgentTimeoutError) { return dataWithError( @@ -784,37 +787,48 @@ export async function action({ request, params }: ActionFunctionArgs) { ) } - 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 { + if (structuredResponse) { + const validated = FertilizerPlanSchema.safeParse(structuredResponse) + if (validated.success) { + parsedPlan = validated.data as unknown as ParsedPlan + } else { + // Structured response didn't match schema — treat as raw + parsedPlan = structuredResponse as unknown as ParsedPlan + } + } else { + // 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.", - ) } } From f62855af316eb42f97fb877a4f52306022aa83aa Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Wed, 13 May 2026 15:59:03 +0200 Subject: [PATCH 12/17] docs: document langsmith endpoint --- fdm-agents/.env.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fdm-agents/.env.example b/fdm-agents/.env.example index 0c8969a7c..0ff2a54bf 100644 --- a/fdm-agents/.env.example +++ b/fdm-agents/.env.example @@ -16,3 +16,6 @@ GEMINI_API_KEY= LANGCHAIN_TRACING_V2=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= From 2e8d6c26fa93c4ed0ec3ce687190e6ab42f6bd0a Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Wed, 13 May 2026 15:59:25 +0200 Subject: [PATCH 13/17] fix: use shared traceId --- fdm-agents/src/runners/one-shot.ts | 5 +++++ fdm-app/app/routes/farm.$b_id_farm.$calendar.gerrit.tsx | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index 8e96d9be0..7e54db704 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -1,9 +1,11 @@ +import { randomUUID } from "node:crypto" import { isAIMessage } from "@langchain/core/messages" import type { LangChainCallbackHandler } from "@posthog/ai/langchain" export interface OneShotAgentResult { result: string structuredResponse?: Record + runId: string usage: { inputTokens: number outputTokens: number @@ -98,6 +100,7 @@ export async function runOneShotAgent( ): Promise { const abortController = new AbortController() const callbacks = buildCallbacks(posthog, context) + const runId = randomUUID() let timeoutHandle: ReturnType | undefined const timeoutPromise = new Promise((_, reject) => { @@ -119,6 +122,7 @@ export async function runOneShotAgent( { configurable: context, recursionLimit, + runId, streamMode: ["updates", "custom"], signal: abortController.signal, runName: "gerrit-one-shot", @@ -181,6 +185,7 @@ export async function runOneShotAgent( return { result: finalResponse, structuredResponse, + runId, usage: totalTokens > 0 ? { inputTokens, outputTokens, totalTokens } : null, toolCalls: uniqueToolCalls, } 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 e3c2f664b..e376ac29b 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 @@ -755,6 +755,7 @@ export async function action({ request, params }: ActionFunctionArgs) { let usageData: OneShotAgentResult["usage"] = null let toolCalls: string[] | undefined let structuredResponse: Record | undefined + let runId: string | undefined try { const agentResult = await runOneShotAgent( @@ -766,6 +767,7 @@ export async function action({ request, params }: ActionFunctionArgs) { usageData = agentResult.usage toolCalls = agentResult.toolCalls structuredResponse = agentResult.structuredResponse + runId = agentResult.runId } catch (err: unknown) { if (err instanceof AgentTimeoutError) { return dataWithError( @@ -779,6 +781,7 @@ export async function action({ request, params }: ActionFunctionArgs) { "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: ${runId ?? "unknown"}):`, err) return dataWithError( null, err instanceof Error @@ -937,7 +940,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, From fd19f67c3ecad4deca9355c2bee6e1a7220e3e47 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Fri, 15 May 2026 10:33:31 +0200 Subject: [PATCH 14/17] refactor: implement review feedback --- fdm-agents/.env.example | 2 +- fdm-agents/src/agents/gerrit/agent.ts | 32 ++++++++++++------- fdm-agents/src/agents/gerrit/schema.ts | 1 + fdm-agents/src/index.ts | 3 +- fdm-agents/src/models/default.test.ts | 2 ++ fdm-agents/src/runners/one-shot.ts | 8 ++--- .../src/tools/fertilizer-planner/index.ts | 3 ++ fdm-app/.env.example | 2 +- .../farm.$b_id_farm.$calendar.gerrit.tsx | 22 +++++++------ 9 files changed, 46 insertions(+), 29 deletions(-) diff --git a/fdm-agents/.env.example b/fdm-agents/.env.example index 0ff2a54bf..db42e5cba 100644 --- a/fdm-agents/.env.example +++ b/fdm-agents/.env.example @@ -13,7 +13,7 @@ GEMINI_API_KEY= # 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) -LANGCHAIN_TRACING_V2=false +LANGSMITH_TRACING=false LANGCHAIN_API_KEY= LANGCHAIN_PROJECT=fdm-agents # Endpoint for LangSmith API (default: https://api.smith.langchain.com) diff --git a/fdm-agents/src/agents/gerrit/agent.ts b/fdm-agents/src/agents/gerrit/agent.ts index f6431ab31..2cae38a72 100644 --- a/fdm-agents/src/agents/gerrit/agent.ts +++ b/fdm-agents/src/agents/gerrit/agent.ts @@ -1,5 +1,5 @@ -import { isAIMessage } from "@langchain/core/messages" -import type { BaseMessageLike } from "@langchain/core/messages" +import { AIMessage } from "@langchain/core/messages" +import type { BaseMessage } from "@langchain/core/messages" import { createAgent, dynamicSystemPromptMiddleware } from "langchain" import type { FdmType } from "@nmi-agro/fdm-core" import { createDefaultModel } from "../../models/default" @@ -13,7 +13,8 @@ export const GERRIT_DESCRIPTION = /** 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. You MUST produce your final JSON response NOW using the best plan you have so far. Do NOT call any more tools — output your JSON immediately.` +export const TOOL_LIMIT_WARNING = + "IMPORTANT: You are approaching the maximum number of allowed tool calls. You MUST produce your final JSON response NOW using the best plan you have so far. Do NOT call any more tools — output your JSON immediately." 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. @@ -147,15 +148,13 @@ TOOL RETURN SHAPES: * 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 { tool_calls?: unknown[] }[] | BaseMessageLike[], -): number { +export function countToolRoundtrips(messages: readonly BaseMessage[]): number { let count = 0 for (const msg of messages) { if ( - isAIMessage(msg as any) && - (msg as any).tool_calls && - (msg as any).tool_calls.length > 0 + AIMessage.isInstance(msg) && + msg.tool_calls && + msg.tool_calls.length > 0 ) { count++ } @@ -163,6 +162,15 @@ export function countToolRoundtrips( 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. @@ -175,7 +183,7 @@ export function createFertilizerPlannerAgent( apiKey?: string, modelName?: string, toolRoundLimit: number = DEFAULT_TOOL_ROUND_LIMIT, -) { +): AgentGraph { const resolvedKey = apiKey ?? process.env.GEMINI_API_KEY if (!resolvedKey) { throw new Error( @@ -183,6 +191,8 @@ export function createFertilizerPlannerAgent( ) } return createAgent({ + name: GERRIT_NAME, + description: GERRIT_DESCRIPTION, model: createDefaultModel(resolvedKey, modelName), tools: createFertilizerPlannerTools(fdm), middleware: [ @@ -194,5 +204,5 @@ export function createFertilizerPlannerAgent( }), ], responseFormat: FertilizerPlanSchema, - }) + }) as unknown as AgentGraph } diff --git a/fdm-agents/src/agents/gerrit/schema.ts b/fdm-agents/src/agents/gerrit/schema.ts index 7eccc78e8..53f10380e 100644 --- a/fdm-agents/src/agents/gerrit/schema.ts +++ b/fdm-agents/src/agents/gerrit/schema.ts @@ -14,6 +14,7 @@ export const FertilizerApplicationSchema = z.object({ .describe("Display unit for the application amount"), p_app_date: z .string() + .regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format") .describe("Application date in YYYY-MM-DD format"), p_app_method: z.string().describe("Application method identifier"), }) diff --git a/fdm-agents/src/index.ts b/fdm-agents/src/index.ts index 1851ef529..449e83108 100644 --- a/fdm-agents/src/index.ts +++ b/fdm-agents/src/index.ts @@ -9,6 +9,7 @@ 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) */ @@ -39,7 +40,7 @@ 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 diff --git a/fdm-agents/src/models/default.test.ts b/fdm-agents/src/models/default.test.ts index 93237ad7b..75c98ad8b 100644 --- a/fdm-agents/src/models/default.test.ts +++ b/fdm-agents/src/models/default.test.ts @@ -24,6 +24,7 @@ describe("Default Model", () => { expect.objectContaining({ apiKey: "fake-api-key", model: "gemini-3.1-pro-preview", + maxOutputTokens: 65536, }), ) }) @@ -36,6 +37,7 @@ describe("Default Model", () => { expect.objectContaining({ apiKey: "fake-api-key", model: "custom-model", + maxOutputTokens: 65536, }), ) }) diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index 7e54db704..caff7666e 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -1,6 +1,7 @@ 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 @@ -49,11 +50,6 @@ function extractTextContent(content: unknown): string { return JSON.stringify(content) } -// Structural type for any LangGraph compiled agent graph -interface StreamableAgentGraph { - stream(input: unknown, options?: unknown): Promise> -} - function buildCallbacks( posthog?: { client: any; distinctId: string }, context?: Record, @@ -91,7 +87,7 @@ function buildCallbacks( * @returns The final response and token usage from the agent. */ export async function runOneShotAgent( - agent: StreamableAgentGraph, + agent: AgentGraph, input: string, context: Record = {}, posthog?: { client: any; distinctId: string }, diff --git a/fdm-agents/src/tools/fertilizer-planner/index.ts b/fdm-agents/src/tools/fertilizer-planner/index.ts index 638b89997..4ada88d8a 100644 --- a/fdm-agents/src/tools/fertilizer-planner/index.ts +++ b/fdm-agents/src/tools/fertilizer-planner/index.ts @@ -65,6 +65,9 @@ export function createFertilizerPlannerTools(fdm: FdmType) { 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`), diff --git a/fdm-app/.env.example b/fdm-app/.env.example index 4584dca6c..787afb3ab 100644 --- a/fdm-app/.env.example +++ b/fdm-app/.env.example @@ -145,6 +145,6 @@ POSTMARK_SENDER_NAME= # 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) -LANGCHAIN_TRACING=true +LANGSMITH_TRACING=true LANGCHAIN_API_KEY= LANGCHAIN_PROJECT= \ No newline at end of file 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 e376ac29b..ac0775c75 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 @@ -781,7 +781,7 @@ export async function action({ request, params }: ActionFunctionArgs) { "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: ${runId ?? "unknown"}):`, err) + console.error("[gerrit] Agent error (run: unknown):", err) return dataWithError( null, err instanceof Error @@ -792,15 +792,19 @@ export async function action({ request, params }: ActionFunctionArgs) { // Prefer structured output from responseFormat, fall back to string parsing let parsedPlan: ParsedPlan - if (structuredResponse) { - const validated = FertilizerPlanSchema.safeParse(structuredResponse) - if (validated.success) { - parsedPlan = validated.data as unknown as ParsedPlan - } else { - // Structured response didn't match schema — treat as raw - parsedPlan = structuredResponse as unknown as ParsedPlan - } + 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("}") From 9024536970c5c6922bfae701f9cbb9beb25e7f09 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Fri, 15 May 2026 11:50:47 +0200 Subject: [PATCH 15/17] fixes --- fdm-agents/src/agents/gerrit/agent.test.ts | 2 +- fdm-agents/src/agents/gerrit/agent.ts | 22 +-- fdm-agents/src/agents/gerrit/schema.ts | 1 - fdm-agents/src/runners/one-shot.test.ts | 20 +-- fdm-agents/src/runners/one-shot.ts | 24 +-- .../farm.$b_id_farm.$calendar.gerrit.tsx | 2 +- fdm-calculator/src/nutrient-advice/index.ts | 156 ++++++++---------- 7 files changed, 109 insertions(+), 118 deletions(-) diff --git a/fdm-agents/src/agents/gerrit/agent.test.ts b/fdm-agents/src/agents/gerrit/agent.test.ts index 0b964689e..1114299da 100644 --- a/fdm-agents/src/agents/gerrit/agent.test.ts +++ b/fdm-agents/src/agents/gerrit/agent.test.ts @@ -46,7 +46,7 @@ describe("Gerrit Agent", () => { }) it("should export a tool limit warning message", () => { - expect(TOOL_LIMIT_WARNING).toContain("final JSON response NOW") + expect(TOOL_LIMIT_WARNING).toContain("final fertilizer plan NOW") }) }) diff --git a/fdm-agents/src/agents/gerrit/agent.ts b/fdm-agents/src/agents/gerrit/agent.ts index 2cae38a72..0032b73e1 100644 --- a/fdm-agents/src/agents/gerrit/agent.ts +++ b/fdm-agents/src/agents/gerrit/agent.ts @@ -1,6 +1,6 @@ import { AIMessage } from "@langchain/core/messages" import type { BaseMessage } from "@langchain/core/messages" -import { createAgent, dynamicSystemPromptMiddleware } from "langchain" +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" @@ -14,7 +14,7 @@ export const GERRIT_DESCRIPTION = export const DEFAULT_TOOL_ROUND_LIMIT = 40 export const TOOL_LIMIT_WARNING = - "IMPORTANT: You are approaching the maximum number of allowed tool calls. You MUST produce your final JSON response NOW using the best plan you have so far. Do NOT call any more tools — output your JSON immediately." + "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. @@ -190,19 +190,19 @@ export function createFertilizerPlannerAgent( "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), - middleware: [ - dynamicSystemPromptMiddleware((state) => { - const rounds = countToolRoundtrips(state.messages) - return rounds >= toolRoundLimit - ? `${GERRIT_INSTRUCTION}\n\n${TOOL_LIMIT_WARNING}` - : GERRIT_INSTRUCTION - }), - ], - responseFormat: FertilizerPlanSchema, + 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 index 53f10380e..7eccc78e8 100644 --- a/fdm-agents/src/agents/gerrit/schema.ts +++ b/fdm-agents/src/agents/gerrit/schema.ts @@ -14,7 +14,6 @@ export const FertilizerApplicationSchema = z.object({ .describe("Display unit for the application amount"), p_app_date: z .string() - .regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format") .describe("Application date in YYYY-MM-DD format"), p_app_method: z.string().describe("Application method identifier"), }) diff --git a/fdm-agents/src/runners/one-shot.test.ts b/fdm-agents/src/runners/one-shot.test.ts index 7fd034549..c4986ba02 100644 --- a/fdm-agents/src/runners/one-shot.test.ts +++ b/fdm-agents/src/runners/one-shot.test.ts @@ -56,7 +56,7 @@ describe("runOneShotAgent", () => { [ "updates", { - agent: { + model_request: { messages: [ makeAIMessage([ { type: "thinking", thinking: "Let me plan..." }, @@ -75,7 +75,7 @@ describe("runOneShotAgent", () => { const agent = createMockAgent([ [ "updates", - { agent: { messages: [makeAIMessage("The plan is ready.")] } }, + { model_request: { messages: [makeAIMessage("The plan is ready.")] } }, ], ]) const result = await runOneShotAgent(agent, "Generate plan") @@ -93,7 +93,7 @@ describe("runOneShotAgent", () => { it("should pass context to agent.stream when posthog is provided", async () => { const agent = createMockAgent([ - ["updates", { agent: { messages: [makeAIMessage("Done.")] } }], + ["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) @@ -110,7 +110,7 @@ describe("runOneShotAgent", () => { [ "updates", { - agent: { + model_request: { messages: [ makeAIMessage("", { tool_calls: [{ name: "getFarmFields" }], @@ -126,7 +126,7 @@ describe("runOneShotAgent", () => { [ "updates", { - agent: { + model_request: { messages: [ makeAIMessage("Done.", { usage_metadata: { @@ -149,7 +149,7 @@ describe("runOneShotAgent", () => { it("should return null usage when no usage metadata is present", async () => { const agent = createMockAgent([ - ["updates", { agent: { messages: [makeAIMessage("Done.")] } }], + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], ]) const result = await runOneShotAgent(agent, "Generate plan") expect(result.usage).toBeNull() @@ -161,7 +161,7 @@ describe("runOneShotAgent", () => { "updates", { tools: { messages: [makeToolMessage("getFarmFields")] } }, ], - ["updates", { agent: { messages: [makeAIMessage("Done.")] } }], + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], ]) const result = await runOneShotAgent(agent, "Generate plan") expect(result.toolCalls).toContain("getFarmFields") @@ -172,7 +172,7 @@ describe("runOneShotAgent", () => { [ "updates", { - agent: { + model_request: { messages: [ makeAIMessage("", { tool_calls: [{ name: "simulateFarmPlan" }], @@ -181,7 +181,7 @@ describe("runOneShotAgent", () => { }, }, ], - ["updates", { agent: { messages: [makeAIMessage("Done.")] } }], + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], ]) const result = await runOneShotAgent(agent, "Generate plan") expect(result.toolCalls).toContain("simulateFarmPlan") @@ -197,7 +197,7 @@ describe("runOneShotAgent", () => { "updates", { tools: { messages: [makeToolMessage("searchFertilizers")] } }, ], - ["updates", { agent: { messages: [makeAIMessage("Done.")] } }], + ["updates", { model_request: { messages: [makeAIMessage("Done.")] } }], ]) const result = await runOneShotAgent(agent, "Generate plan") expect( diff --git a/fdm-agents/src/runners/one-shot.ts b/fdm-agents/src/runners/one-shot.ts index caff7666e..d4bcb7cd8 100644 --- a/fdm-agents/src/runners/one-shot.ts +++ b/fdm-agents/src/runners/one-shot.ts @@ -140,22 +140,24 @@ export async function runOneShotAgent( const node = Object.keys(data ?? {})[0] const nodeData = node ? data[node] : data - if (node === "agent" && Array.isArray(nodeData?.messages)) { - const lastMsg = nodeData.messages.at(-1) - if (isAIMessage(lastMsg)) { - if (lastMsg.usage_metadata) { - inputTokens += lastMsg.usage_metadata.input_tokens ?? 0 - outputTokens += lastMsg.usage_metadata.output_tokens ?? 0 + 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 (lastMsg.tool_calls?.length) { - for (const tc of lastMsg.tool_calls) { + if (msg.tool_calls?.length) { + for (const tc of msg.tool_calls) { if (tc.name) toolCalls.push(tc.name) } - } else { - // No pending tool calls — this is the final response - finalResponse = extractTextContent(lastMsg.content) } } + 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) + } } if (node === "tools" && Array.isArray(nodeData?.messages)) { 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 ac0775c75..e063869e8 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 @@ -785,7 +785,7 @@ export async function action({ request, params }: ActionFunctionArgs) { return dataWithError( null, err instanceof Error - ? err.message + ? err.message.slice(0, 200) : "Gerrit kon geen plan genereren.", ) } 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 } /** From 223b7967fcfb99c5922ecbe2be8a8afd25493418 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Fri, 15 May 2026 12:25:22 +0200 Subject: [PATCH 16/17] feat: filter out non-productive fields for fertilizer plan --- fdm-agents/src/index.test.ts | 107 +++++++++++++++++- fdm-agents/src/index.ts | 14 ++- .../farm.$b_id_farm.$calendar.gerrit.tsx | 4 +- 3 files changed, 120 insertions(+), 5 deletions(-) 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 449e83108..44f4dd28d 100644 --- a/fdm-agents/src/index.ts +++ b/fdm-agents/src/index.ts @@ -44,6 +44,7 @@ export interface FarmFieldSummary { 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 @@ -102,9 +103,18 @@ 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 != 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"}`, 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 e063869e8..88fb79ecc 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 @@ -697,14 +697,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, From b0b5f4bb1cfc1d829936a96780e22751f15d9157 Mon Sep 17 00:00:00 2001 From: SvenVw <37927107+SvenVw@users.noreply.github.com> Date: Fri, 15 May 2026 12:27:21 +0200 Subject: [PATCH 17/17] refactor: tune to better use manure and not use English terms in explaination --- fdm-agents/src/agents/gerrit/agent.ts | 17 ++++++++++++----- fdm-agents/src/agents/gerrit/schema.ts | 5 ++++- .../routes/farm.$b_id_farm.$calendar.gerrit.tsx | 15 ++++++++++----- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/fdm-agents/src/agents/gerrit/agent.ts b/fdm-agents/src/agents/gerrit/agent.ts index 0032b73e1..db2d024d1 100644 --- a/fdm-agents/src/agents/gerrit/agent.ts +++ b/fdm-agents/src/agents/gerrit/agent.ts @@ -39,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. @@ -49,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): @@ -93,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. diff --git a/fdm-agents/src/agents/gerrit/schema.ts b/fdm-agents/src/agents/gerrit/schema.ts index 7eccc78e8..e3188cbbd 100644 --- a/fdm-agents/src/agents/gerrit/schema.ts +++ b/fdm-agents/src/agents/gerrit/schema.ts @@ -4,7 +4,10 @@ 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().describe("Catalogue ID of the fertilizer"), + 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() 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 88fb79ecc..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 @@ -317,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), @@ -859,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( @@ -889,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,