Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions apps/unsubscriber/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@
},
"devDependencies": {
"@types/dotenv": "8.2.3",
"@types/node": "24.9.1",
"playwright": "1.56.1",
"tsx": "4.20.6",
"@types/node": "24.10.1",
"playwright": "1.57.0",
"tsx": "4.21.0",
"typescript": "5.9.3"
},
"dependencies": {
"@ai-sdk/amazon-bedrock": "3.0.45",
"@ai-sdk/anthropic": "2.0.35",
"@ai-sdk/google": "2.0.23",
"@ai-sdk/openai": "2.0.53",
"@ai-sdk/amazon-bedrock": "3.0.67",
"@ai-sdk/anthropic": "2.0.53",
"@ai-sdk/google": "2.0.44",
"@ai-sdk/openai": "2.0.77",
"@fastify/cors": "11.1.0",
"@t3-oss/env-core": "0.13.8",
"ai": "5.0.76",
"ai": "5.0.106",
"dotenv": "17.2.3",
"fastify": "5.6.1",
"fastify": "5.6.2",
"zod": "3.25.46"
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import format from "date-fns/format";
import { format } from "date-fns/format";
import { CalendarIcon } from "lucide-react";
import { cn } from "@/utils";
import { Button } from "@/components/ui/button";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export function BulkUnsubscribeRowDesktop({
onChange={() => onToggleSelect?.(item.name)}
/>
</TableCell>
<TableCell className="max-w-[250px] truncate min-[1550px]:max-w-[300px] py-3">
<TableCell className="max-w-[250px] truncate py-3">
<div className="flex flex-col">
<span className="font-medium">{item.fromName || item.name}</span>
{item.fromName && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import { useCallback, useEffect, useMemo, useState } from "react";
import useSWR from "swr";
import subDays from "date-fns/subDays";
import { subDays } from "date-fns/subDays";
import { usePostHog } from "posthog-js/react";
import { ArchiveIcon, FilterIcon } from "lucide-react";
import type { DateRange } from "react-day-picker";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/(app)/[emailAccountId]/stats/Stats.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import { useState, useMemo, useCallback, useEffect } from "react";
import type { DateRange } from "react-day-picker";
import subDays from "date-fns/subDays";
import { subDays } from "date-fns/subDays";
import { EmailAnalytics } from "@/app/(app)/[emailAccountId]/stats/EmailAnalytics";
import { StatsSummary } from "@/app/(app)/[emailAccountId]/stats/StatsSummary";
import { StatsOnboarding } from "@/app/(app)/[emailAccountId]/stats/StatsOnboarding";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/(marketing)
Submodule (marketing) updated from ab6f2a to 30b326
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import groupBy from "lodash/groupBy";
import subDays from "date-fns/subDays";
import { subDays } from "date-fns/subDays";
import prisma from "@/utils/prisma";
import { ActionType } from "@/generated/prisma/enums";
import { createScopedLogger } from "@/utils/logger";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/api/resend/digest/all/route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextResponse } from "next/server";
import subDays from "date-fns/subDays";
import { subDays } from "date-fns/subDays";
import prisma from "@/utils/prisma";
import { withError } from "@/utils/middleware";
import { env } from "@/env";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/api/resend/summary/all/route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextResponse } from "next/server";
import subDays from "date-fns/subDays";
import { subDays } from "date-fns/subDays";
import prisma from "@/utils/prisma";
import { withError } from "@/utils/middleware";
import { env } from "@/env";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/api/resend/summary/route.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { z } from "zod";
import { NextResponse } from "next/server";
import subHours from "date-fns/subHours";
import { subHours } from "date-fns/subHours";
import { sendSummaryEmail } from "@inboxzero/resend";
import { withEmailAccount, withError } from "@/utils/middleware";
import { env } from "@/env";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/api/user/stats/by-period/route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NextResponse } from "next/server";
import format from "date-fns/format";
import { format } from "date-fns/format";
import { z } from "zod";
import sumBy from "lodash/sumBy";
import { zodPeriod } from "@inboxzero/tinybird";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/api/user/stats/sender-emails/route.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { NextResponse } from "next/server";
import { z } from "zod";
import format from "date-fns/format";
import { format } from "date-fns/format";
import { zodPeriod } from "@inboxzero/tinybird";
import { withEmailAccount } from "@/utils/middleware";
import prisma from "@/utils/prisma";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/components/DatePickerWithRange.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"use client";

import type * as React from "react";
import format from "date-fns/format";
import { format } from "date-fns/format";
import { CalendarIcon, ChevronDown } from "lucide-react";
import type { DateRange } from "react-day-picker";
import { cn } from "@/utils";
Expand Down
4 changes: 2 additions & 2 deletions apps/web/components/LegalPage.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import format from "date-fns/format";
import parseISO from "date-fns/parseISO";
import { format } from "date-fns/format";
import { parseISO } from "date-fns/parseISO";

export function LegalPage(props: {
date: string;
Expand Down
121 changes: 61 additions & 60 deletions apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"private": true,
"scripts": {
"dev": "cross-env NODE_OPTIONS=--max_old_space_size=16384 next dev --turbopack",
"build": "cross-env NODE_OPTIONS=--max_old_space_size=16384 prisma migrate deploy && next build",
"build": "cross-env NODE_OPTIONS=--max_old_space_size=16384 next build",
"start": "next start",
"start:standalone": "node .next/standalone/server.js",
"lint": "biome check .",
Expand All @@ -16,21 +16,22 @@
"postinstall": "prisma generate"
},
"dependencies": {
"@ai-sdk/amazon-bedrock": "3.0.45",
"@ai-sdk/anthropic": "2.0.35",
"@ai-sdk/gateway": "2.0.0",
"@ai-sdk/google": "2.0.23",
"@ai-sdk/groq": "2.0.24",
"@ai-sdk/openai": "2.0.53",
"@ai-sdk/amazon-bedrock": "3.0.67",
"@ai-sdk/anthropic": "2.0.53",
"@ai-sdk/gateway": "2.0.18",
"@ai-sdk/google": "2.0.44",
"@ai-sdk/groq": "2.0.32",
"@ai-sdk/mcp": "0.0.11",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

@ai-sdk/mcp npm package versions releases

💡 Result:

Brief summary — @ai-sdk/mcp npm package:

  • Package exists and is published under the @ai-sdk scope (used by the AI SDK). [1]
  • Latest published version (most recent release) appears to be 0.0.11 (listed as released ~6 hours ago in the package index snapshot). [1]
  • The AI SDK docs reference importing from "@ai-sdk/mcp" (API: experimental_createMCPClient). [2]

Sources:
[1] Ecosyste.ms / npm package summary for @ai-sdk/mcp.
[2] AI SDK documentation referencing @ai-sdk/mcp (experimental_createMCPClient).


🏁 Script executed:

# Check the package.json file for context and comments around this dependency
cd apps/web && head -30 package.json

Repository: elie222/inbox-zero

Length of output: 1160


🏁 Script executed:

# Search for any comments or documentation about @ai-sdk/mcp version pinning
rg -i "mcp|migration" --type json --type md --type ts --type tsx apps/web/ -A 2 -B 2 | head -50

Repository: elie222/inbox-zero

Length of output: 89


🏁 Script executed:

# Search for recent commits or PRs mentioning @ai-sdk/mcp or MCP
git log --oneline --all -- apps/web/package.json | head -20

Repository: elie222/inbox-zero

Length of output: 149


🏁 Script executed:

# Search for MCP usage in the codebase to understand the context
rg "@ai-sdk/mcp|experimental_createMCPClient" --type ts --type tsx -l | head -10

Repository: elie222/inbox-zero

Length of output: 89


🏁 Script executed:

# Check if there are any CHANGELOG or documentation files explaining MCP integration
fd -e md -e txt | xargs grep -l -i "mcp\|@ai-sdk/mcp" 2>/dev/null | head -5

Repository: elie222/inbox-zero

Length of output: 44


Address the pre-release version of @ai-sdk/mcp.

@ai-sdk/mcp is pinned to version 0.0.11, which is a pre-release version marked as experimental by the AI SDK team. While this appears to be the latest available version (and intentionally updated in a recent "fix versions" commit), pre-release versions lack stability guarantees and may introduce breaking changes. Consider documenting why this pre-release version is necessary, or plan for a migration path once a stable release becomes available.

🤖 Prompt for AI Agents
In apps/web/package.json at line 24, the dependency "@ai-sdk/mcp": "0.0.11" pins
a pre-release experimental version; update the package.json and repository
metadata to either (a) document why this pre-release is required by adding a
comment or README entry referencing the feature/bugfix that necessitates 0.0.11
and its risks, or (b) change the dependency strategy to be more future-proof
(e.g., use a semver range or Git tag that can be migrated) and add an open issue
or TODO in the repo tracking migration to a stable release; ensure the
package.json change is accompanied by a short PR description referencing the
documentation or issue for traceability.

"@ai-sdk/openai": "2.0.77",
"@ai-sdk/provider": "2.0.0",
"@ai-sdk/react": "2.0.76",
"@ai-sdk/react": "2.0.106",
"@asteasolutions/zod-to-openapi": "8.1.0",
"@better-auth/sso": "1.3.28",
"@date-fns/tz": "1.4.1",
"@dub/analytics": "0.0.32",
"@formkit/auto-animate": "0.9.0",
"@googleapis/calendar": "^12.0.0",
"@googleapis/gmail": "15.0.0",
"@googleapis/calendar": "^14.0.0",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Resolve version constraint inconsistency for @googleapis/calendar.

@googleapis/calendar uses a caret range ^14.0.0, while similar Google API packages use fixed versions (e.g., @googleapis/gmail at 16.1.0, @googleapis/people at 6.0.0). This inconsistency could allow unexpected minor/patch version bumps and potential compatibility issues. Align with the fixed-version pattern used elsewhere in the dependency graph.

Suggested change:

-    "@googleapis/calendar": "^14.0.0",
+    "@googleapis/calendar": "14.0.0",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"@googleapis/calendar": "^14.0.0",
"@googleapis/calendar": "14.0.0",
🤖 Prompt for AI Agents
In apps/web/package.json at line 33, the dependency "@googleapis/calendar":
"^14.0.0" uses a caret range while other Google API packages are pinned; change
it to a fixed version (remove the caret, e.g., "14.0.0" or the specific tested
patch you want to pin) to match the project's fixed-version pattern, then
regenerate the lockfile by running your package manager install (npm/yarn/pnpm)
so the lockfile is updated.

"@googleapis/gmail": "16.1.0",
"@googleapis/people": "6.0.0",
"@headlessui/react": "2.2.9",
"@hookform/resolvers": "5.2.2",
Expand All @@ -42,43 +43,43 @@
"@mdx-js/loader": "3.1.1",
"@mdx-js/react": "3.1.1",
"@microsoft/microsoft-graph-client": "3.0.7",
"@modelcontextprotocol/sdk": "1.24.0",
"@modelcontextprotocol/sdk": "1.24.3",
"@mux/mux-player-react": "3.6.1",
"@next/mdx": "15.5.6",
"@next/third-parties": "15.5.6",
"@openrouter/ai-sdk-provider": "1.2.0",
"@next/mdx": "15.5.7",
"@next/third-parties": "15.5.7",
"@openrouter/ai-sdk-provider": "1.4.0",
"@portabletext/react": "4.0.3",
"@prisma/adapter-pg": "7.0.0",
"@prisma/adapter-pg": "7.1.0",
"@prisma/client": "6.16.3",
"@radix-ui/react-alert-dialog": "1.1.15",
"@radix-ui/react-avatar": "1.1.10",
"@radix-ui/react-avatar": "1.1.11",
"@radix-ui/react-checkbox": "1.3.3",
"@radix-ui/react-collapsible": "1.1.12",
"@radix-ui/react-dialog": "1.1.15",
"@radix-ui/react-dropdown-menu": "2.1.16",
"@radix-ui/react-hover-card": "1.1.15",
"@radix-ui/react-label": "2.1.7",
"@radix-ui/react-label": "2.1.8",
"@radix-ui/react-navigation-menu": "1.2.14",
"@radix-ui/react-popover": "1.1.15",
"@radix-ui/react-progress": "1.1.7",
"@radix-ui/react-progress": "1.1.8",
"@radix-ui/react-radio-group": "1.3.8",
"@radix-ui/react-scroll-area": "1.2.10",
"@radix-ui/react-select": "2.2.6",
"@radix-ui/react-separator": "1.1.7",
"@radix-ui/react-slot": "1.2.3",
"@radix-ui/react-separator": "1.1.8",
"@radix-ui/react-slot": "1.2.4",
"@radix-ui/react-switch": "1.2.6",
"@radix-ui/react-tabs": "1.1.13",
"@radix-ui/react-toggle": "1.1.10",
"@radix-ui/react-tooltip": "1.2.8",
"@radix-ui/react-use-controllable-state": "1.2.2",
"@react-email/render": "1.4.0",
"@sentry/nextjs": "10.20.0",
"@serwist/next": "9.2.1",
"@stripe/stripe-js": "8.1.0",
"@sentry/nextjs": "10.28.0",
"@serwist/next": "9.2.3",
"@stripe/stripe-js": "8.5.3",
"@t3-oss/env-nextjs": "0.13.8",
"@tailwindcss/forms": "0.5.10",
"@tailwindcss/typography": "0.5.19",
"@tanstack/react-query": "5.90.5",
"@tanstack/react-query": "5.90.12",
"@tanstack/react-table": "8.21.3",
"@tanstack/react-virtual": "3.13.12",
"@tiptap/extension-mention": "2.26.1",
Expand All @@ -88,63 +89,63 @@
"@tiptap/starter-kit": "2.26.1",
"@tiptap/suggestion": "2.26.1",
"@upstash/qstash": "2.8.4",
"@upstash/redis": "1.35.6",
"@vercel/analytics": "1.5.0",
"@vercel/speed-insights": "1.2.0",
"ai": "5.0.76",
"@upstash/redis": "1.35.7",
"@vercel/analytics": "1.6.1",
"@vercel/speed-insights": "1.3.1",
"ai": "5.0.106",
"better-auth": "1.4.5",
"braintrust": "0.4.6",
"braintrust": "0.4.10",
"capital-case": "2.0.0",
"cheerio": "1.0.0",
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
"cmdk": "1.1.1",
"crisp-sdk-web": "1.0.26",
"date-fns": "4.1.0",
"diff": "^8.0.0",
"diff": "^8.0.2",
"dompurify": "3.3.0",
"dub": "0.67.0",
"easymde": "^2.20.0",
"email-reply-parser": "1.9.4",
"embla-carousel-react": "8.6.0",
"encoding": "0.1.13",
"fast-deep-equal": "3.1.3",
"fast-xml-parser": "5.2.5",
"framer-motion": "^12.23.24",
"gaxios": "7.1.2",
"fast-xml-parser": "5.3.2",
"framer-motion": "^12.23.25",
"gaxios": "7.1.3",
"gmail-api-parse-message": "2.1.2",
"google": "link:@next/third-parties/google",
"he": "1.2.0",
"html-to-text": "9.0.5",
"ioredis": "5.8.2",
"jotai": "2.15.0",
"jotai": "2.15.2",
"jsdom": "26.1.0",
"json5": "2.2.3",
"jsonrepair": "3.13.1",
"linkify-react": "4.3.2",
"linkifyjs": "4.3.2",
"lodash": "4.17.21",
"lucide-react": "0.546.0",
"motion": "12.23.24",
"lucide-react": "0.555.0",
"motion": "12.23.25",
"next": "15.5.7",
"next-axiom": "1.9.3",
"next-safe-action": "8.0.11",
"next-themes": "0.4.6",
"nodemailer": "7.0.11",
"nuqs": "2.7.2",
"nuqs": "2.8.2",
"ollama-ai-provider": "1.2.0",
"openai": "6.6.0",
"p-queue": "9.0.0",
"openai": "6.9.1",
"p-queue": "9.0.1",
"p-retry": "7.1.0",
"pg": "8.16.3",
"posthog-js": "1.261.0",
"posthog-node": "5.8.1",
"posthog-js": "1.301.1",
"posthog-node": "5.17.0",
"prisma": "6.16.3",
"react": "19.1.1",
"react": "19.2.1",
"react-day-picker": "8.10.1",
"react-dom": "19.1.1",
"react-dom": "19.2.1",
"react-dom-confetti": "0.2.0",
"react-hook-form": "7.65.0",
"react-hook-form": "7.68.0",
"react-hotkeys-hook": "5.2.1",
"react-markdown": "10.1.0",
"react-resizable-panels": "2.1.7",
Expand All @@ -156,13 +157,13 @@
"sanity-plugin-markdown": "6.0.0",
"schema-dts": "1.1.5",
"server-only": "0.0.1",
"shiki": "3.13.0",
"shiki": "3.19.0",
"sonner": "2.0.7",
"streamdown": "1.4.0",
"string-similarity": "4.0.4",
"strip-indent": "4.1.1",
"stripe": "19.1.0",
"swr": "2.3.6",
"stripe": "20.0.0",
"swr": "2.3.7",
"tailwind-merge": "2.6.0",
"tailwindcss-animate": "1.0.7",
"tiptap-markdown": "0.8.10",
Expand All @@ -181,36 +182,36 @@
"@types/he": "1.2.3",
"@types/html-to-text": "9.0.4",
"@types/jsdom": "27.0.0",
"@types/lodash": "4.17.20",
"@types/lodash": "4.17.21",
"@types/mdx": "2.0.13",
"@types/node": "24.9.1",
"@types/nodemailer": "7.0.2",
"@types/react": "19.1.12",
"@types/react-dom": "19.1.9",
"@types/node": "24.10.1",
"@types/nodemailer": "7.0.4",
"@types/react": "19.2.7",
"@types/react-dom": "19.2.3",
"@types/react-syntax-highlighter": "15.5.13",
"@types/string-similarity": "4.0.2",
"@vitest/coverage-v8": "3.2.4",
"@vitest/ui": "3.2.4",
"autoprefixer": "10.4.21",
"@vitest/coverage-v8": "4.0.15",
"@vitest/ui": "4.0.15",
"autoprefixer": "10.4.22",
"cross-env": "10.1.0",
"dotenv": "17.2.3",
"postcss": "8.5.6",
"serwist": "9.2.1",
"serwist": "9.2.3",
"tailwindcss": "3.4.17",
"tsconfig": "workspace:*",
"vite-tsconfig-paths": "5.1.4",
"vitest": "3.2.4",
"vitest": "4.0.15",
"vitest-mock-extended": "3.1.0"
},
"engines": {
"node": ">=22.0.0"
},
"optionalDependencies": {
"@sanity/client": "7.12.0",
"@sanity/client": "7.13.1",
"@sanity/icons": "3.7.4",
"@sanity/image-url": "1",
"@sanity/image-url": "2",
"@sanity/vision": "4",
"next-sanity": "11",
"sanity": "4.10.3"
"sanity": "4.20.3"
}
}
2 changes: 1 addition & 1 deletion apps/web/utils/ai/mcp/mcp-tools.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { experimental_createMCPClient } from "ai";
import { experimental_createMCPClient } from "@ai-sdk/mcp";
import { getIntegration } from "@/utils/mcp/integrations";
import prisma from "@/utils/prisma";
import { createScopedLogger } from "@/utils/logger";
Expand Down
2 changes: 1 addition & 1 deletion apps/web/utils/ai/reply/reply-context-collector.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { tool } from "ai";
import subMonths from "date-fns/subMonths";
import { subMonths } from "date-fns/subMonths";
import { z } from "zod";
import { createScopedLogger } from "@/utils/logger";
import { createGenerateText } from "@/utils/llms";
Expand Down
Loading
Loading