From a4c33068f443b8e5bbf9eb2c1462cc7d2dac5de7 Mon Sep 17 00:00:00 2001 From: Aadesh Kheria Date: Tue, 14 Apr 2026 11:16:20 -0700 Subject: [PATCH] pr changes --- .../app/api/latest/ai/query/[mode]/route.ts | 6 +- .../internal/mcp-review/add-manual/route.ts | 21 +-- .../internal/mcp-review/delete/route.ts | 13 +- .../mcp-review/mark-reviewed/route.ts | 21 +-- .../mcp-review/update-correction/route.ts | 21 +-- apps/backend/src/lib/ai/mcp-logger.ts | 10 +- apps/backend/src/lib/ai/tools/docs.ts | 4 +- apps/internal-tool/package.json | 2 +- apps/internal-tool/src/app/app-client.tsx | 4 +- .../src/app/handler/[...stack]/page.tsx | 2 +- apps/internal-tool/src/app/layout.tsx | 2 +- apps/internal-tool/src/stack.ts | 2 +- pnpm-lock.yaml | 150 ++++++++++++++++-- 13 files changed, 181 insertions(+), 77 deletions(-) diff --git a/apps/backend/src/app/api/latest/ai/query/[mode]/route.ts b/apps/backend/src/app/api/latest/ai/query/[mode]/route.ts index 00d66eacb..bed3aed25 100644 --- a/apps/backend/src/app/api/latest/ai/query/[mode]/route.ts +++ b/apps/backend/src/app/api/latest/ai/query/[mode]/route.ts @@ -8,10 +8,10 @@ import { getVerifiedQaContext } from "@/lib/ai/verified-qa"; import { listManagedProjectIds } from "@/lib/projects"; import { SmartResponse } from "@/route-handlers/smart-response"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; +import { runAsynchronouslyAndWaitUntil } from "@/utils/background-tasks"; import { yupMixed, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { StatusError } from "@stackframe/stack-shared/dist/utils/errors"; import { Json } from "@stackframe/stack-shared/dist/utils/json"; -import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises"; import { generateText, ModelMessage, stepCountIs, streamText } from "ai"; export const POST = createSmartRouteHandler({ @@ -149,9 +149,9 @@ export const POST = createSmartRouteHandler({ modelId: String(model.modelId), errorMessage: undefined, }); - runAsynchronously(logPromise); + runAsynchronouslyAndWaitUntil(logPromise); - runAsynchronously(reviewMcpCall({ + runAsynchronouslyAndWaitUntil(reviewMcpCall({ logPromise, correlationId, question, diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/add-manual/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/add-manual/route.ts index 98821aac9..fed36bcc9 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/add-manual/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/add-manual/route.ts @@ -1,4 +1,4 @@ -import { getConnection } from "@/lib/ai/mcp-logger"; +import { getConnectionOrThrow } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable, getNodeEnvironment } from "@stackframe/stack-shared/dist/utils/env"; @@ -26,23 +26,16 @@ export const POST = createSmartRouteHandler({ success: yupBoolean().defined(), }).defined(), }), - handler: async ({ body }, fullReq) => { + handler: async ({ auth, body }) => { + const user = auth.user; if (getNodeEnvironment() !== "development") { - const metadata = fullReq.auth?.user?.client_read_only_metadata; - if (!(metadata && typeof metadata === "object" && "approved" in metadata && metadata.approved === true)) { + const metadata = user.client_read_only_metadata; + if (!(metadata && typeof metadata === "object" && "isAiChatReviewer" in metadata && metadata.isAiChatReviewer === true)) { throw new StatusError(StatusError.Forbidden, "You are not approved to perform MCP review operations."); } } - const conn = await getConnection(); - if (!conn) { - throw new StatusError(503, "SpacetimeDB unavailable"); - } - - const authUser = fullReq.auth?.user; - if (!authUser) { - throw new StatusError(StatusError.Unauthorized, "Authentication required"); - } + const conn = await getConnectionOrThrow(); const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); await conn.reducers.addManualQa({ @@ -50,7 +43,7 @@ export const POST = createSmartRouteHandler({ question: body.question, answer: body.answer, publish: body.publish, - reviewedBy: authUser.display_name ?? authUser.primary_email ?? authUser.id, + reviewedBy: user.display_name ?? user.primary_email ?? user.id, }); return { diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/delete/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/delete/route.ts index 78e8e3398..e3126c65d 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/delete/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/delete/route.ts @@ -1,4 +1,4 @@ -import { getConnection } from "@/lib/ai/mcp-logger"; +import { getConnectionOrThrow } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable, getNodeEnvironment } from "@stackframe/stack-shared/dist/utils/env"; @@ -24,18 +24,15 @@ export const POST = createSmartRouteHandler({ success: yupBoolean().defined(), }).defined(), }), - handler: async ({ body }, fullReq) => { + handler: async ({ auth, body }) => { if (getNodeEnvironment() !== "development") { - const metadata = fullReq.auth?.user?.client_read_only_metadata; - if (!(metadata && typeof metadata === "object" && "approved" in metadata && metadata.approved === true)) { + const metadata = auth.user.client_read_only_metadata; + if (!(metadata && typeof metadata === "object" && "isAiChatReviewer" in metadata && metadata.isAiChatReviewer === true)) { throw new StatusError(StatusError.Forbidden, "You are not approved to perform MCP review operations."); } } - const conn = await getConnection(); - if (!conn) { - throw new StatusError(503, "SpacetimeDB unavailable"); - } + const conn = await getConnectionOrThrow(); const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); await conn.reducers.deleteQaEntry({ diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/mark-reviewed/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/mark-reviewed/route.ts index 2d581e846..5500fe15b 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/mark-reviewed/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/mark-reviewed/route.ts @@ -1,4 +1,4 @@ -import { getConnection } from "@/lib/ai/mcp-logger"; +import { getConnectionOrThrow } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable, getNodeEnvironment } from "@stackframe/stack-shared/dist/utils/env"; @@ -24,29 +24,22 @@ export const POST = createSmartRouteHandler({ success: yupBoolean().defined(), }).defined(), }), - handler: async ({ body }, fullReq) => { + handler: async ({ auth, body }) => { + const user = auth.user; if (getNodeEnvironment() !== "development") { - const metadata = fullReq.auth?.user?.client_read_only_metadata; - if (!(metadata && typeof metadata === "object" && "approved" in metadata && metadata.approved === true)) { + const metadata = user.client_read_only_metadata; + if (!(metadata && typeof metadata === "object" && "isAiChatReviewer" in metadata && metadata.isAiChatReviewer === true)) { throw new StatusError(StatusError.Forbidden, "You are not approved to perform MCP review operations."); } } - const conn = await getConnection(); - if (!conn) { - throw new StatusError(503, "SpacetimeDB unavailable"); - } - - const authUser = fullReq.auth?.user; - if (!authUser) { - throw new StatusError(StatusError.Unauthorized, "Authentication required"); - } + const conn = await getConnectionOrThrow(); const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); await conn.reducers.markHumanReviewed({ token, correlationId: body.correlationId, - reviewedBy: authUser.display_name ?? authUser.primary_email ?? authUser.id, + reviewedBy: user.display_name ?? user.primary_email ?? user.id, }); return { diff --git a/apps/backend/src/app/api/latest/internal/mcp-review/update-correction/route.ts b/apps/backend/src/app/api/latest/internal/mcp-review/update-correction/route.ts index f4206c73e..dfb40a785 100644 --- a/apps/backend/src/app/api/latest/internal/mcp-review/update-correction/route.ts +++ b/apps/backend/src/app/api/latest/internal/mcp-review/update-correction/route.ts @@ -1,4 +1,4 @@ -import { getConnection } from "@/lib/ai/mcp-logger"; +import { getConnectionOrThrow } from "@/lib/ai/mcp-logger"; import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler"; import { adaptSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields"; import { getEnvVariable, getNodeEnvironment } from "@stackframe/stack-shared/dist/utils/env"; @@ -27,23 +27,16 @@ export const POST = createSmartRouteHandler({ success: yupBoolean().defined(), }).defined(), }), - handler: async ({ body }, fullReq) => { + handler: async ({ auth, body }) => { + const user = auth.user; if (getNodeEnvironment() !== "development") { - const metadata = fullReq.auth?.user?.client_read_only_metadata; - if (!(metadata && typeof metadata === "object" && "approved" in metadata && metadata.approved === true)) { + const metadata = user.client_read_only_metadata; + if (!(metadata && typeof metadata === "object" && "isAiChatReviewer" in metadata && metadata.isAiChatReviewer === true)) { throw new StatusError(StatusError.Forbidden, "You are not approved to perform MCP review operations."); } } - const conn = await getConnection(); - if (!conn) { - throw new StatusError(503, "SpacetimeDB unavailable"); - } - - const authUser = fullReq.auth?.user; - if (!authUser) { - throw new StatusError(StatusError.Unauthorized, "Authentication required"); - } + const conn = await getConnectionOrThrow(); const token = getEnvVariable("STACK_MCP_LOG_TOKEN"); await conn.reducers.updateHumanCorrection({ @@ -52,7 +45,7 @@ export const POST = createSmartRouteHandler({ correctedQuestion: body.correctedQuestion, correctedAnswer: body.correctedAnswer, publish: body.publish, - reviewedBy: authUser.display_name ?? authUser.primary_email ?? authUser.id, + reviewedBy: user.display_name ?? user.primary_email ?? user.id, }); return { diff --git a/apps/backend/src/lib/ai/mcp-logger.ts b/apps/backend/src/lib/ai/mcp-logger.ts index 97ebb2524..f8a9a3d04 100644 --- a/apps/backend/src/lib/ai/mcp-logger.ts +++ b/apps/backend/src/lib/ai/mcp-logger.ts @@ -1,5 +1,5 @@ import { getEnvVariable } from "@stackframe/stack-shared/dist/utils/env"; -import { captureError } from "@stackframe/stack-shared/dist/utils/errors"; +import { StackAssertionError, captureError } from "@stackframe/stack-shared/dist/utils/errors"; import { DbConnection } from "./spacetimedb-bindings"; import type { LogMcpCallParams } from "./spacetimedb-bindings/types/reducers"; @@ -37,6 +37,14 @@ export async function getConnection(): Promise { return await connectionPromise; } +export async function getConnectionOrThrow(): Promise { + const conn = await getConnection(); + if (!conn) { + throw new StackAssertionError("SpacetimeDB connection unavailable"); + } + return conn; +} + export async function logMcpCall(entry: McpLogEntry): Promise { const conn = await getConnection(); if (!conn) { diff --git a/apps/backend/src/lib/ai/tools/docs.ts b/apps/backend/src/lib/ai/tools/docs.ts index 8a7821d34..b9e787cbc 100644 --- a/apps/backend/src/lib/ai/tools/docs.ts +++ b/apps/backend/src/lib/ai/tools/docs.ts @@ -33,7 +33,7 @@ async function postDocsToolAction(action: Record): Promise): Promise | null; - if (!metadata?.approved) { + if (!metadata?.isAiChatReviewer) { return (
diff --git a/apps/internal-tool/src/app/handler/[...stack]/page.tsx b/apps/internal-tool/src/app/handler/[...stack]/page.tsx index d5b80af44..59ae576f3 100644 --- a/apps/internal-tool/src/app/handler/[...stack]/page.tsx +++ b/apps/internal-tool/src/app/handler/[...stack]/page.tsx @@ -1,6 +1,6 @@ "use client"; -import { StackHandler } from "@stackframe/react"; +import { StackHandler } from "@stackframe/stack"; import { useEffect, useState } from "react"; export default function Handler() { diff --git a/apps/internal-tool/src/app/layout.tsx b/apps/internal-tool/src/app/layout.tsx index 2abb02a3a..d0dd7d4dc 100644 --- a/apps/internal-tool/src/app/layout.tsx +++ b/apps/internal-tool/src/app/layout.tsx @@ -1,7 +1,7 @@ "use client"; import { Suspense } from "react"; -import { StackProvider, StackTheme } from "@stackframe/react"; +import { StackProvider, StackTheme } from "@stackframe/stack"; import { stackClientApp } from "../stack"; import Loading from "./loading"; import "./globals.css"; diff --git a/apps/internal-tool/src/stack.ts b/apps/internal-tool/src/stack.ts index 6d3a4efde..7de289ad9 100644 --- a/apps/internal-tool/src/stack.ts +++ b/apps/internal-tool/src/stack.ts @@ -1,4 +1,4 @@ -import { StackClientApp } from "@stackframe/react"; +import { StackClientApp } from "@stackframe/stack"; const IS_DEV = process.env.NODE_ENV === "development"; const PLACEHOLDER = "REPLACE_ME"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 612ee25b7..3aaeaedea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -772,9 +772,9 @@ importers: apps/internal-tool: dependencies: - '@stackframe/react': + '@stackframe/stack': specifier: workspace:* - version: link:../../packages/react + version: link:../../packages/stack '@stackframe/stack-shared': specifier: workspace:* version: link:../../packages/stack-shared @@ -5651,6 +5651,9 @@ packages: '@next/env@15.5.10': resolution: {integrity: sha512-plg+9A/KoZcTS26fe15LHg+QxReTazrIOoKKUC3Uz4leGGeNPgLHdevVraAAOX0snnUs3WkRx3eUQpj9mreG6A==} + '@next/env@16.1.5': + resolution: {integrity: sha512-CRSCPJiSZoi4Pn69RYBDI9R7YK2g59vLexPQFXY0eyw+ILevIenCywzg+DqmlBik9zszEnw2HLFOUlLAcJbL7g==} + '@next/env@16.2.2': resolution: {integrity: sha512-LqSGz5+xGk9EL/iBDr2yo/CgNQV6cFsNhRR2xhSXYh7B/hb4nePCxlmDvGEKG30NMHDFf0raqSyOZiQrO7BkHQ==} @@ -5678,6 +5681,12 @@ packages: cpu: [arm64] os: [darwin] + '@next/swc-darwin-arm64@16.1.5': + resolution: {integrity: sha512-eK7Wdm3Hjy/SCL7TevlH0C9chrpeOYWx2iR7guJDaz4zEQKWcS1IMVfMb9UKBFMg1XgzcPTYPIp1Vcpukkjg6Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@next/swc-darwin-arm64@16.2.2': resolution: {integrity: sha512-B92G3ulrwmkDSEJEp9+XzGLex5wC1knrmCSIylyVeiAtCIfvEJYiN3v5kXPlYt5R4RFlsfO/v++aKV63Acrugg==} engines: {node: '>= 10'} @@ -5696,6 +5705,12 @@ packages: cpu: [x64] os: [darwin] + '@next/swc-darwin-x64@16.1.5': + resolution: {integrity: sha512-foQscSHD1dCuxBmGkbIr6ScAUF6pRoDZP6czajyvmXPAOFNnQUJu2Os1SGELODjKp/ULa4fulnBWoHV3XdPLfA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@next/swc-darwin-x64@16.2.2': resolution: {integrity: sha512-7ZwSgNKJNQiwW0CKhNm9B1WS2L1Olc4B2XY0hPYCAL3epFnugMhuw5TMWzMilQ3QCZcCHoYm9NGWTHbr5REFxw==} engines: {node: '>= 10'} @@ -5716,6 +5731,13 @@ packages: os: [linux] libc: [glibc] + '@next/swc-linux-arm64-gnu@16.1.5': + resolution: {integrity: sha512-qNIb42o3C02ccIeSeKjacF3HXotGsxh/FMk/rSRmCzOVMtoWH88odn2uZqF8RLsSUWHcAqTgYmPD3pZ03L9ZAA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@next/swc-linux-arm64-gnu@16.2.2': resolution: {integrity: sha512-c3m8kBHMziMgo2fICOP/cd/5YlrxDU5YYjAJeQLyFsCqVF8xjOTH/QYG4a2u48CvvZZSj1eHQfBCbyh7kBr30Q==} engines: {node: '>= 10'} @@ -5737,6 +5759,13 @@ packages: os: [linux] libc: [musl] + '@next/swc-linux-arm64-musl@16.1.5': + resolution: {integrity: sha512-U+kBxGUY1xMAzDTXmuVMfhaWUZQAwzRaHJ/I6ihtR5SbTVUEaDRiEU9YMjy1obBWpdOBuk1bcm+tsmifYSygfw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + '@next/swc-linux-arm64-musl@16.2.2': resolution: {integrity: sha512-VKLuscm0P/mIfzt+SDdn2+8TNNJ7f0qfEkA+az7OqQbjzKdBxAHs0UvuiVoCtbwX+dqMEL9U54b5wQ/aN3dHeg==} engines: {node: '>= 10'} @@ -5758,6 +5787,13 @@ packages: os: [linux] libc: [glibc] + '@next/swc-linux-x64-gnu@16.1.5': + resolution: {integrity: sha512-gq2UtoCpN7Ke/7tKaU7i/1L7eFLfhMbXjNghSv0MVGF1dmuoaPeEVDvkDuO/9LVa44h5gqpWeJ4mRRznjDv7LA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + '@next/swc-linux-x64-gnu@16.2.2': resolution: {integrity: sha512-kU3OPHJq6sBUjOk7wc5zJ7/lipn8yGldMoAv4z67j6ov6Xo/JvzA7L7LCsyzzsXmgLEhk3Qkpwqaq/1+XpNR3g==} engines: {node: '>= 10'} @@ -5779,6 +5815,13 @@ packages: os: [linux] libc: [musl] + '@next/swc-linux-x64-musl@16.1.5': + resolution: {integrity: sha512-bQWSE729PbXT6mMklWLf8dotislPle2L70E9q6iwETYEOt092GDn0c+TTNj26AjmeceSsC4ndyGsK5nKqHYXjQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + '@next/swc-linux-x64-musl@16.2.2': resolution: {integrity: sha512-CKXRILyErMtUftp+coGcZ38ZwE/Aqq45VMCcRLr2I4OXKrgxIBDXHnBgeX/UMil0S09i2JXaDL3Q+TN8D/cKmg==} engines: {node: '>= 10'} @@ -5798,6 +5841,12 @@ packages: cpu: [arm64] os: [win32] + '@next/swc-win32-arm64-msvc@16.1.5': + resolution: {integrity: sha512-LZli0anutkIllMtTAWZlDqdfvjWX/ch8AFK5WgkNTvaqwlouiD1oHM+WW8RXMiL0+vAkAJyAGEzPPjO+hnrSNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@next/swc-win32-arm64-msvc@16.2.2': resolution: {integrity: sha512-sS/jSk5VUoShUqINJFvNjVT7JfR5ORYj/+/ZpOYbbIohv/lQfduWnGAycq2wlknbOql2xOR0DoV0s6Xfcy49+g==} engines: {node: '>= 10'} @@ -5822,6 +5871,12 @@ packages: cpu: [x64] os: [win32] + '@next/swc-win32-x64-msvc@16.1.5': + resolution: {integrity: sha512-7is37HJTNQGhjPpQbkKjKEboHYQnCgpVt/4rBrrln0D9nderNxZ8ZWs8w1fAtzUx7wEyYjQ+/13myFgFj6K2Ng==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@next/swc-win32-x64-msvc@16.2.2': resolution: {integrity: sha512-aHaKceJgdySReT7qeck5oShucxWRiiEuwCGK8HHALe6yZga8uyFpLkPgaRw3kkF04U7ROogL/suYCNt/+CuXGA==} engines: {node: '>= 10'} @@ -11269,10 +11324,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - baseline-browser-mapping@2.8.21: - resolution: {integrity: sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==} - hasBin: true - basic-auth@2.0.1: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} engines: {node: '>= 0.8'} @@ -15584,6 +15635,27 @@ packages: sass: optional: true + next@16.1.5: + resolution: {integrity: sha512-f+wE+NSbiQgh3DSAlTaw2FwY5yGdVViAtp8TotNQj4kk4Q8Bh1sC/aL9aH+Rg1YAVn18OYXsRDT7U/079jgP7w==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + next@16.2.2: resolution: {integrity: sha512-i6AJdyVa4oQjyvX/6GeER8dpY/xlIV+4NMv/svykcLtURJSy/WzDnnUk/TM4d0uewFHK7xSQz4TbIwPgjky+3A==} engines: {node: '>=20.9.0'} @@ -23377,6 +23449,8 @@ snapshots: '@next/env@15.5.10': {} + '@next/env@16.1.5': {} + '@next/env@16.2.2': {} '@next/eslint-plugin-next@14.2.17': @@ -23401,6 +23475,9 @@ snapshots: '@next/swc-darwin-arm64@15.5.7': optional: true + '@next/swc-darwin-arm64@16.1.5': + optional: true + '@next/swc-darwin-arm64@16.2.2': optional: true @@ -23410,6 +23487,9 @@ snapshots: '@next/swc-darwin-x64@15.5.7': optional: true + '@next/swc-darwin-x64@16.1.5': + optional: true + '@next/swc-darwin-x64@16.2.2': optional: true @@ -23419,6 +23499,9 @@ snapshots: '@next/swc-linux-arm64-gnu@15.5.7': optional: true + '@next/swc-linux-arm64-gnu@16.1.5': + optional: true + '@next/swc-linux-arm64-gnu@16.2.2': optional: true @@ -23428,6 +23511,9 @@ snapshots: '@next/swc-linux-arm64-musl@15.5.7': optional: true + '@next/swc-linux-arm64-musl@16.1.5': + optional: true + '@next/swc-linux-arm64-musl@16.2.2': optional: true @@ -23437,6 +23523,9 @@ snapshots: '@next/swc-linux-x64-gnu@15.5.7': optional: true + '@next/swc-linux-x64-gnu@16.1.5': + optional: true + '@next/swc-linux-x64-gnu@16.2.2': optional: true @@ -23446,6 +23535,9 @@ snapshots: '@next/swc-linux-x64-musl@15.5.7': optional: true + '@next/swc-linux-x64-musl@16.1.5': + optional: true + '@next/swc-linux-x64-musl@16.2.2': optional: true @@ -23455,6 +23547,9 @@ snapshots: '@next/swc-win32-arm64-msvc@15.5.7': optional: true + '@next/swc-win32-arm64-msvc@16.1.5': + optional: true + '@next/swc-win32-arm64-msvc@16.2.2': optional: true @@ -23467,6 +23562,9 @@ snapshots: '@next/swc-win32-x64-msvc@15.5.7': optional: true + '@next/swc-win32-x64-msvc@16.1.5': + optional: true + '@next/swc-win32-x64-msvc@16.2.2': optional: true @@ -31132,8 +31230,6 @@ snapshots: baseline-browser-mapping@2.10.16: {} - baseline-browser-mapping@2.8.21: {} - basic-auth@2.0.1: dependencies: safe-buffer: 5.1.2 @@ -31287,7 +31383,7 @@ snapshots: browserslist@4.23.1: dependencies: - caniuse-lite: 1.0.30001696 + caniuse-lite: 1.0.30001751 electron-to-chromium: 1.4.803 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) @@ -31301,7 +31397,7 @@ snapshots: browserslist@4.27.0: dependencies: - baseline-browser-mapping: 2.8.21 + baseline-browser-mapping: 2.10.16 caniuse-lite: 1.0.30001751 electron-to-chromium: 1.5.244 node-releases: 2.0.27 @@ -33129,7 +33225,7 @@ snapshots: debug: 4.4.3 enhanced-resolve: 5.17.0 eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 @@ -33179,7 +33275,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: @@ -33239,7 +33335,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.56.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -36962,6 +37058,31 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@16.1.5(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@next/env': 16.1.5 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.10.16 + caniuse-lite: 1.0.30001751 + postcss: 8.4.31 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.2.3) + optionalDependencies: + '@next/swc-darwin-arm64': 16.1.5 + '@next/swc-darwin-x64': 16.1.5 + '@next/swc-linux-arm64-gnu': 16.1.5 + '@next/swc-linux-arm64-musl': 16.1.5 + '@next/swc-linux-x64-gnu': 16.1.5 + '@next/swc-linux-x64-musl': 16.1.5 + '@next/swc-win32-arm64-msvc': 16.1.5 + '@next/swc-win32-x64-msvc': 16.1.5 + '@opentelemetry/api': 1.9.0 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + next@16.2.2(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: '@next/env': 16.2.2 @@ -39490,7 +39611,7 @@ snapshots: dependencies: decode-ico: 0.4.1 ico-endec: 0.1.6 - sharp: 0.34.4 + sharp: 0.34.5 sharp@0.33.5: dependencies: @@ -39577,7 +39698,6 @@ snapshots: '@img/sharp-win32-arm64': 0.34.5 '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 - optional: true shebang-command@1.2.0: dependencies: