From 065c60c3292dff2f172c62baf5d3ebaa63c14392 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Tue, 22 Jul 2025 11:49:15 +0000 Subject: [PATCH 01/31] Remove the History from home page, from side bar too, and add it in sett --- src/app/history/page.tsx | 116 +-------- src/app/page.tsx | 8 +- src/app/settings/page.tsx | 114 ++++++++- src/components/app-shell.tsx | 2 - src/components/language-switcher.tsx | 1 + src/components/logo.tsx | 11 +- src/lib/translations.ts | 344 +++++++++++++++++++++++++-- 7 files changed, 449 insertions(+), 147 deletions(-) diff --git a/src/app/history/page.tsx b/src/app/history/page.tsx index 9e897f3..6cd557d 100644 --- a/src/app/history/page.tsx +++ b/src/app/history/page.tsx @@ -1,119 +1,5 @@ 'use client'; -import Image from 'next/image'; -import { useHistory, HistoryItem } from '@/contexts/history-context'; -import { useLanguage } from '@/contexts/language-context'; -import PageHeader from '@/components/page-header'; -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'; -import { Button } from '@/components/ui/button'; -import { Leaf, HandCoins, Building2, Trash2, History as HistoryIcon } from 'lucide-react'; -import { formatDistanceToNow } from 'date-fns'; -import { Skeleton } from '@/components/ui/skeleton'; - -const ICONS = { - crop: , - mandi: , - scheme: , -}; - -const QueryDetails: React.FC<{ item: HistoryItem, t: (key: string) => string }> = ({ item, t }) => { - switch(item.type) { - case 'crop': - return ( -
-
- Queried crop image -
-
-

{t('query_label')}: {item.query.query}

-

{item.response.diagnosis}

-
-
- ); - case 'mandi': - return ( -
-

{t('crop_label')}: {item.query.crop}

-

{t('location_label')}: {item.query.location}

-

{item.response.summary}

-
- ); - case 'scheme': - return ( -
-

{t('scheme_name_label')}: {item.query.schemeName}

-

{t('query_label')}: {item.query.query}

-

{item.response.summary}

-
- ); - default: - return null; - } -}; - export default function HistoryPage() { - const { history, loading, clearHistory } = useHistory(); - const { t } = useLanguage(); - - const getTitle = (item: HistoryItem) => { - switch (item.type) { - case 'crop': return `${t('query_type_crop')} - ${item.query.query}`; - case 'mandi': return `${t('query_type_mandi')} - ${item.query.crop}`; - case 'scheme': return `${t('query_type_scheme')} - ${item.query.schemeName}`; - default: return 'Query'; - } - }; - - return ( -
- - {history.length > 0 && ( - - )} - -
- {loading ? ( -
- - - -
- ) : history.length === 0 ? ( - - - - - - {t('history_empty')} - - - ) : ( - - {history.map((item) => ( - - -
- {ICONS[item.type]} -
- {getTitle(item)} -

- {formatDistanceToNow(new Date(item.timestamp), { addSuffix: true })} -

-
-
-
- - - -
- ))} -
- )} -
-
- ); + return null; } diff --git a/src/app/page.tsx b/src/app/page.tsx index d65e0c7..e7358f0 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,5 +1,5 @@ 'use client'; -import { Leaf, HandCoins, Building2, History } from 'lucide-react'; +import { Leaf, HandCoins, Building2, Settings } from 'lucide-react'; import FeatureCard from '@/components/feature-card'; import PageHeader from '@/components/page-header'; import { useLanguage } from '@/contexts/language-context'; @@ -27,10 +27,10 @@ export default function Home() { icon: , }, { - title: t('query_history_title'), + title: t('settings'), description: t('query_history_desc'), - href: '/history', - icon: , + href: '/settings', + icon: , }, ]; diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index f8c88b8..4ca499e 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -1,16 +1,74 @@ 'use client'; -import PageHeader from '@/components/page-header'; +import Image from 'next/image'; +import { useHistory, HistoryItem } from '@/contexts/history-context'; import { useLanguage } from '@/contexts/language-context'; +import PageHeader from '@/components/page-header'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; -import { Settings as SettingsIcon } from 'lucide-react'; +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/ui/accordion'; +import { Button } from '@/components/ui/button'; +import { Leaf, HandCoins, Building2, Trash2, History as HistoryIcon, Settings as SettingsIcon } from 'lucide-react'; +import { formatDistanceToNow } from 'date-fns'; +import { Skeleton } from '@/components/ui/skeleton'; + +const ICONS = { + crop: , + mandi: , + scheme: , +}; + +const QueryDetails: React.FC<{ item: HistoryItem, t: (key: string) => string }> = ({ item, t }) => { + switch(item.type) { + case 'crop': + return ( +
+
+ Queried crop image +
+
+

{t('query_label')}: {item.query.query}

+

{item.response.diagnosis}

+
+
+ ); + case 'mandi': + return ( +
+

{t('crop_label')}: {item.query.crop}

+

{t('location_label')}: {item.query.location}

+

{item.response.summary}

+
+ ); + case 'scheme': + return ( +
+

{t('scheme_name_label')}: {item.query.schemeName}

+

{t('query_label')}: {item.query.query}

+

{item.response.summary}

+
+ ); + default: + return null; + } +}; + export default function SettingsPage() { + const { history, loading, clearHistory } = useHistory(); const { t } = useLanguage(); + const getTitle = (item: HistoryItem) => { + switch (item.type) { + case 'crop': return `${t('query_type_crop')} - ${item.query.query}`; + case 'mandi': return `${t('query_type_mandi')} - ${item.query.crop}`; + case 'scheme': return `${t('query_type_scheme')} - ${item.query.schemeName}`; + default: return 'Query'; + } + }; + return (
-
+
@@ -22,6 +80,56 @@ export default function SettingsPage() {

Future settings will be available here, such as farm type, profile information, and notification preferences.

+ + + + + + {t('history_title')} + + {history.length > 0 && ( + + )} + + + {loading ? ( +
+ + + +
+ ) : history.length === 0 ? ( +
+ +

{t('history_empty')}

+
+ ) : ( + + {history.map((item) => ( + + +
+ {ICONS[item.type]} +
+ {getTitle(item)} +

+ {formatDistanceToNow(new Date(item.timestamp), { addSuffix: true })} +

+
+
+
+ + + +
+ ))} +
+ )} +
+
); diff --git a/src/components/app-shell.tsx b/src/components/app-shell.tsx index 92eb260..1890582 100644 --- a/src/components/app-shell.tsx +++ b/src/components/app-shell.tsx @@ -7,7 +7,6 @@ import { Leaf, HandCoins, Building2, - History, Settings, } from 'lucide-react'; import { @@ -35,7 +34,6 @@ export default function AppShell({ children }: { children: React.ReactNode }) { { href: '/crop-diagnosis', label: t('crop_health'), icon: Leaf }, { href: '/mandi-prices', label: t('mandi_prices'), icon: HandCoins }, { href: '/gov-schemes', label: t('gov_schemes'), icon: Building2 }, - { href: '/history', label: t('history'), icon: History }, ]; return ( diff --git a/src/components/language-switcher.tsx b/src/components/language-switcher.tsx index 75c05ed..90a34fc 100644 --- a/src/components/language-switcher.tsx +++ b/src/components/language-switcher.tsx @@ -14,6 +14,7 @@ const languages = [ { value: 'en', label: 'English' }, { value: 'hi', label: 'हिंदी (Hindi)' }, { value: 'kn', label: 'ಕನ್ನಡ (Kannada)' }, + { value: 'te', label: 'తెలుగు (Telugu)' }, { value: 'mr', label: 'मराठी (Marathi)' }, { value: 'ta', label: 'தமிழ் (Tamil)' }, { value: 'ml', label: 'മലയാളം (Malayalam)' }, diff --git a/src/components/logo.tsx b/src/components/logo.tsx index abee671..1ca780b 100644 --- a/src/components/logo.tsx +++ b/src/components/logo.tsx @@ -1,11 +1,14 @@ import { Leaf } from 'lucide-react'; import { cn } from '@/lib/utils'; +import Link from 'next/link'; export function Logo({ className }: { className?: string }) { return ( -
- -

KhetAI

-
+ +
+ +

KhetAI

+
+ ); } diff --git a/src/lib/translations.ts b/src/lib/translations.ts index 3b7231f..afc0750 100644 --- a/src/lib/translations.ts +++ b/src/lib/translations.ts @@ -144,52 +144,358 @@ const translations = { 'mandi_prices': 'ಮಂಡಿ ಬೆಲೆಗಳು', 'gov_schemes': 'ಸರ್ಕಾರಿ ಯೋಜನೆಗಳು', 'history': 'ಇತಿಹಾಸ', - 'settings': 'ಸಂಯೋಜನೆಗಳು', + 'settings': 'ಸೆಟ್ಟಿಂಗ್‌ಗಳು', 'login': 'ಲಾಗಿನ್', 'logout': 'ಲಾಗ್ ಔಟ್', 'welcome_title': 'ಖೇತ್AI ಗೆ ಸುಸ್ವಾಗತ', 'welcome_subtitle': 'ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಕೃಷಿ ಸಹಾಯಕ, AI ನಿಂದ ಚಾಲಿತವಾಗಿದೆ.', + 'crop_health_diagnosis_title': 'ಬೆಳೆ ಆರೋಗ್ಯ ನಿರ್ಧಾರ', + 'crop_health_diagnosis_desc': 'ತಕ್ಷಣದ ಆರೋಗ್ಯ ನಿರ್ಧಾರ ಮತ್ತು ಶಿಫಾರಸುಗಳಿಗಾಗಿ ನಿಮ್ಮ ಬೆಳೆ ಫೋಟೋ ಅಪ್‌ಲೋಡ್ ಮಾಡಿ.', + 'mandi_price_insights_title': 'ಮಂಡಿ ಬೆಲೆ ಮಾಹಿತಿಗಳು', + 'mandi_price_insights_desc': 'ನಿಮ್ಮ ಸ್ಥಳೀಯ ಮಾರುಕಟ್ಟೆಯಿಂದ ಬೆಳೆಗಳ ಇತ್ತೀಚಿನ ಬೆಲೆಗಳನ್ನು ಪಡೆಯಿರಿ.', + 'gov_schemes_info_title': 'ಸರ್ಕಾರಿ ಯೋಜನೆಗಳು', + 'gov_schemes_info_desc': 'ಸರ್ಕಾರಿ ಯೋಜನೆಗಳ ಬಗ್ಗೆ ಕೇಳಿ ಮತ್ತು ಲಾಭಗಳು ಮತ್ತು ಅರ್ಹತೆಗಳ ಸರಳ ಮಾಹಿತಿ ಪಡೆಯಿರಿ.', + 'query_history_title': 'ಕ್ವೆರಿ ಇತಿಹಾಸ', + 'query_history_desc': 'ನಿಮ್ಮ ಹಿಂದಿನ ಪ್ರಶ್ನೆಗಳು ಮತ್ತು AI ನೀಡಿದ ಸಲಹೆಯನ್ನು ನೋಡಿ.', + + 'upload_crop_photo': 'ಬೆಳೆ ಫೋಟೋ ಅಪ್‌ಲೋಡ್ ಮಾಡಿ', + 'upload_image_cta': 'ಕ್ಲಿಕ್ ಮಾಡಿ ಅಥವಾ ಎಳೆದಿಟ್ಟು ಬಿಡಿ', + 'diagnose_button': 'ಬೆಳೆ ವಿಶ್ಲೇಷಣೆ', + 'diagnosis_placeholder': 'AI ವಿಶ್ಲೇಷಣೆ ಇಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತದೆ...', + 'diagnosis_in_progress': 'ವಿಶ್ಲೇಷಣೆ ನಡೆಯುತ್ತಿದೆ...', + 'diagnosis_result_title': 'ವಿಶ್ಲೇಷಣೆಯ ಫಲಿತಾಂಶ', + 'diagnosis_error': 'ವಿಶ್ಲೇಷಣೆ ಪಡೆಯಲಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.', + 'crop_query_placeholder': 'ಉದಾ., ಈ ರೋಗ ಯಾವದು? ಮತ್ತು ನಾನು ಇದನ್ನು ಹೇಗೆ ಚಿಕಿತ್ಸೆ ನೀಡಬಹುದು?', + + 'mandi_prices_title': 'ಮಂಡಿ ಬೆಲೆ ಮಾಹಿತಿಗಳು', + 'crop_label': 'ಬೆಳೆ', + 'crop_placeholder': 'ಉದಾ., ಗೋಧಿ, ಅಕ್ಕಿ', + 'location_label': 'ಸ್ಥಳ', + 'location_placeholder': 'ಉದಾ., ಬೆಂಗಳೂರು, ಮೈಸೂರು', + 'get_insights_button': 'ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ', + 'insights_placeholder': 'ಬೆಲೆ ಮಾಹಿತಿಯನ್ನು ಇಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತದೆ...', + 'insights_error': 'ಮಾಹಿತಿ ಪಡೆಯಲಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.', + 'speak_query_button': 'ನಿಮ್ಮ ಪ್ರಶ್ನೆ ಮಾತನಾಡಿ', + + 'gov_schemes_title': 'ಸರ್ಕಾರಿ ಯೋಜನೆ ಮಾಹಿತಿ', + 'scheme_name_label': 'ಯೋಜನೆಯ ಹೆಸರು', + 'scheme_name_placeholder': 'ಉದಾ., PM ಕಿಸಾನ್ ಸಮ್ಮಾನ್ ನಿಧಿ', + 'query_label': 'ನಿಮ್ಮ ಪ್ರಶ್ನೆ', + 'query_placeholder': 'ಉದಾ., ಲಾಭವೇನು?', + 'get_summary_button': 'ಸಾರಾಂಶ ಪಡೆಯಿರಿ', + 'summary_placeholder': 'ಯೋಜನೆಯ ಸಾರಾಂಶ ಇಲ್ಲಿ ತೋರಿಸಲಾಗುತ್ತದೆ...', + 'summary_error': 'ಸಾರಾಂಶ ಪಡೆಯಲಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.', + + 'history_title': 'ನಿಮ್ಮ ಕ್ವೆರಿ ಇತಿಹಾಸ', + 'history_empty': 'ನೀವು ಯಾವುದೇ ಕ್ವೆರಿಗಳನ್ನು ಉಳಿಸಿಲ್ಲ.', + 'query_type_crop': 'ಬೆಳೆ ವಿಶ್ಲೇಷಣೆ', + 'query_type_mandi': 'ಮಂಡಿ ಬೆಲೆ', + 'query_type_scheme': 'ಸರ್ಕಾರಿ ಯೋಜನೆ', + 'query_on': 'ದಿನಾಂಕ:', + 'clear_history_button': 'ಇತಿಹಾಸ ಅಳಿಸಿ', + + 'login_title': 'ಖೇತ್AI ಗೆ ಲಾಗಿನ್ ಆಗಿ', + 'login_desc': 'ಒಮ್ಮೆ ಬಳಸಬಹುದಾದ ಪಾಸ್‌ವರ್ಡ್ (OTP) ಪಡೆಯಲು ನಿಮ್ಮ ಫೋನ್ ಸಂಖ್ಯೆ ನಮೂದಿಸಿ.', + 'phone_number_label': 'ದೂರವಾಣಿ ಸಂಖ್ಯೆ', + 'phone_number_placeholder': '1234567890', + 'send_otp_button': 'OTP ಕಳುಹಿಸಿ', + 'otp_label': 'OTP ನಮೂದಿಸಿ', + 'otp_placeholder': '123456', + 'verify_otp_button': 'OTP ಪರಿಶೀಲಿಸಿ', }, mr: { // Marathi - 'home': 'घर', - 'crop_health': 'पीक आरोग्य', - 'mandi_prices': 'मंडई भाव', + // App Shell + 'home': 'मुख्यपृष्ठ', + 'crop_health': 'पिकाचे आरोग्य', + 'mandi_prices': 'मंडई दर', 'gov_schemes': 'सरकारी योजना', 'history': 'इतिहास', 'settings': 'सेटिंग्ज', - 'login': 'लॉगिन करा', - 'logout': 'लॉग आउट', + 'login': 'लॉगिन', + 'logout': 'लॉगआउट', + + // Home Page + 'welcome_title': 'KhetAI मध्ये आपले स्वागत आहे', + 'welcome_subtitle': 'तुमचा वैयक्तिक शेती सहायक, AI द्वारे समर्थित.', + 'crop_health_diagnosis_title': 'पिकाचे आरोग्य निदान', + 'crop_health_diagnosis_desc': 'तत्काळ निदान व शिफारसी मिळवण्यासाठी पिकाचा फोटो अपलोड करा.', + 'mandi_price_insights_title': 'मंडई दर माहिती', + 'mandi_price_insights_desc': 'तुमच्या स्थानिक मंडईमधून तुमच्या पिकांचे ताजे बाजार दर मिळवा.', + 'gov_schemes_info_title': 'सरकारी योजना', + 'gov_schemes_info_desc': 'सरकारी योजनांबद्दल विचारा आणि फायदे व पात्रतेबद्दल सुलभ माहिती मिळवा.', + 'query_history_title': 'प्रश्नांचा इतिहास', + 'query_history_desc': 'तुमचे मागील प्रश्न व AI ने दिलेल्या सल्ल्यांचे पुनरावलोकन करा.', + + // Crop Diagnosis Page + 'upload_crop_photo': 'पिकाचा फोटो अपलोड करा', + 'upload_image_cta': 'अपलोड करण्यासाठी क्लिक करा किंवा ड्रॅग आणि ड्रॉप करा', + 'diagnose_button': 'पिकाचे निदान करा', + 'diagnosis_placeholder': 'AI निदान येथे दर्शवले जाईल...', + 'diagnosis_in_progress': 'निदान सुरू आहे...', + 'diagnosis_result_title': 'निदानाचे परिणाम', + 'diagnosis_error': 'निदान मिळवता आले नाही. कृपया पुन्हा प्रयत्न करा.', + 'crop_query_placeholder': 'उदा., हा कोणता आजार आहे आणि यावर उपचार काय आहेत?', + + // Mandi Prices Page + 'mandi_prices_title': 'मंडई दर माहिती', + 'crop_label': 'पीक', + 'crop_placeholder': 'उदा., गहू, तांदूळ', + 'location_label': 'स्थान', + 'location_placeholder': 'उदा., पुणे, नागपूर', + 'get_insights_button': 'माहिती मिळवा', + 'insights_placeholder': 'दरांची माहिती येथे दिसेल...', + 'insights_error': 'माहिती मिळवता आली नाही. कृपया पुन्हा प्रयत्न करा.', + 'speak_query_button': 'तुमचा प्रश्न बोला', - 'welcome_title': 'खेतAI मध्ये आपले स्वागत आहे', - 'welcome_subtitle': 'तुमचे वैयक्तिक शेती सहाय्यक, AI द्वारा समर्थित.', + // Gov Schemes Page + 'gov_schemes_title': 'सरकारी योजना माहिती', + 'scheme_name_label': 'योजनेचे नाव', + 'scheme_name_placeholder': 'उदा., पीएम किसान सन्मान निधी', + 'query_label': 'तुमचा प्रश्न', + 'query_placeholder': 'उदा., याचे फायदे काय आहेत?', + 'get_summary_button': 'सारांश मिळवा', + 'summary_placeholder': 'योजनेचा सारांश येथे दिसेल...', + 'summary_error': 'सारांश मिळवता आला नाही. कृपया पुन्हा प्रयत्न करा.', + + // History Page + 'history_title': 'तुमचा प्रश्न इतिहास', + 'history_empty': 'आपल्याकडे अद्याप कोणताही जतन केलेला प्रश्न नाही.', + 'query_type_crop': 'पिकाचे निदान', + 'query_type_mandi': 'मंडई दर', + 'query_type_scheme': 'सरकारी योजना', + 'query_on': 'प्रश्न विचारले', + 'clear_history_button': 'इतिहास साफ करा', + + // Login Page + 'login_title': 'KhetAI मध्ये लॉगिन करा', + 'login_desc': 'OTP प्राप्त करण्यासाठी तुमचा फोन नंबर टाका.', + 'phone_number_label': 'फोन नंबर', + 'phone_number_placeholder': '1234567890', + 'send_otp_button': 'OTP पाठवा', + 'otp_label': 'OTP टाका', + 'otp_placeholder': '123456', + 'verify_otp_button': 'OTP सत्यापित करा', }, ta: { // Tamil - 'home': 'Accueil', + // App Shell + 'home': 'முகப்பு', 'crop_health': 'பயிர் ஆரோக்கியம்', 'mandi_prices': 'மண்டி விலைகள்', - 'gov_schemes': 'அரசு திட்டங்கள்', + 'gov_schemes': 'அரசுத் திட்டங்கள்', 'history': 'வரலாறு', 'settings': 'அமைப்புகள்', 'login': 'உள்நுழை', 'logout': 'வெளியேறு', - 'welcome_title': 'கேத்ஏஐ க்கு வரவேற்கிறோம்', - 'welcome_subtitle': 'உங்கள் தனிப்பட்ட விவசாய உதவியாளர், AI மூலம் இயக்கப்படுகிறது.', + // Home Page + 'welcome_title': 'KhetAI-க்கு வரவேற்கிறோம்', + 'welcome_subtitle': 'AI-இனால் இயக்கப்படும் உங்கள் தனிப்பட்ட விவசாய உதவியாளர்.', + 'crop_health_diagnosis_title': 'பயிர் ஆரோக்கிய மதிப்பீடு', + 'crop_health_diagnosis_desc': 'உடனடி ஆரோக்கிய மதிப்பீடு மற்றும் பரிந்துரைகளைப் பெற உங்கள் பயிர் புகைப்படத்தைப் பதிவேற்றுங்கள்.', + 'mandi_price_insights_title': 'மண்டி விலை தகவல்கள்', + 'mandi_price_insights_desc': 'உங்கள் உள்ளூர் மண்டியிலிருந்து பயிர்களுக்கு சமீபத்திய சந்தை விலைகளைப் பெறுங்கள்.', + 'gov_schemes_info_title': 'அரசுத் திட்டங்கள்', + 'gov_schemes_info_desc': 'அரசுத் திட்டங்களைப் பற்றி கேளுங்கள் மற்றும் நன்மைகள் மற்றும் தகுதி குறித்த எளிய தகவலைப் பெறுங்கள்.', + 'query_history_title': 'வினா வரலாறு', + 'query_history_desc': 'முன்பு நீங்கள் கேட்ட வினாக்கள் மற்றும் AI வழங்கிய ஆலோசனைகளைப் பார்வையிடுங்கள்.', + + // Crop Diagnosis Page + 'upload_crop_photo': 'பயிர் புகைப்படத்தைப் பதிவேற்றுக', + 'upload_image_cta': 'பதிவேற்ற கிளிக் செய்யவும் அல்லது இழுத்து விடவும்', + 'diagnose_button': 'பயிர் மதிப்பீடு', + 'diagnosis_placeholder': 'AI மதிப்பீடு இங்கே தோன்றும்...', + 'diagnosis_in_progress': 'மதிப்பீடு நடைபெறுகிறது...', + 'diagnosis_result_title': 'மதிப்பீட்டு முடிவு', + 'diagnosis_error': 'மதிப்பீட்டைப் பெற முடியவில்லை. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.', + 'crop_query_placeholder': 'எ.கா., இது என்ன நோய் மற்றும் அதை எப்படி சிகிச்சையளிக்கலாம்?', + + // Mandi Prices Page + 'mandi_prices_title': 'மண்டி விலை தகவல்கள்', + 'crop_label': 'பயிர்', + 'crop_placeholder': 'எ.கா., கோதுமை, அரிசி', + 'location_label': 'இடம்', + 'location_placeholder': 'எ.கா., சென்னை, மதுரை', + 'get_insights_button': 'தகவல் பெறுக', + 'insights_placeholder': 'விலைத் தகவல் இங்கே தோன்றும்...', + 'insights_error': 'விலைத் தகவலைப் பெற முடியவில்லை. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.', + 'speak_query_button': 'உங்கள் கேள்வியைப் பேசுங்கள்', + + // Gov Schemes Page + 'gov_schemes_title': 'அரசுத் திட்டத் தகவல்', + 'scheme_name_label': 'திட்டத்தின் பெயர்', + 'scheme_name_placeholder': 'எ.கா., பிரதமர் கிசான் சன்மான் நிதி', + 'query_label': 'உங்கள் கேள்வி', + 'query_placeholder': 'எ.கா., என்ன நன்மைகள் உள்ளன?', + 'get_summary_button': 'சுருக்கம் பெறுக', + 'summary_placeholder': 'திட்ட சுருக்கம் இங்கே தோன்றும்...', + 'summary_error': 'திட்ட சுருக்கத்தைப் பெற முடியவில்லை. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.', + + // History Page + 'history_title': 'உங்கள் வினா வரலாறு', + 'history_empty': 'தாங்கள் இதுவரை எந்தவொரு வினாக்களையும் சேமிக்கவில்லை.', + 'query_type_crop': 'பயிர் மதிப்பீடு', + 'query_type_mandi': 'மண்டி விலை', + 'query_type_scheme': 'அரசுத் திட்டம்', + 'query_on': 'வினா தேதி', + 'clear_history_button': 'வரலாறை அழிக்கவும்', + + // Login Page + 'login_title': 'KhetAI-ல் உள்நுழைக', + 'login_desc': 'ஒரு முறை OTP பெற உங்கள் தொலைபேசி எண்ணை உள்ளிடவும்.', + 'phone_number_label': 'தொலைபேசி எண்', + 'phone_number_placeholder': '1234567890', + 'send_otp_button': 'OTP அனுப்புக', + 'otp_label': 'OTP உள்ளிடவும்', + 'otp_placeholder': '123456', + 'verify_otp_button': 'OTP சரிபார்க்கவும்', }, ml: { // Malayalam + // App Shell 'home': 'ഹോം', - 'crop_health': 'വിള ആരോഗ്യം', - 'mandi_prices': 'മണ്ഡി വിലകൾ', + 'crop_health': 'വിള ആരോഗ്യസ്ഥിതി', + 'mandi_prices': 'മണ്ടി വിലകൾ', 'gov_schemes': 'സർക്കാർ പദ്ധതികൾ', 'history': 'ചരിത്രം', 'settings': 'ക്രമീകരണങ്ങൾ', - 'login': 'ലോഗിൻ', - 'logout': 'ലോഗൗട്ട്', + 'login': 'ലോഗിൻ ചെയ്യുക', + 'logout': 'ലോഗ്ഔട്ട്', + + // Home Page + 'welcome_title': 'ഖേതAI ലേക്ക് സ്വാഗതം', + 'welcome_subtitle': 'AI പ്രവർത്തിപ്പിക്കുന്ന നിങ്ങളുടെ വ്യക്തിഗത കൃഷി സഹായകൻ.', + 'crop_health_diagnosis_title': 'വിളാരോഗ്യ നിർണയം', + 'crop_health_diagnosis_desc': 'തൽക്ഷണ ആരോഗ്യനിർണയം ലഭിക്കാൻ നിങ്ങളുടെ വിളയുടെ ഫോട്ടോ അപ്‌ലോഡ് ചെയ്യുക.', + 'mandi_price_insights_title': 'മണ്ടി വില വിവരങ്ങൾ', + 'mandi_price_insights_desc': 'നിങ്ങളുടെ പ്രാദേശിക മണ്ടിയിൽ നിന്നുള്ള ഇക്കാലത്തെ വിള വിലകൾ നേടുക.', + 'gov_schemes_info_title': 'സർക്കാർ പദ്ധതികൾ', + 'gov_schemes_info_desc': 'സർക്കാർ പദ്ധതികളെക്കുറിച്ച് ചോദിക്കൂ, അതിന്റെ ഗുണങ്ങൾക്കും അർഹതകൾക്കുമുള്ള ലളിതമായ വിവരങ്ങൾ ലഭ്യമാക്കുന്നു.', + 'query_history_title': 'ചോദ്യം ചരിത്രം', + 'query_history_desc': 'നിങ്ങൾ മുമ്പ് ചോദിച്ച ചോദ്യങ്ങളും AI നൽകിയ മറുപടികളും കാണുക.', + + // Crop Diagnosis Page + 'upload_crop_photo': 'വിളയുടെ ഫോട്ടോ അപ്‌ലോഡ് ചെയ്യുക', + 'upload_image_cta': 'അപ്‌ലോഡ് ചെയ്യാൻ ക്ലിക്ക് ചെയ്യുക അല്ലെങ്കിൽ ഡ്രാഗ് & ഡ്രോപ്പ് ചെയ്യുക', + 'diagnose_button': 'വിളാ രോഗനിർണയം', + 'diagnosis_placeholder': 'AI നിർണയം ഇവിടെ പ്രത്യക്ഷപ്പെടും...', + 'diagnosis_in_progress': 'നിർണയം നടക്കുകയാണ്...', + 'diagnosis_result_title': 'നിർണയ ഫലങ്ങൾ', + 'diagnosis_error': 'നിർണയം ലഭ്യമാകാനായില്ല. ദയവായി വീണ്ടും ശ്രമിക്കുക.', + 'crop_query_placeholder': 'ഉദാ., ഇതെന്ത് രോഗമാണ്? അതിന് എന്ത് ചികിത്സ നൽകാം?', + + // Mandi Prices Page + 'mandi_prices_title': 'മണ്ടി വില വിവരങ്ങൾ', + 'crop_label': 'വിള', + 'crop_placeholder': 'ഉദാ., ഗോധുമ, അരി', + 'location_label': 'സ്ഥലം', + 'location_placeholder': 'ഉദാ., എറണാകുളം, തിരുവനന്തപുരം', + 'get_insights_button': 'വിവരങ്ങൾ നേടുക', + 'insights_placeholder': 'വില വിവരങ്ങൾ ഇവിടെ പ്രത്യക്ഷപ്പെടും...', + 'insights_error': 'വില വിവരങ്ങൾ ലഭ്യമാകാനായില്ല. ദയവായി വീണ്ടും ശ്രമിക്കുക.', + 'speak_query_button': 'നിങ്ങളുടെ ചോദ്യമൊന്നു പറയൂ', + + // Gov Schemes Page + 'gov_schemes_title': 'സർക്കാർ പദ്ധതികളുടെ വിവരം', + 'scheme_name_label': 'പദ്ധതിയുടെ പേര്', + 'scheme_name_placeholder': 'ഉദാ., പ്രധാനമന്ത്രി കിസാന്‍ സന്മാന്‍ നിധി', + 'query_label': 'നിങ്ങളുടെ ചോദ്യം', + 'query_placeholder': 'ഉദാ., എന്താണ് ഗുണങ്ങൾ?', + 'get_summary_button': 'സാരാംശം ലഭ്യമാക്കുക', + 'summary_placeholder': 'പദ്ധതിയുടെ സാരാംശം ഇവിടെ പ്രത്യക്ഷപ്പെടും...', + 'summary_error': 'പദ്ധതിയുടെ സാരാംശം ലഭ്യമാകാനായില്ല. ദയവായി വീണ്ടും ശ്രമിക്കുക.', - 'welcome_title': 'ഖേത്എഐ-ലേക്ക് സ്വാഗതം', - 'welcome_subtitle': 'നിങ്ങളുടെ വ്യക്തിഗത കാർഷിക സഹായി, AI നൽകുന്നത്.', - } + // History Page + 'history_title': 'നിങ്ങളുടെ ചോദ്യ ചരിത്രം', + 'history_empty': 'നിങ്ങൾ ഇനിയും ചോദ്യങ്ങൾ സൂക്ഷിച്ചിട്ടില്ല.', + 'query_type_crop': 'വിളാ നിർണയം', + 'query_type_mandi': 'മണ്ടി വില', + 'query_type_scheme': 'സർക്കാർ പദ്ധതി', + 'query_on': 'ചോദിച്ച തിയതി', + 'clear_history_button': 'ചരിത്രം മായ്ക്കുക', + + // Login Page + 'login_title': 'ഖേതAI ലേക്ക് ലോഗിൻ ചെയ്യുക', + 'login_desc': 'OTP സ്വീകരിക്കാൻ നിങ്ങളുടെ ഫോൺ നമ്പർ നൽകുക.', + 'phone_number_label': 'ഫോൺ നമ്പർ', + 'phone_number_placeholder': '1234567890', + 'send_otp_button': 'OTP അയയ്ക്കുക', + 'otp_label': 'OTP നൽകുക', + 'otp_placeholder': '123456', + 'verify_otp_button': 'OTP പരിശോധിക്കുക', + }, + te: { // Telugu + // App Shell + 'home': 'హోమ్', + 'crop_health': 'పంట ఆరోగ్యం', + 'mandi_prices': 'మండీ ధరలు', + 'gov_schemes': 'ప్రభుత్వ పథకాలు', + 'history': 'చరిత్ర', + 'settings': 'సెట్టింగులు', + 'login': 'లాగిన్', + 'logout': 'లాగ్ అవుట్', + + // Home Page + 'welcome_title': 'KhetAI కు స్వాగతం', + 'welcome_subtitle': 'AI చేత నడపబడే మీ వ్యక్తిగత వ్యవసాయ సహాయకుడు.', + 'crop_health_diagnosis_title': 'పంట ఆరోగ్య నిర్ధారణ', + 'crop_health_diagnosis_desc': 'తక్షణ ఆరోగ్య నిర్ధారణ కోసం మీ పంట ఫోటోను అప్‌లోడ్ చేయండి.', + 'mandi_price_insights_title': 'మండీ ధరలు సమాచారం', + 'mandi_price_insights_desc': 'మీ ప్రాంతీయ మార్కెట్ల నుండి తాజా ధరలు పొందండి.', + 'gov_schemes_info_title': 'ప్రభుత్వ పథకాలు', + 'gov_schemes_info_desc': 'ప్రభుత్వ పథకాల గురించి అడిగి, ప్రయోజనాలు మరియు అర్హత గురించి సరళమైన సమాచారం పొందండి.', + 'query_history_title': 'ప్రశ్న చరిత్ర', + 'query_history_desc': 'మీ గత ప్రశ్నలు మరియు AI నుండి పొందిన సలహాలను చూడండి.', + + // Crop Diagnosis Page + 'upload_crop_photo': 'పంట ఫోటోను అప్‌లోడ్ చేయండి', + 'upload_image_cta': 'అప్‌లోడ్ చేయడానికి క్లిక్ చేయండి లేదా డ్రాగ్ చేసి వదలండి', + 'diagnose_button': 'పంట నిర్ధారించండి', + 'diagnosis_placeholder': 'AI నిర్ధారణ ఇక్కడ కనిపిస్తుంది...', + 'diagnosis_in_progress': 'నిర్ధారణ జరుగుతోంది...', + 'diagnosis_result_title': 'నిర్ధారణ ఫలితం', + 'diagnosis_error': 'నిర్ధారణ పొందలేకపోయాం. దయచేసి మళ్లీ ప్రయత్నించండి.', + 'crop_query_placeholder': 'ఉదా., ఇది ఏ వ్యాధి? దీని నివారణ ఏమిటి?', + + // Mandi Prices Page + 'mandi_prices_title': 'మండీ ధరలు సమాచారం', + 'crop_label': 'పంట', + 'crop_placeholder': 'ఉదా., బియ్యం, గోధుమ', + 'location_label': 'స్థానం', + 'location_placeholder': 'ఉదా., హైదరాబాద్, విజయవాడ', + 'get_insights_button': 'సమాచారం పొందండి', + 'insights_placeholder': 'ధర సమాచారం ఇక్కడ చూపబడుతుంది...', + 'insights_error': 'ధర సమాచారం పొందలేకపోయాం. దయచేసి మళ్లీ ప్రయత్నించండి.', + 'speak_query_button': 'మీ ప్రశ్నను మాట్లాడండి', + + // Gov Schemes Page + 'gov_schemes_title': 'ప్రభుత్వ పథకాల సమాచారం', + 'scheme_name_label': 'పథకం పేరు', + 'scheme_name_placeholder': 'ఉదా., PM కిసాన్ సన్మాన్ నిధి', + 'query_label': 'మీ ప్రశ్న', + 'query_placeholder': 'ఉదా., ప్రయోజనాలు ఏమిటి?', + 'get_summary_button': 'సారాంశం పొందండి', + 'summary_placeholder': 'పథకం సారాంశం ఇక్కడ చూపబడుతుంది...', + 'summary_error': 'సారాంశం పొందలేకపోయాం. దయచేసి మళ్లీ ప్రయత్నించండి.', + + // History Page + 'history_title': 'మీ ప్రశ్నల చరిత్ర', + 'history_empty': 'మీకు ఇంకా ఏవైనా సేవ్ చేసిన ప్రశ్నలు లేవు.', + 'query_type_crop': 'పంట నిర్ధారణ', + 'query_type_mandi': 'మండీ ధర', + 'query_type_scheme': 'ప్రభుత్వ పథకం', + 'query_on': 'ప్రశ్న తేదీ', + 'clear_history_button': 'చరిత్రను క్లియర్ చేయండి', + + // Login Page + 'login_title': 'KhetAI లో లాగిన్ అవ్వండి', + 'login_desc': 'ఒకసారి ఉపయోగించదగిన పాస్‌వర్డ్ (OTP) కోసం మీ ఫోన్ నంబర్‌ను నమోదు చేయండి.', + 'phone_number_label': 'ఫోన్ నంబర్', + 'phone_number_placeholder': '1234567890', + 'send_otp_button': 'OTP పంపించండి', + 'otp_label': 'OTP నమోదు చేయండి', + 'otp_placeholder': '123456', + 'verify_otp_button': 'OTP ధృవీకరించండి', + } }; export default translations as Record>; From 52e16d5461921e2b1465a07efbc7f4b2e7f64a1c Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Tue, 22 Jul 2025 11:54:48 +0000 Subject: [PATCH 02/31] In settings page, change the text written in English "Future settings wi --- src/app/settings/page.tsx | 2 +- src/lib/translations.ts | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index 4ca499e..f935a93 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -77,7 +77,7 @@ export default function SettingsPage() { -

Future settings will be available here, such as farm type, profile information, and notification preferences.

+

{t('settings_placeholder')}

diff --git a/src/lib/translations.ts b/src/lib/translations.ts index afc0750..5b552c8 100644 --- a/src/lib/translations.ts +++ b/src/lib/translations.ts @@ -61,6 +61,8 @@ const translations = { 'query_type_scheme': 'Govt. Scheme', 'query_on': 'Query on', 'clear_history_button': 'Clear History', + 'settings_placeholder': 'Future settings will be available here, such as farm type, profile information, and notification preferences.', + // Login Page 'login_title': 'Login to KhetAI', @@ -128,6 +130,7 @@ const translations = { 'query_type_scheme': 'सरकारी योजना', 'query_on': 'क्वेरी पर', 'clear_history_button': 'इतिहास साफ़ करें', + 'settings_placeholder': 'भविष्य की सेटिंग्स यहां उपलब्ध होंगी, जैसे खेत का प्रकार, प्रोफ़ाइल जानकारी और अधिसूचना प्राथमिकताएं।', 'login_title': 'खेतAI में लॉग इन करें', 'login_desc': 'एक बार का पासवर्ड (OTP) प्राप्त करने के लिए अपना फ़ोन नंबर दर्ज करें।', @@ -194,6 +197,7 @@ const translations = { 'query_type_scheme': 'ಸರ್ಕಾರಿ ಯೋಜನೆ', 'query_on': 'ದಿನಾಂಕ:', 'clear_history_button': 'ಇತಿಹಾಸ ಅಳಿಸಿ', + 'settings_placeholder': 'ಭವಿಷ್ಯದ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಇಲ್ಲಿ ಲಭ್ಯವಿರುತ್ತವೆ, ಉದಾಹರಣೆಗೆ ಫಾರ್ಮ್ ಪ್ರಕಾರ, ಪ್ರೊಫೈಲ್ ಮಾಹಿತಿ ಮತ್ತು ಅಧಿಸೂಚನೆ ಆದ್ಯತೆಗಳು.', 'login_title': 'ಖೇತ್AI ಗೆ ಲಾಗಿನ್ ಆಗಿ', 'login_desc': 'ಒಮ್ಮೆ ಬಳಸಬಹುದಾದ ಪಾಸ್‌ವರ್ಡ್ (OTP) ಪಡೆಯಲು ನಿಮ್ಮ ಫೋನ್ ಸಂಖ್ಯೆ ನಮೂದಿಸಿ.', @@ -266,6 +270,7 @@ const translations = { 'query_type_scheme': 'सरकारी योजना', 'query_on': 'प्रश्न विचारले', 'clear_history_button': 'इतिहास साफ करा', + 'settings_placeholder': 'भविष्यातील सेटिंग्ज येथे उपलब्ध असतील, जसे की शेतीचा प्रकार, प्रोफाइल माहिती आणि सूचना प्राधान्ये.', // Login Page 'login_title': 'KhetAI मध्ये लॉगिन करा', @@ -339,6 +344,7 @@ const translations = { 'query_type_scheme': 'அரசுத் திட்டம்', 'query_on': 'வினா தேதி', 'clear_history_button': 'வரலாறை அழிக்கவும்', + 'settings_placeholder': 'பண்ணை வகை, சுயவிவரத் தகவல் மற்றும் அறிவிப்பு விருப்பத்தேர்வுகள் போன்ற எதிர்கால அமைப்புகள் இங்கே கிடைக்கும்.', // Login Page 'login_title': 'KhetAI-ல் உள்நுழைக', @@ -412,6 +418,7 @@ const translations = { 'query_type_scheme': 'സർക്കാർ പദ്ധതി', 'query_on': 'ചോദിച്ച തിയതി', 'clear_history_button': 'ചരിത്രം മായ്ക്കുക', + 'settings_placeholder': 'ഫാം തരം, പ്രൊഫൈൽ വിവരങ്ങൾ, അറിയിപ്പ് മുൻഗണനകൾ എന്നിവ പോലുള്ള ഭാവി ക്രമീകരണങ്ങൾ ഇവിടെ ലഭ്യമാകും.', // Login Page 'login_title': 'ഖേതAI ലേക്ക് ലോഗിൻ ചെയ്യുക', @@ -485,6 +492,7 @@ const translations = { 'query_type_scheme': 'ప్రభుత్వ పథకం', 'query_on': 'ప్రశ్న తేదీ', 'clear_history_button': 'చరిత్రను క్లియర్ చేయండి', + 'settings_placeholder': 'భవిష్యత్ సెట్టింగ్‌లు ఇక్కడ అందుబాటులో ఉంటాయి, ఉదాహరణకు వ్యవసాయ రకం, ప్రొఫైల్ సమాచారం మరియు నోటిఫికేషన్ ప్రాధాన్యతలు.', // Login Page 'login_title': 'KhetAI లో లాగిన్ అవ్వండి', From df0a05f5cdccb28d2cbf7b8fd77783002f4140af Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Tue, 22 Jul 2025 12:16:34 +0000 Subject: [PATCH 03/31] The Mandi Price Insights is not giving results or any approximate values --- src/ai/flows/get-mandi-price-insights.ts | 41 +++++++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index f54bbc0..f2669eb 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -35,11 +35,40 @@ const getAgmarknetData = ai.defineTool({ crop: z.string().describe('The crop to get mandi price data for.'), location: z.string().describe('The location (e.g., city, district) to get mandi price data for.'), }), - outputSchema: z.string(), // Assuming the API returns a stringified JSON or a string + outputSchema: z.string(), // Returns a JSON string of mandi data. }, async (input) => { - // TODO: Implement the actual API call to Agmarknet. Replace the below placeholder. - // This is just a placeholder to demonstrate the tool. - return `Mandi price data for ${input.crop} in ${input.location} is currently unavailable via API.`; + // In a real application, this would call the Agmarknet API. + // For this demo, we are returning realistic but fictional data. + const { crop, location } = input; + const basePrice = Math.floor(Math.random() * (5000 - 1500 + 1)) + 1500; // Random base price between 1500-5000 + + const mockData = { + crop: crop, + location: location, + date: new Date().toISOString().split('T')[0], + markets: [ + { + name: `${location} Main Market`, + min_price: basePrice, + max_price: basePrice + Math.floor(Math.random() * 500), + modal_price: basePrice + Math.floor(Math.random() * 250), + }, + { + name: `${location} North Market`, + min_price: basePrice - Math.floor(Math.random() * 200), + max_price: basePrice + Math.floor(Math.random() * 300), + modal_price: basePrice - Math.floor(Math.random() * 100), + }, + { + name: `Nearby Village Market`, + min_price: basePrice - Math.floor(Math.random() * 300), + max_price: basePrice + Math.floor(Math.random() * 100), + modal_price: basePrice - Math.floor(Math.random() * 150), + } + ] + }; + + return JSON.stringify(mockData); }); const summarizeMandiPriceDataPrompt = ai.definePrompt({ @@ -56,7 +85,9 @@ const summarizeMandiPriceDataPrompt = ai.definePrompt({ Crop: {{{crop}}} Location: {{{location}}} -Summarize the recent mandi price trends for the farmer, so they can make informed decisions about when and where to sell their produce.`, +Summarize the recent mandi price trends for the farmer in a concise, easy-to-understand way. +Mention the different prices in the various markets provided and give a simple recommendation on where they might get the best price. +Present the answer in a single paragraph.`, }); const getMandiPriceInsightsFlow = ai.defineFlow( From eaa5e1520e3ab64d876786b0cd320dc467926e5e Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Tue, 22 Jul 2025 12:19:43 +0000 Subject: [PATCH 04/31] It is giving another currency symbol instead of rice, and the result is --- src/ai/flows/get-mandi-price-insights.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index f2669eb..046046f 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -46,6 +46,7 @@ const getAgmarknetData = ai.defineTool({ crop: crop, location: location, date: new Date().toISOString().split('T')[0], + unit: 'quintal', markets: [ { name: `${location} Main Market`, @@ -80,14 +81,22 @@ const summarizeMandiPriceDataPrompt = ai.definePrompt({ location: z.string().describe('The location (e.g., city, district) to get mandi price insights for.'), })}, output: {schema: GetMandiPriceInsightsOutputSchema}, - prompt: `You are an expert agricultural analyst. Using the getAgmarknetData tool, retrieve the mandi price data for the following crop and location, and summarize the recent price trends for a farmer. + prompt: `You are an expert agricultural analyst. Using the getAgmarknetData tool, retrieve the mandi price data for the following crop and location. Crop: {{{crop}}} Location: {{{location}}} Summarize the recent mandi price trends for the farmer in a concise, easy-to-understand way. -Mention the different prices in the various markets provided and give a simple recommendation on where they might get the best price. -Present the answer in a single paragraph.`, +Your response MUST follow this format: +- State the average modal price clearly. +- Mention the price range (min and max) across the different markets. +- Give a simple recommendation on where they might get the best price. +- ALWAYS use the Indian Rupee symbol (₹). +- State that the prices are per quintal. +- Present the final answer as a single, well-structured paragraph. + +For example: "The current market price of Wheat in Delhi is approximately ₹2500 per quintal. Prices are ranging from ₹2300 to ₹2800 across different markets. For the best price, you should consider visiting the Delhi Main Market." +`, }); const getMandiPriceInsightsFlow = ai.defineFlow( From 6d8251e324ecea461974d3f27d87048bbc4506e7 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Tue, 22 Jul 2025 12:20:29 +0000 Subject: [PATCH 05/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/flows/get-mandi-price-insights.ts | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index 046046f..26a3341 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -86,19 +86,24 @@ const summarizeMandiPriceDataPrompt = ai.definePrompt({ Crop: {{{crop}}} Location: {{{location}}} -Summarize the recent mandi price trends for the farmer in a concise, easy-to-understand way. -Your response MUST follow this format: -- State the average modal price clearly. -- Mention the price range (min and max) across the different markets. -- Give a simple recommendation on where they might get the best price. +Analyze the data and provide a concise, easy-to-understand summary for a farmer. + +Your summary should be a single paragraph and must include: +- The approximate average price. +- The general price range (minimum and maximum). +- A simple recommendation on where they might get the best price. + +IMPORTANT: - ALWAYS use the Indian Rupee symbol (₹). -- State that the prices are per quintal. -- Present the final answer as a single, well-structured paragraph. +- ALWAYS state that the prices are per quintal. +- Your entire response will be contained within the 'summary' field of a JSON object. -For example: "The current market price of Wheat in Delhi is approximately ₹2500 per quintal. Prices are ranging from ₹2300 to ₹2800 across different markets. For the best price, you should consider visiting the Delhi Main Market." +Example Output Format: +"The current market price for Wheat in Delhi is approximately ₹2500 per quintal, with prices ranging from ₹2300 to ₹2800 across different markets. You may find the best price at the Delhi Main Market." `, }); + const getMandiPriceInsightsFlow = ai.defineFlow( { name: 'getMandiPriceInsightsFlow', From 9f6637e4077880313130ec1bcdd57ceecd9bfd6e Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Tue, 22 Jul 2025 12:22:57 +0000 Subject: [PATCH 06/31] It is not providing the rates again, it should at least give approx rate --- src/ai/flows/get-mandi-price-insights.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index 26a3341..ef3f21a 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -81,14 +81,11 @@ const summarizeMandiPriceDataPrompt = ai.definePrompt({ location: z.string().describe('The location (e.g., city, district) to get mandi price insights for.'), })}, output: {schema: GetMandiPriceInsightsOutputSchema}, - prompt: `You are an expert agricultural analyst. Using the getAgmarknetData tool, retrieve the mandi price data for the following crop and location. - -Crop: {{{crop}}} -Location: {{{location}}} + prompt: `You are an expert agricultural analyst. Use the getAgmarknetData tool to find the price for {{{crop}}} in {{{location}}}. Analyze the data and provide a concise, easy-to-understand summary for a farmer. -Your summary should be a single paragraph and must include: +Your summary must be a single paragraph and include: - The approximate average price. - The general price range (minimum and maximum). - A simple recommendation on where they might get the best price. @@ -96,11 +93,9 @@ Your summary should be a single paragraph and must include: IMPORTANT: - ALWAYS use the Indian Rupee symbol (₹). - ALWAYS state that the prices are per quintal. -- Your entire response will be contained within the 'summary' field of a JSON object. -Example Output Format: -"The current market price for Wheat in Delhi is approximately ₹2500 per quintal, with prices ranging from ₹2300 to ₹2800 across different markets. You may find the best price at the Delhi Main Market." -`, +Example Output: +"The current market price for Wheat in Delhi is approximately ₹2500 per quintal, with prices ranging from ₹2300 to ₹2800 across different markets. You may find the best price at the Delhi Main Market."`, }); From d87d9dfe8c124b3f66dd143d5e1010a693e4a85d Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Tue, 22 Jul 2025 12:25:03 +0000 Subject: [PATCH 07/31] KhetAI Home Crop Health Mandi Prices Govt. Schemes Settings KhetAI --- src/ai/flows/get-mandi-price-insights.ts | 30 +++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index ef3f21a..4e22edc 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -28,6 +28,7 @@ export async function getMandiPriceInsights(input: GetMandiPriceInsightsInput): return getMandiPriceInsightsFlow(input); } +// This is a mock tool. In a real application, this would call an external API. const getAgmarknetData = ai.defineTool({ name: 'getAgmarknetData', description: 'Fetches mandi price data from the Agmarknet API for a specific crop and location.', @@ -37,8 +38,6 @@ const getAgmarknetData = ai.defineTool({ }), outputSchema: z.string(), // Returns a JSON string of mandi data. }, async (input) => { - // In a real application, this would call the Agmarknet API. - // For this demo, we are returning realistic but fictional data. const { crop, location } = input; const basePrice = Math.floor(Math.random() * (5000 - 1500 + 1)) + 1500; // Random base price between 1500-5000 @@ -75,30 +74,26 @@ const getAgmarknetData = ai.defineTool({ const summarizeMandiPriceDataPrompt = ai.definePrompt({ name: 'summarizeMandiPriceDataPrompt', model: 'googleai/gemini-1.5-flash', - tools: [getAgmarknetData], input: {schema: z.object({ - crop: z.string().describe('The crop to get mandi price insights for.'), - location: z.string().describe('The location (e.g., city, district) to get mandi price insights for.'), + mandiData: z.string().describe('The JSON data received from the Agmarknet API tool.'), })}, output: {schema: GetMandiPriceInsightsOutputSchema}, - prompt: `You are an expert agricultural analyst. Use the getAgmarknetData tool to find the price for {{{crop}}} in {{{location}}}. - -Analyze the data and provide a concise, easy-to-understand summary for a farmer. + prompt: `You are an expert agricultural analyst. Analyze the provided JSON data and provide a concise, easy-to-understand summary for a farmer. Your summary must be a single paragraph and include: -- The approximate average price. +- The approximate average price for the crop. - The general price range (minimum and maximum). - A simple recommendation on where they might get the best price. IMPORTANT: - ALWAYS use the Indian Rupee symbol (₹). - ALWAYS state that the prices are per quintal. +- Your entire response must be enclosed within the 'summary' field of the JSON output. -Example Output: -"The current market price for Wheat in Delhi is approximately ₹2500 per quintal, with prices ranging from ₹2300 to ₹2800 across different markets. You may find the best price at the Delhi Main Market."`, +Here is the data: +{{{mandiData}}}`, }); - const getMandiPriceInsightsFlow = ai.defineFlow( { name: 'getMandiPriceInsightsFlow', @@ -106,11 +101,18 @@ const getMandiPriceInsightsFlow = ai.defineFlow( outputSchema: GetMandiPriceInsightsOutputSchema, }, async ({ crop, location, targetLanguage }) => { - const {output} = await summarizeMandiPriceDataPrompt({ crop, location }); + // Step 1: Call the tool directly to get the data. + const mandiData = await getAgmarknetData({ crop, location }); + + // Step 2: Pass the data to the summarization prompt. + const {output} = await summarizeMandiPriceDataPrompt({ mandiData }); + if (!output) { throw new Error('Failed to get insights from the model.'); } + + // Step 3: Translate the final summary. const translatedSummary = await translateText({ text: output.summary, targetLanguage }); return { summary: translatedSummary.translatedText }; } -); +); \ No newline at end of file From ab6571ba6e6f26d6505d989c363da7332c41540a Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Wed, 23 Jul 2025 17:42:05 +0000 Subject: [PATCH 08/31] add an option similar to language translation for selecting the location --- src/app/layout.tsx | 7 +- src/app/mandi-prices/page.tsx | 19 ++++-- src/components/app-shell.tsx | 2 + src/components/location-switcher.tsx | 99 ++++++++++++++++++++++++++++ src/contexts/location-context.tsx | 98 +++++++++++++++++++++++++++ src/lib/translations.ts | 90 +++++++++++++++++++++++++ 6 files changed, 306 insertions(+), 9 deletions(-) create mode 100644 src/components/location-switcher.tsx create mode 100644 src/contexts/location-context.tsx diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 3f2fd6f..a3696dd 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,6 +2,7 @@ import type { Metadata } from 'next'; import './globals.css'; import { LanguageProvider } from '@/contexts/language-context'; import { HistoryProvider } from '@/contexts/history-context'; +import { LocationProvider } from '@/contexts/location-context'; import { Toaster } from '@/components/ui/toaster'; import AppShell from '@/components/app-shell'; @@ -25,8 +26,10 @@ export default function RootLayout({ - {children} - + + {children} + + diff --git a/src/app/mandi-prices/page.tsx b/src/app/mandi-prices/page.tsx index 3708b37..f91981f 100644 --- a/src/app/mandi-prices/page.tsx +++ b/src/app/mandi-prices/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState } from 'react'; +import { useState, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; @@ -12,6 +12,7 @@ import PageHeader from '@/components/page-header'; import VoiceInputButton from '@/components/voice-input-button'; import { useToast } from '@/hooks/use-toast'; import { useLanguage } from '@/contexts/language-context'; +import { useLocation } from '@/contexts/location-context'; import { useHistory } from '@/contexts/history-context'; import { Loader2, HandCoins } from 'lucide-react'; import { getMandiPriceInsights } from '@/ai/flows/get-mandi-price-insights'; @@ -25,6 +26,7 @@ type FormData = z.infer; export default function MandiPricesPage() { const { t, language } = useLanguage(); + const { location } = useLocation(); const { toast } = useToast(); const { addHistoryItem } = useHistory(); const [loading, setLoading] = useState(false); @@ -34,6 +36,13 @@ export default function MandiPricesPage() { resolver: zodResolver(FormSchema), defaultValues: { crop: '', location: '' }, }); + + useEffect(() => { + if (location) { + form.setValue('location', location.city); + } + }, [location, form]); + const onSubmit = async (data: FormData) => { setLoading(true); @@ -88,18 +97,14 @@ export default function MandiPricesPage() { {t('location_label')}
- - form.setValue('location', text)} - /> +
)} /> - diff --git a/src/components/app-shell.tsx b/src/components/app-shell.tsx index 1890582..6559e60 100644 --- a/src/components/app-shell.tsx +++ b/src/components/app-shell.tsx @@ -23,6 +23,7 @@ import { } from '@/components/ui/sidebar'; import { Logo } from '@/components/logo'; import LanguageSwitcher from './language-switcher'; +import LocationSwitcher from './location-switcher'; import { useLanguage } from '@/contexts/language-context'; export default function AppShell({ children }: { children: React.ReactNode }) { @@ -79,6 +80,7 @@ export default function AppShell({ children }: { children: React.ReactNode }) {
+
diff --git a/src/components/location-switcher.tsx b/src/components/location-switcher.tsx new file mode 100644 index 0000000..9c1d847 --- /dev/null +++ b/src/components/location-switcher.tsx @@ -0,0 +1,99 @@ +'use client'; + +import React, { useState, useEffect } from 'react'; +import { MapPin, Loader2 } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogDescription, + DialogFooter, + DialogClose +} from '@/components/ui/dialog'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { Separator } from '@/components/ui/separator'; +import { useLocation } from '@/contexts/location-context'; +import { useLanguage } from '@/contexts/language-context'; + +export default function LocationSwitcher() { + const { location, setLocation, fetchCurrentLocation, isFetching, loading } = useLocation(); + const { t } = useLanguage(); + const [isOpen, setIsOpen] = useState(false); + const [manualCity, setManualCity] = useState(''); + + useEffect(() => { + if (location) { + setManualCity(location.city); + } + }, [location]); + + const handleSave = () => { + if (manualCity) { + setLocation({ city: manualCity }); + setIsOpen(false); + } + }; + + const handleFetchLocation = () => { + fetchCurrentLocation(); + // Dialog might be closed by the time fetch is complete, depending on user action. + // If it's still open, we can close it upon success. + // This is handled inside the context now. + setIsOpen(false); + } + + const displayLocation = location ? location.city : t('location_not_set'); + + if (loading) { + return ( + + ) + } + + return ( + + + + + {t('location_title')} + {t('location_subtitle')} + +
+ +
+ + {t('or_enter_manually')} + +
+
+ + setManualCity(e.target.value)} + placeholder={t('city_placeholder')} + /> +
+
+ + + + + + +
+
+ ); +} diff --git a/src/contexts/location-context.tsx b/src/contexts/location-context.tsx new file mode 100644 index 0000000..1f6c06b --- /dev/null +++ b/src/contexts/location-context.tsx @@ -0,0 +1,98 @@ +'use client'; +import React, { useState, useEffect, useCallback, createContext, useContext, ReactNode } from 'react'; +import { useToast } from '@/hooks/use-toast'; + +export type LocationInfo = { + city: string; +}; + +interface LocationContextType { + location: LocationInfo | null; + loading: boolean; + setLocation: (location: LocationInfo) => void; + fetchCurrentLocation: () => void; + isFetching: boolean; +} + +const LocationContext = createContext(undefined); + +const LOCATION_STORAGE_KEY = 'khet_ai_location'; + +export const LocationProvider: React.FC<{ children: ReactNode }> = ({ children }) => { + const [location, setLocationState] = useState(null); + const [loading, setLoading] = useState(true); + const [isFetching, setIsFetching] = useState(false); + const { toast } = useToast(); + + useEffect(() => { + setLoading(true); + try { + const storedLocation = localStorage.getItem(LOCATION_STORAGE_KEY); + if (storedLocation) { + setLocationState(JSON.parse(storedLocation)); + } + } catch (error) { + console.error('Failed to load location from localStorage', error); + setLocationState(null); + } finally { + setLoading(false); + } + }, []); + + const setLocation = useCallback((newLocation: LocationInfo) => { + setLocationState(newLocation); + try { + localStorage.setItem(LOCATION_STORAGE_KEY, JSON.stringify(newLocation)); + } catch (error) { + console.error('Failed to save location to localStorage', error); + } + }, []); + + const fetchCurrentLocation = useCallback(() => { + if (!navigator.geolocation) { + toast({ title: 'Geolocation is not supported by your browser.', variant: 'destructive' }); + return; + } + + setIsFetching(true); + navigator.geolocation.getCurrentPosition( + async (position) => { + const { latitude, longitude } = position.coords; + try { + // NOTE: This is a free, no-API-key reverse geocoding service. + // In a production app, you would use a more robust service like Google Maps Geocoding API. + const response = await fetch(`https://nominatim.openstreetmap.org/reverse?format=json&lat=${latitude}&lon=${longitude}`); + const data = await response.json(); + const city = data.address.city || data.address.town || data.address.village || 'Unknown Location'; + setLocation({ city }); + toast({ title: 'Location updated successfully!', description: `Your location is set to ${city}.` }); + } catch (error) { + console.error("Error fetching city:", error); + toast({ title: 'Could not determine city from coordinates.', variant: 'destructive' }); + } finally { + setIsFetching(false); + } + }, + (error) => { + console.error("Geolocation error:", error); + toast({ title: 'Could not get location.', description: 'Please ensure location permissions are granted.', variant: 'destructive' }); + setIsFetching(false); + } + ); + }, [setLocation, toast]); + + + return ( + + {children} + + ); +}; + +export const useLocation = (): LocationContextType => { + const context = useContext(LocationContext); + if (!context) { + throw new Error('useLocation must be used within a LocationProvider'); + } + return context; +}; diff --git a/src/lib/translations.ts b/src/lib/translations.ts index 5b552c8..d16f663 100644 --- a/src/lib/translations.ts +++ b/src/lib/translations.ts @@ -73,6 +73,20 @@ const translations = { 'otp_label': 'Enter OTP', 'otp_placeholder': '123456', 'verify_otp_button': 'Verify OTP', + + // Location + 'location_title': 'Set Your Location', + 'location_subtitle': 'Get market prices relevant to your area.', + 'use_current_location': 'Use My Current Location', + 'or_enter_manually': 'Or enter your city manually', + 'city_label': 'City', + 'city_placeholder': 'e.g. Pune', + 'save_location': 'Save Location', + 'location_set': 'Location set', + 'location_not_set': 'Location not set', + 'location_error': 'Could not get location. Please grant permission and try again.', + 'location_fetching': 'Fetching location...', + }, hi: { // Hindi 'home': 'होम', @@ -140,6 +154,18 @@ const translations = { 'otp_label': 'OTP दर्ज करें', 'otp_placeholder': '123456', 'verify_otp_button': 'OTP सत्यापित करें', + + 'location_title': 'अपना स्थान निर्धारित करें', + 'location_subtitle': 'अपने क्षेत्र से संबंधित बाजार मूल्य प्राप्त करें।', + 'use_current_location': 'मेरा वर्तमान स्थान उपयोग करें', + 'or_enter_manually': 'या अपना शहर मैन्युअल रूप से दर्ज करें', + 'city_label': 'शहर', + 'city_placeholder': 'जैसे पुणे', + 'save_location': 'स्थान सहेजें', + 'location_set': 'स्थान निर्धारित है', + 'location_not_set': 'स्थान निर्धारित नहीं है', + 'location_error': 'स्थान प्राप्त नहीं हो सका। कृपया अनुमति दें और पुनः प्रयास करें।', + 'location_fetching': 'स्थान प्राप्त हो रहा है...', }, kn: { // Kannada 'home': 'ಮನೆ', @@ -207,6 +233,18 @@ const translations = { 'otp_label': 'OTP ನಮೂದಿಸಿ', 'otp_placeholder': '123456', 'verify_otp_button': 'OTP ಪರಿಶೀಲಿಸಿ', + + 'location_title': 'ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಿ', + 'location_subtitle': 'ನಿಮ್ಮ ಪ್ರದೇಶಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಮಾರುಕಟ್ಟೆ ಬೆಲೆಗಳನ್ನು ಪಡೆಯಿರಿ.', + 'use_current_location': 'ನನ್ನ ಪ್ರಸ್ತುತ ಸ್ಥಳವನ್ನು ಬಳಸಿ', + 'or_enter_manually': 'ಅಥವಾ ನಿಮ್ಮ ನಗರವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಮೂದಿಸಿ', + 'city_label': 'ನಗರ', + 'city_placeholder': 'ಉದಾ. ಬೆಂಗಳೂರು', + 'save_location': 'ಸ್ಥಳವನ್ನು ಉಳಿಸಿ', + 'location_set': 'ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ', + 'location_not_set': 'ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಿಲ್ಲ', + 'location_error': 'ಸ್ಥಳವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಅನುಮತಿ ನೀಡಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.', + 'location_fetching': 'ಸ್ಥಳವನ್ನು ತರಲಾಗುತ್ತಿದೆ...', }, mr: { // Marathi // App Shell @@ -281,6 +319,19 @@ const translations = { 'otp_label': 'OTP टाका', 'otp_placeholder': '123456', 'verify_otp_button': 'OTP सत्यापित करा', + + // Location + 'location_title': 'तुमचे स्थान सेट करा', + 'location_subtitle': 'तुमच्या क्षेत्राशी संबंधित बाजारभाव मिळवा.', + 'use_current_location': 'माझे वर्तमान स्थान वापरा', + 'or_enter_manually': 'किंवा तुमचे शहर व्यक्तिचलितपणे प्रविष्ट करा', + 'city_label': 'शहर', + 'city_placeholder': 'उदा. पुणे', + 'save_location': 'स्थान जतन करा', + 'location_set': 'स्थान सेट केले आहे', + 'location_not_set': 'स्थान सेट केलेले नाही', + 'location_error': 'स्थान मिळू शकले नाही. कृपया परवानगी द्या आणि पुन्हा प्रयत्न करा.', + 'location_fetching': 'स्थान मिळवत आहे...', }, ta: { // Tamil // App Shell @@ -355,6 +406,19 @@ const translations = { 'otp_label': 'OTP உள்ளிடவும்', 'otp_placeholder': '123456', 'verify_otp_button': 'OTP சரிபார்க்கவும்', + + // Location + 'location_title': 'உங்கள் இருப்பிடத்தை அமைக்கவும்', + 'location_subtitle': 'உங்கள் பகுதிக்குரிய சந்தை விலைகளைப் பெறுங்கள்.', + 'use_current_location': 'எனது தற்போதைய இருப்பிடத்தைப் பயன்படுத்து', + 'or_enter_manually': 'அல்லது உங்கள் நகரத்தை கைமுறையாக உள்ளிடவும்', + 'city_label': 'நகரம்', + 'city_placeholder': 'எ.கா. சென்னை', + 'save_location': 'இருப்பிடத்தைச் சேமி', + 'location_set': 'இருப்பிடம் அமைக்கப்பட்டது', + 'location_not_set': 'இருப்பிடம் அமைக்கப்படவில்லை', + 'location_error': 'இருப்பிடத்தைப் பெற முடியவில்லை. தயவுசெய்து அனுமதி அளித்து மீண்டும் முயற்சிக்கவும்.', + 'location_fetching': 'இருப்பிடத்தைப் பெறுகிறது...', }, ml: { // Malayalam // App Shell @@ -429,6 +493,19 @@ const translations = { 'otp_label': 'OTP നൽകുക', 'otp_placeholder': '123456', 'verify_otp_button': 'OTP പരിശോധിക്കുക', + + // Location + 'location_title': 'നിങ്ങളുടെ സ്ഥലം സജ്ജീകരിക്കുക', + 'location_subtitle': 'നിങ്ങളുടെ പ്രദേശവുമായി ബന്ധപ്പെട്ട മാർക്കറ്റ് വിലകൾ നേടുക.', + 'use_current_location': 'എൻ്റെ ഇപ്പോഴത്തെ സ്ഥലം ഉപയോഗിക്കുക', + 'or_enter_manually': 'അല്ലെങ്കിൽ നിങ്ങളുടെ നഗരം സ്വമേധയാ നൽകുക', + 'city_label': 'നഗരം', + 'city_placeholder': 'ഉദാ. കൊച്ചി', + 'save_location': 'സ്ഥലം സംരക്ഷിക്കുക', + 'location_set': 'സ്ഥലം സജ്ജമാക്കി', + 'location_not_set': 'സ്ഥലം സജ്ജമാക്കിയിട്ടില്ല', + 'location_error': 'സ്ഥലം ലഭിച്ചില്ല. ദയവായി അനുമതി നൽകി വീണ്ടും ശ്രമിക്കുക.', + 'location_fetching': 'സ്ഥലം ലഭ്യമാക്കുന്നു...', }, te: { // Telugu // App Shell @@ -503,6 +580,19 @@ const translations = { 'otp_label': 'OTP నమోదు చేయండి', 'otp_placeholder': '123456', 'verify_otp_button': 'OTP ధృవీకరించండి', + + // Location + 'location_title': 'మీ స్థానాన్ని సెట్ చేయండి', + 'location_subtitle': 'మీ ప్రాంతానికి సంబంధించిన మార్కెట్ ధరలను పొందండి.', + 'use_current_location': 'నా ప్రస్తుత స్థానాన్ని ఉపయోగించు', + 'or_enter_manually': 'లేదా మీ నగరాన్ని మాన్యువల్‌గా నమోదు చేయండి', + 'city_label': 'నగరం', + 'city_placeholder': 'ఉదా. హైదరాబాద్', + 'save_location': 'స్థానాన్ని సేవ్ చేయండి', + 'location_set': 'స్థానం సెట్ చేయబడింది', + 'location_not_set': 'స్థానం సెట్ చేయబడలేదు', + 'location_error': 'స్థానాన్ని పొందలేకపోయాము. దయచేసి అనుమతిని మంజూరు చేసి మళ్లీ ప్రయత్నించండి.', + 'location_fetching': 'స్థానం పొందుతోంది...', } }; From f944c3c2e199af6e80051e281c9f00e3b1e6581d Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 15:49:47 +0000 Subject: [PATCH 09/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/dev.ts | 1 + src/ai/flows/diagnose-crop-disease.ts | 2 +- src/ai/flows/get-mandi-price-insights.ts | 2 +- src/ai/flows/khet-ai-agent.ts | 102 +++++++++++++++++ src/app/page.tsx | 135 ++++++++++++++++------- src/components/chat-message.tsx | 42 +++++++ src/lib/translations.ts | 50 +++++++++ 7 files changed, 294 insertions(+), 40 deletions(-) create mode 100644 src/ai/flows/khet-ai-agent.ts create mode 100644 src/components/chat-message.tsx diff --git a/src/ai/dev.ts b/src/ai/dev.ts index 0750c9d..19970b1 100644 --- a/src/ai/dev.ts +++ b/src/ai/dev.ts @@ -4,3 +4,4 @@ config(); import '@/ai/flows/summarize-government-scheme.ts'; import '@/ai/flows/diagnose-crop-disease.ts'; import '@/ai/flows/get-mandi-price-insights.ts'; +import '@/ai/flows/khet-ai-agent.ts'; diff --git a/src/ai/flows/diagnose-crop-disease.ts b/src/ai/flows/diagnose-crop-disease.ts index 2647496..2064275 100644 --- a/src/ai/flows/diagnose-crop-disease.ts +++ b/src/ai/flows/diagnose-crop-disease.ts @@ -22,7 +22,7 @@ const DiagnoseCropDiseaseInputSchema = z.object({ }); export type DiagnoseCropDiseaseInput = z.infer; -const DiagnoseCropDiseaseOutputSchema = z.object({ +export const DiagnoseCropDiseaseOutputSchema = z.object({ diagnosis: z.string().describe('The diagnosis of the crop disease.'), }); export type DiagnoseCropDiseaseOutput = z.infer; diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index 4e22edc..d5c7daa 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -115,4 +115,4 @@ const getMandiPriceInsightsFlow = ai.defineFlow( const translatedSummary = await translateText({ text: output.summary, targetLanguage }); return { summary: translatedSummary.translatedText }; } -); \ No newline at end of file +); diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts new file mode 100644 index 0000000..1dc40e7 --- /dev/null +++ b/src/ai/flows/khet-ai-agent.ts @@ -0,0 +1,102 @@ +'use server'; +/** + * @fileOverview A conversational agent that can answer questions about farming. + * + * - khetAIAgent - A function that handles the conversational agent process. + * - KhetAIAgentInput - The input type for the khetAIAgent function. + * - KhetAIAgentOutput - The return type for the khetAIAgent function. + */ + +import {ai} from '@/ai/genkit'; +import {z} from 'genkit'; +import {diagnoseCropDisease, DiagnoseCropDiseaseInput, DiagnoseCropDiseaseOutput, DiagnoseCropDiseaseOutputSchema} from './diagnose-crop-disease'; +import {getMandiPriceInsights, GetMandiPriceInsightsInput, GetMandiPriceInsightsOutput} from './get-mandi-price-insights'; +import {summarizeGovernmentScheme, SummarizeGovernmentSchemeInput, SummarizeGovernmentSchemeOutput} from './summarize-government-scheme'; +import { translateText } from './translate-text'; + +const KhetAIAgentInputSchema = z.object({ + query: z.string().describe("The user's query."), + location: z.string().describe("The user's location (e.g., city, district)."), + targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), +}); +export type KhetAIAgentInput = z.infer; + +const KhetAIAgentOutputSchema = z.object({ + response: z.string().describe("The agent's response to the user's query."), +}); +export type KhetAIAgentOutput = z.infer; + +// Note: We can't pass image data to this agent directly yet. +// For crop diagnosis, the user would be prompted to go to the specific page. +const cropDiseaseTool = ai.defineTool( + { + name: 'diagnoseCropDisease', + description: 'Diagnoses crop diseases from a user query. This tool CANNOT analyze images. It can only answer text questions about crop diseases.', + inputSchema: z.object({ + query: z.string().describe("The user's question about the crop disease."), + targetLanguage: z.string().describe('The target language for the response.'), + }), + outputSchema: DiagnoseCropDiseaseOutputSchema, + }, + async (input) => diagnoseCropDisease({ photoDataUri: '', query: input.query, targetLanguage: input.targetLanguage }) +); + +const mandiPriceTool = ai.defineTool( + { + name: 'getMandiPriceInsights', + description: 'Gets mandi price insights for a specific crop and location.', + inputSchema: GetMandiPriceInsightsInputSchema, + outputSchema: GetMandiPriceInsightsOutputSchema, + }, + async (input) => getMandiPriceInsights(input) + ); + +const govSchemeTool = ai.defineTool( + { + name: 'summarizeGovernmentScheme', + description: 'Summarizes a government scheme for a farmer.', + inputSchema: SummarizeGovernmentSchemeInputSchema, + outputSchema: SummarizeGovernmentSchemeOutput, + }, + async (input) => summarizeGovernmentScheme(input) +); + + +export async function khetAIAgent(input: KhetAIAgentInput): Promise { + return khetAIAgentFlow(input); +} + +const prompt = ai.definePrompt({ + name: 'khetAIAgentPrompt', + model: 'googleai/gemini-1.5-flash', + tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], + system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. +Your goal is to understand the user's question and use the available tools to provide a clear and concise answer in their selected language. +- For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. +- For government schemes, use the summarizeGovernmentScheme tool. +- For questions about crop diseases, use the diagnoseCropDisease tool. If the user wants to diagnose a disease from a photo, you must tell them to go to the "Crop Health" page to upload an image, as you cannot process images in this chat. +- If the user asks a general question or something you don't have a tool for, provide a helpful answer based on your general knowledge. +- Always be polite and address the farmer directly. +- The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. +- The user's preferred language is {{targetLanguage}}. You MUST respond in this language. The tools will automatically handle translation, but your own conversational text must also be translated.`, + input: { schema: KhetAIAgentInputSchema }, + output: { schema: KhetAIAgentOutputSchema }, + }); + + +const khetAIAgentFlow = ai.defineFlow( + { + name: 'khetAIAgentFlow', + inputSchema: KhetAIAgentInputSchema, + outputSchema: KhetAIAgentOutputSchema, + }, + async (input) => { + const result = await prompt(input); + const responseText = result.output?.response || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; + + // Final translation check + const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); + + return { response: translatedResponse.translatedText }; + } +); diff --git a/src/app/page.tsx b/src/app/page.tsx index e7358f0..c32d541 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,53 +1,112 @@ 'use client'; -import { Leaf, HandCoins, Building2, Settings } from 'lucide-react'; -import FeatureCard from '@/components/feature-card'; +import { useState, useRef, useEffect } from 'react'; +import { Send, Loader2, Bot, User } from 'lucide-react'; import PageHeader from '@/components/page-header'; import { useLanguage } from '@/contexts/language-context'; +import { useLocation } from '@/contexts/location-context'; +import { Input } from '@/components/ui/input'; +import { Button } from '@/components/ui/button'; +import { ScrollArea } from '@/components/ui/scroll-area'; +import VoiceInputButton from '@/components/voice-input-button'; +import ChatMessage, { ChatMessageProps } from '@/components/chat-message'; +import { useToast } from '@/hooks/use-toast'; +import { khetAIAgent } from '@/ai/flows/khet-ai-agent'; export default function Home() { - const { t } = useLanguage(); - - const features = [ - { - title: t('crop_health_diagnosis_title'), - description: t('crop_health_diagnosis_desc'), - href: '/crop-diagnosis', - icon: , - }, - { - title: t('mandi_price_insights_title'), - description: t('mandi_price_insights_desc'), - href: '/mandi-prices', - icon: , - }, - { - title: t('gov_schemes_info_title'), - description: t('gov_schemes_info_desc'), - href: '/gov-schemes', - icon: , - }, - { - title: t('settings'), - description: t('query_history_desc'), - href: '/settings', - icon: , - }, - ]; + const { t, language } = useLanguage(); + const { location } = useLocation(); + const { toast } = useToast(); + const [messages, setMessages] = useState([]); + const [input, setInput] = useState(''); + const [loading, setLoading] = useState(false); + const scrollAreaRef = useRef(null); + + useEffect(() => { + setMessages([ + { + role: 'assistant', + content: t('welcome_message_agent'), + }, + ]); + }, [t]); + + useEffect(() => { + if (scrollAreaRef.current) { + scrollAreaRef.current.scrollTo({ + top: scrollAreaRef.current.scrollHeight, + behavior: 'smooth', + }); + } + }, [messages]); + + const handleSendMessage = async (e: React.FormEvent) => { + e.preventDefault(); + if (!input.trim() || loading) return; + + const userMessage: ChatMessageProps = { role: 'user', content: input }; + setMessages((prev) => [...prev, userMessage]); + setInput(''); + setLoading(true); + + try { + if (!location) { + toast({ title: t('location_not_set'), description: t('set_location_for_agent'), variant: 'destructive' }); + setMessages(prev => [...prev, { role: 'assistant', content: t('set_location_for_agent')}]); + setLoading(false); + return; + } + + const response = await khetAIAgent({ + query: input, + location: location.city, + targetLanguage: language, + }); + + const assistantMessage: ChatMessageProps = { role: 'assistant', content: response.response }; + setMessages((prev) => [...prev, assistantMessage]); + + } catch (error) { + console.error('Agent error:', error); + toast({ title: t('agent_error'), variant: 'destructive' }); + const errorMessage: ChatMessageProps = { role: 'assistant', content: t('agent_error_message') }; + setMessages((prev) => [...prev, errorMessage]); + } finally { + setLoading(false); + } + }; return (
-
-
- {features.map((feature) => ( - + +
+ {messages.map((msg, index) => ( + + ))} + {loading && } />} +
+
+
+
+ setInput(e.target.value)} + placeholder={t('agent_placeholder')} + className="flex-1 text-base p-6" + disabled={loading} + /> + setInput(text)} /> - ))} + +
diff --git a/src/components/chat-message.tsx b/src/components/chat-message.tsx new file mode 100644 index 0000000..d9c672f --- /dev/null +++ b/src/components/chat-message.tsx @@ -0,0 +1,42 @@ +'use client'; + +import { Bot, User } from 'lucide-react'; +import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; +import { cn } from '@/lib/utils'; + +export interface ChatMessageProps { + role: 'user' | 'assistant'; + content: React.ReactNode; +} + +export default function ChatMessage({ role, content }: ChatMessageProps) { + const isUser = role === 'user'; + return ( +
+ {!isUser && ( + + + + + + )} +
+ {content} +
+ {isUser && ( + + + + + + )} +
+ ); +} diff --git a/src/lib/translations.ts b/src/lib/translations.ts index d16f663..4ebae7a 100644 --- a/src/lib/translations.ts +++ b/src/lib/translations.ts @@ -13,6 +13,14 @@ const translations = { // Home Page 'welcome_title': 'Welcome to KhetAI', 'welcome_subtitle': 'Your personal farming assistant, powered by AI.', + 'welcome_subtitle_agent': 'Ask me anything about your farm.', + 'welcome_message_agent': 'Hello! I am KhetAI, your personal farming assistant. How can I help you today? You can ask me about crop diseases, market prices, or government schemes.', + 'agent_placeholder': 'Ask a question...', + 'agent_error': 'An error occurred', + 'agent_error_message': 'I am sorry, something went wrong. Please try again.', + 'set_location_for_agent': 'Please set your location in the top right corner to ask about local information like mandi prices.', + + 'crop_health_diagnosis_title': 'Crop Health Diagnosis', 'crop_health_diagnosis_desc': 'Upload a photo of your crop to get an instant health diagnosis and recommendations.', 'mandi_price_insights_title': 'Mandi Price Insights', @@ -100,6 +108,13 @@ const translations = { 'welcome_title': 'खेतAI में आपका स्वागत है', 'welcome_subtitle': 'आपका व्यक्तिगत खेती सहायक, AI द्वारा संचालित।', + 'welcome_subtitle_agent': 'मुझसे अपनी खेती के बारे में कुछ भी पूछें।', + 'welcome_message_agent': 'नमस्ते! मैं खेतAI हूँ, आपका व्यक्तिगत खेती सहायक। आज मैं आपकी कैसे मदद कर सकता हूँ? आप मुझसे फसल रोगों, बाजार मूल्य, या सरकारी योजनाओं के बारे में पूछ सकते हैं।', + 'agent_placeholder': 'एक सवाल पूछें...', + 'agent_error': 'एक त्रुटि हुई', + 'agent_error_message': 'मुझे खेद है, कुछ गलत हो गया। कृपया पुन: प्रयास करें।', + 'set_location_for_agent': 'मंडी मूल्य जैसी स्थानीय जानकारी पूछने के लिए कृपया ऊपरी दाएं कोने में अपना स्थान निर्धारित करें।', + 'crop_health_diagnosis_title': 'फसल स्वास्थ्य निदान', 'crop_health_diagnosis_desc': 'तत्काल स्वास्थ्य निदान और सिफारिशें प्राप्त करने के लिए अपनी फसल की एक तस्वीर अपलोड करें।', 'mandi_price_insights_title': 'मंडी मूल्य जानकारी', @@ -179,6 +194,13 @@ const translations = { 'welcome_title': 'ಖೇತ್AI ಗೆ ಸುಸ್ವಾಗತ', 'welcome_subtitle': 'ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಕೃಷಿ ಸಹಾಯಕ, AI ನಿಂದ ಚಾಲಿತವಾಗಿದೆ.', + 'welcome_subtitle_agent': 'ನಿಮ್ಮ ખેતી ಬಗ್ಗೆ ಏನು ಬೇಕಾದರೂ ಕೇಳಿ.', + 'welcome_message_agent': 'ನಮಸ್ಕಾರ! ನಾನು ಖೇತ್AI, ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಕೃಷಿ ಸಹಾಯಕ. ಇಂದು ನಾನು ನಿಮಗೆ ಹೇಗೆ ಸಹಾಯ ಮಾಡಲಿ? ನೀವು ಬೆಳೆ ರೋಗಗಳು, ಮಾರುಕಟ್ಟೆ ಬೆಲೆಗಳು, ಅಥವಾ ಸರ್ಕಾರಿ ಯೋಜನೆಗಳ ಬಗ್ಗೆ ಕೇಳಬಹುದು.', + 'agent_placeholder': 'ಪ್ರಶ್ನೆ ಕೇಳಿ...', + 'agent_error': 'ಒಂದು ದೋಷ ಸಂಭವಿಸಿದೆ', + 'agent_error_message': 'ಕ್ಷಮಿಸಿ, ಏನೋ ತಪ್ಪಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.', + 'set_location_for_agent': 'ಮಂಡಿ ಬೆಲೆಗಳಂತಹ ಸ್ಥಳೀಯ ಮಾಹಿತಿಗಾಗಿ ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಮೇಲಿನ ಬಲ ಮೂಲೆಯಲ್ಲಿ ಹೊಂದಿಸಿ.', + 'crop_health_diagnosis_title': 'ಬೆಳೆ ಆರೋಗ್ಯ ನಿರ್ಧಾರ', 'crop_health_diagnosis_desc': 'ತಕ್ಷಣದ ಆರೋಗ್ಯ ನಿರ್ಧಾರ ಮತ್ತು ಶಿಫಾರಸುಗಳಿಗಾಗಿ ನಿಮ್ಮ ಬೆಳೆ ಫೋಟೋ ಅಪ್‌ಲೋಡ್ ಮಾಡಿ.', 'mandi_price_insights_title': 'ಮಂಡಿ ಬೆಲೆ ಮಾಹಿತಿಗಳು', @@ -260,6 +282,13 @@ const translations = { // Home Page 'welcome_title': 'KhetAI मध्ये आपले स्वागत आहे', 'welcome_subtitle': 'तुमचा वैयक्तिक शेती सहायक, AI द्वारे समर्थित.', + 'welcome_subtitle_agent': 'तुमच्या शेताबद्दल काहीही विचारा.', + 'welcome_message_agent': 'नमस्कार! मी KhetAI, तुमचा वैयक्तिक शेती सहायक आहे. आज मी तुमची काय मदत करू शकतो? तुम्ही मला पिकांचे रोग, बाजारभाव किंवा सरकारी योजनांबद्दल विचारू शकता.', + 'agent_placeholder': 'प्रश्न विचारा...', + 'agent_error': 'एक त्रुटी आली', + 'agent_error_message': 'क्षमस्व, काहीतरी चूक झाली. कृपया पुन्हा प्रयत्न करा.', + 'set_location_for_agent': 'मंडईचे दर यासारख्या स्थानिक माहितीसाठी कृपया वरच्या उजव्या कोपर्यात आपले स्थान सेट करा.', + 'crop_health_diagnosis_title': 'पिकाचे आरोग्य निदान', 'crop_health_diagnosis_desc': 'तत्काळ निदान व शिफारसी मिळवण्यासाठी पिकाचा फोटो अपलोड करा.', 'mandi_price_insights_title': 'मंडई दर माहिती', @@ -347,6 +376,13 @@ const translations = { // Home Page 'welcome_title': 'KhetAI-க்கு வரவேற்கிறோம்', 'welcome_subtitle': 'AI-இனால் இயக்கப்படும் உங்கள் தனிப்பட்ட விவசாய உதவியாளர்.', + 'welcome_subtitle_agent': 'உங்கள் பண்ணையைப் பற்றி எதுவும் கேளுங்கள்.', + 'welcome_message_agent': 'வணக்கம்! நான் KhetAI, உங்கள் தனிப்பட்ட விவசாய உதவியாளர். இன்று உங்களுக்கு நான் எப்படி உதவ முடியும்? நீங்கள் பயிர் நோய்கள், சந்தை விலைகள், அல்லது அரசு திட்டங்கள் பற்றி கேட்கலாம்.', + 'agent_placeholder': 'ஒரு கேள்வியைக் கேளுங்கள்...', + 'agent_error': 'ஒரு பிழை ஏற்பட்டது', + 'agent_error_message': 'மன்னிக்கவும், ஏதோ தவறு நடந்துவிட்டது. தயவுசெய்து மீண்டும் முயற்சிக்கவும்.', + 'set_location_for_agent': 'மண்டி விலைகள் போன்ற உள்ளூர் தகவல்களைப் பற்றி கேட்க, மேல் வலது மூலையில் உங்கள் இருப்பிடத்தை அமைக்கவும்.', + 'crop_health_diagnosis_title': 'பயிர் ஆரோக்கிய மதிப்பீடு', 'crop_health_diagnosis_desc': 'உடனடி ஆரோக்கிய மதிப்பீடு மற்றும் பரிந்துரைகளைப் பெற உங்கள் பயிர் புகைப்படத்தைப் பதிவேற்றுங்கள்.', 'mandi_price_insights_title': 'மண்டி விலை தகவல்கள்', @@ -434,6 +470,13 @@ const translations = { // Home Page 'welcome_title': 'ഖേതAI ലേക്ക് സ്വാഗതം', 'welcome_subtitle': 'AI പ്രവർത്തിപ്പിക്കുന്ന നിങ്ങളുടെ വ്യക്തിഗത കൃഷി സഹായകൻ.', + 'welcome_subtitle_agent': 'നിങ്ങളുടെ കൃഷിയെക്കുറിച്ച് എന്തും ചോദിക്കൂ.', + 'welcome_message_agent': 'നമസ്കാരം! ഞാൻ ഖേതAI, നിങ്ങളുടെ വ്യക്തിഗത കൃഷി സഹായകൻ. ഇന്ന് ഞാൻ നിങ്ങളെ എങ്ങനെ സഹായിക്കണം? നിങ്ങൾക്ക് വിള രോഗങ്ങൾ, വിപണി വിലകൾ, അല്ലെങ്കിൽ സർക്കാർ പദ്ധതികൾ എന്നിവയെക്കുറിച്ച് ചോദിക്കാം.', + 'agent_placeholder': 'ഒരു ചോദ്യം ചോദിക്കൂ...', + 'agent_error': 'ഒരു പിശക് സംഭവിച്ചു', + 'agent_error_message': 'ക്ഷമിക്കണം, എന്തോ പിശകു സംഭവിച്ചു. ദയവായി വീണ്ടും ശ്രമിക്കുക.', + 'set_location_for_agent': 'മണ്ടി വിലകൾ പോലുള്ള പ്രാദേശിക വിവരങ്ങൾക്കായി ദയവായി നിങ്ങളുടെ സ്ഥലം മുകളിൽ വലത് കോണിൽ സജ്ജീകരിക്കുക.', + 'crop_health_diagnosis_title': 'വിളാരോഗ്യ നിർണയം', 'crop_health_diagnosis_desc': 'തൽക്ഷണ ആരോഗ്യനിർണയം ലഭിക്കാൻ നിങ്ങളുടെ വിളയുടെ ഫോട്ടോ അപ്‌ലോഡ് ചെയ്യുക.', 'mandi_price_insights_title': 'മണ്ടി വില വിവരങ്ങൾ', @@ -521,6 +564,13 @@ const translations = { // Home Page 'welcome_title': 'KhetAI కు స్వాగతం', 'welcome_subtitle': 'AI చేత నడపబడే మీ వ్యక్తిగత వ్యవసాయ సహాయకుడు.', + 'welcome_subtitle_agent': 'మీ వ్యవసాయం గురించి ఏమైనా అడగండి.', + 'welcome_message_agent': 'నమస్కారం! నేను KhetAI, మీ వ్యక్తిగత వ్యవసాయ సహాయకుడిని. ఈ రోజు నేను మీకు ఎలా సహాయపడగలను? మీరు పంట వ్యాధులు, మార్కెట్ ధరలు, లేదా ప్రభుత్వ పథకాల గురించి అడగవచ్చు.', + 'agent_placeholder': 'ప్రశ్న అడగండి...', + 'agent_error': 'ఒక దోషం సంభవించింది', + 'agent_error_message': 'క్షమించండి, ఏదో తప్పు జరిగింది. దయచేసి మళ్లీ ప్రయత్నించండి.', + 'set_location_for_agent': 'మండీ ధరల వంటి స్థానిక సమాచారం కోసం దయచేసి మీ స్థానాన్ని పై కుడి మూలలో సెట్ చేయండి.', + 'crop_health_diagnosis_title': 'పంట ఆరోగ్య నిర్ధారణ', 'crop_health_diagnosis_desc': 'తక్షణ ఆరోగ్య నిర్ధారణ కోసం మీ పంట ఫోటోను అప్‌లోడ్ చేయండి.', 'mandi_price_insights_title': 'మండీ ధరలు సమాచారం', From 4a3c7c2ccabc7d487d92da604ceaa0591d223f9f Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 16:13:26 +0000 Subject: [PATCH 10/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/definitions.ts | 91 +++++++++++++++++++++ src/ai/flows/diagnose-crop-disease.ts | 24 ++---- src/ai/flows/get-mandi-price-insights.ts | 20 ++--- src/ai/flows/khet-ai-agent.ts | 38 ++++----- src/ai/flows/summarize-government-scheme.ts | 20 ++--- src/ai/flows/translate-text.ts | 19 ++--- 6 files changed, 132 insertions(+), 80 deletions(-) create mode 100644 src/ai/definitions.ts diff --git a/src/ai/definitions.ts b/src/ai/definitions.ts new file mode 100644 index 0000000..1ba8062 --- /dev/null +++ b/src/ai/definitions.ts @@ -0,0 +1,91 @@ +/** + * @fileOverview Centralized definitions for AI flow schemas and types. + * + * This file contains all the Zod schemas and TypeScript type definitions + * used by the Genkit flows. It does not contain any server-side logic + * and can be safely imported by both server and client components. + */ + +import { z } from 'zod'; + +// ============================================= +// Diagnose Crop Disease +// ============================================= +export const DiagnoseCropDiseaseInputSchema = z.object({ + photoDataUri: z + .string() + .describe( + "A photo of a crop, as a data URI that must include a MIME type and use Base64 encoding. Expected format: 'data:;base64,'." + ), + query: z.string().describe('The user\'s question about the crop.'), + targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), +}); +export type DiagnoseCropDiseaseInput = z.infer; + +export const DiagnoseCropDiseaseOutputSchema = z.object({ + diagnosis: z.string().describe('The diagnosis of the crop disease.'), +}); +export type DiagnoseCropDiseaseOutput = z.infer; + + +// ============================================= +// Get Mandi Price Insights +// ============================================= +export const GetMandiPriceInsightsInputSchema = z.object({ + crop: z.string().describe('The crop to get mandi price insights for.'), + location: z.string().describe('The location (e.g., city, district) to get mandi price insights for.'), + targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), +}); +export type GetMandiPriceInsightsInput = z.infer; + +export const GetMandiPriceInsightsOutputSchema = z.object({ + summary: z.string().describe('A summary of recent mandi price trends for the specified crop and location.'), +}); +export type GetMandiPriceInsightsOutput = z.infer; + + +// ============================================= +// Summarize Government Scheme +// ============================================= +export const SummarizeGovernmentSchemeInputSchema = z.object({ + schemeName: z.string().describe('The name of the government scheme to summarize.'), + query: z.string().describe('The query about the government scheme.'), + targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), +}); +export type SummarizeGovernmentSchemeInput = z.infer; + +export const SummarizeGovernmentSchemeOutputSchema = z.object({ + summary: z.string().describe('A simplified summary of the government scheme.'), +}); +export type SummarizeGovernmentSchemeOutput = z.infer; + + +// ============================================= +// KhetAI Agent +// ============================================= +export const KhetAIAgentInputSchema = z.object({ + query: z.string().describe("The user's query."), + location: z.string().describe("The user's location (e.g., city, district)."), + targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), +}); +export type KhetAIAgentInput = z.infer; + +export const KhetAIAgentOutputSchema = z.object({ + response: z.string().describe("The agent's response to the user's query."), +}); +export type KhetAIAgentOutput = z.infer; + + +// ============================================= +// Translate Text +// ============================================= +export const TranslateTextInputSchema = z.object({ + text: z.string().describe('The text to be translated.'), + targetLanguage: z.string().describe('The target language for translation (e.g., "Hindi", "en", "es").'), +}); +export type TranslateTextInput = z.infer; + +export const TranslateTextOutputSchema = z.object({ + translatedText: z.string().describe('The translated text.'), +}); +export type TranslateTextOutput = z.infer; diff --git a/src/ai/flows/diagnose-crop-disease.ts b/src/ai/flows/diagnose-crop-disease.ts index 2064275..62d221e 100644 --- a/src/ai/flows/diagnose-crop-disease.ts +++ b/src/ai/flows/diagnose-crop-disease.ts @@ -3,29 +3,17 @@ * @fileOverview Crop disease diagnosis flow using image analysis. * * - diagnoseCropDisease - A function that diagnoses crop diseases from an image. - * - DiagnoseCropDiseaseInput - The input type for the diagnoseCropDisease function. - * - DiagnoseCropDiseaseOutput - The return type for the diagnoseCropDisease function. */ import {ai} from '@/ai/genkit'; import {z} from 'genkit'; import {translateText} from '@/ai/flows/translate-text'; - -const DiagnoseCropDiseaseInputSchema = z.object({ - photoDataUri: z - .string() - .describe( - "A photo of a crop, as a data URI that must include a MIME type and use Base64 encoding. Expected format: 'data:;base64,'." - ), - query: z.string().describe('The user\'s question about the crop.'), - targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), -}); -export type DiagnoseCropDiseaseInput = z.infer; - -export const DiagnoseCropDiseaseOutputSchema = z.object({ - diagnosis: z.string().describe('The diagnosis of the crop disease.'), -}); -export type DiagnoseCropDiseaseOutput = z.infer; +import { + DiagnoseCropDiseaseInput, + DiagnoseCropDiseaseInputSchema, + DiagnoseCropDiseaseOutput, + DiagnoseCropDiseaseOutputSchema, +} from '@/ai/definitions'; export async function diagnoseCropDisease(input: DiagnoseCropDiseaseInput): Promise { return diagnoseCropDiseaseFlow(input); diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index d5c7daa..ed2ce0e 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -4,25 +4,17 @@ * @fileOverview Fetches and summarizes mandi price insights using the Agmarknet API and Gemini. * * - getMandiPriceInsights - A function that fetches, analyzes, and summarizes mandi price data. - * - GetMandiPriceInsightsInput - The input type for the getMandiPriceInsights function. - * - GetMandiPriceInsightsOutput - The return type for the getMandiPriceInsights function. */ import {ai} from '@/ai/genkit'; import {z} from 'genkit'; import { translateText } from './translate-text'; - -const GetMandiPriceInsightsInputSchema = z.object({ - crop: z.string().describe('The crop to get mandi price insights for.'), - location: z.string().describe('The location (e.g., city, district) to get mandi price insights for.'), - targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), -}); -export type GetMandiPriceInsightsInput = z.infer; - -const GetMandiPriceInsightsOutputSchema = z.object({ - summary: z.string().describe('A summary of recent mandi price trends for the specified crop and location.'), -}); -export type GetMandiPriceInsightsOutput = z.infer; +import { + GetMandiPriceInsightsInput, + GetMandiPriceInsightsInputSchema, + GetMandiPriceInsightsOutput, + GetMandiPriceInsightsOutputSchema, +} from '@/ai/definitions'; export async function getMandiPriceInsights(input: GetMandiPriceInsightsInput): Promise { return getMandiPriceInsightsFlow(input); diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 1dc40e7..773ed63 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -3,28 +3,24 @@ * @fileOverview A conversational agent that can answer questions about farming. * * - khetAIAgent - A function that handles the conversational agent process. - * - KhetAIAgentInput - The input type for the khetAIAgent function. - * - KhetAIAgentOutput - The return type for the khetAIAgent function. */ import {ai} from '@/ai/genkit'; -import {z} from 'genkit'; -import {diagnoseCropDisease, DiagnoseCropDiseaseInput, DiagnoseCropDiseaseOutput, DiagnoseCropDiseaseOutputSchema} from './diagnose-crop-disease'; -import {getMandiPriceInsights, GetMandiPriceInsightsInput, GetMandiPriceInsightsOutput} from './get-mandi-price-insights'; -import {summarizeGovernmentScheme, SummarizeGovernmentSchemeInput, SummarizeGovernmentSchemeOutput} from './summarize-government-scheme'; +import {diagnoseCropDisease} from './diagnose-crop-disease'; +import {getMandiPriceInsights} from './get-mandi-price-insights'; +import {summarizeGovernmentScheme} from './summarize-government-scheme'; import { translateText } from './translate-text'; - -const KhetAIAgentInputSchema = z.object({ - query: z.string().describe("The user's query."), - location: z.string().describe("The user's location (e.g., city, district)."), - targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), -}); -export type KhetAIAgentInput = z.infer; - -const KhetAIAgentOutputSchema = z.object({ - response: z.string().describe("The agent's response to the user's query."), -}); -export type KhetAIAgentOutput = z.infer; +import { + DiagnoseCropDiseaseOutputSchema, + GetMandiPriceInsightsInputSchema, + GetMandiPriceInsightsOutputSchema, + SummarizeGovernmentSchemeInputSchema, + SummarizeGovernmentSchemeOutputSchema, + KhetAIAgentInput, + KhetAIAgentInputSchema, + KhetAIAgentOutput, + KhetAIAgentOutputSchema +} from '@/ai/definitions'; // Note: We can't pass image data to this agent directly yet. // For crop diagnosis, the user would be prompted to go to the specific page. @@ -56,7 +52,7 @@ const govSchemeTool = ai.defineTool( name: 'summarizeGovernmentScheme', description: 'Summarizes a government scheme for a farmer.', inputSchema: SummarizeGovernmentSchemeInputSchema, - outputSchema: SummarizeGovernmentSchemeOutput, + outputSchema: SummarizeGovernmentSchemeOutputSchema, }, async (input) => summarizeGovernmentScheme(input) ); @@ -82,7 +78,7 @@ Your goal is to understand the user's question and use the available tools to pr input: { schema: KhetAIAgentInputSchema }, output: { schema: KhetAIAgentOutputSchema }, }); - + const khetAIAgentFlow = ai.defineFlow( { @@ -93,7 +89,7 @@ const khetAIAgentFlow = ai.defineFlow( async (input) => { const result = await prompt(input); const responseText = result.output?.response || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; - + // Final translation check const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); diff --git a/src/ai/flows/summarize-government-scheme.ts b/src/ai/flows/summarize-government-scheme.ts index 3815b4c..2d2e9de 100644 --- a/src/ai/flows/summarize-government-scheme.ts +++ b/src/ai/flows/summarize-government-scheme.ts @@ -4,27 +4,19 @@ * @fileOverview A flow that summarizes government schemes for farmers. * * - summarizeGovernmentScheme - A function that summarizes the scheme. - * - SummarizeGovernmentSchemeInput - The input type for the summarizeGovernmentScheme function. - * - SummarizeGovernmentSchemeOutput - The return type for the summarizeGovernmentScheme function. */ import {ai} from '@/ai/genkit'; import {z} from 'genkit'; import { translateText } from './translate-text'; +import { + SummarizeGovernmentSchemeInput, + SummarizeGovernmentSchemeInputSchema, + SummarizeGovernmentSchemeOutput, + SummarizeGovernmentSchemeOutputSchema +} from '@/ai/definitions'; -const SummarizeGovernmentSchemeInputSchema = z.object({ - schemeName: z.string().describe('The name of the government scheme to summarize.'), - query: z.string().describe('The query about the government scheme.'), - targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), -}); -export type SummarizeGovernmentSchemeInput = z.infer; - -const SummarizeGovernmentSchemeOutputSchema = z.object({ - summary: z.string().describe('A simplified summary of the government scheme.'), -}); -export type SummarizeGovernmentSchemeOutput = z.infer; - export async function summarizeGovernmentScheme(input: SummarizeGovernmentSchemeInput): Promise { return summarizeGovernmentSchemeFlow(input); } diff --git a/src/ai/flows/translate-text.ts b/src/ai/flows/translate-text.ts index 103d311..7aac01e 100644 --- a/src/ai/flows/translate-text.ts +++ b/src/ai/flows/translate-text.ts @@ -6,23 +6,16 @@ * using an AI model. * * - translateText - A function that handles the text translation process. - * - TranslateTextInput - The input type for the translateText function. - * - TranslateTextOutput - The return type for the translateText function. */ import { ai } from '@/ai/genkit'; -import { z } from 'genkit'; +import { + TranslateTextInput, + TranslateTextInputSchema, + TranslateTextOutput, + TranslateTextOutputSchema +} from '@/ai/definitions'; -const TranslateTextInputSchema = z.object({ - text: z.string().describe('The text to be translated.'), - targetLanguage: z.string().describe('The target language for translation (e.g., "Hindi", "en", "es").'), -}); -export type TranslateTextInput = z.infer; - -const TranslateTextOutputSchema = z.object({ - translatedText: z.string().describe('The translated text.'), -}); -export type TranslateTextOutput = z.infer; export async function translateText(input: TranslateTextInput): Promise { // If the target language is English, no need to translate. From 5d63ecd2780ce0a6b6d2f1011505ab8f2cf6df91 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 16:20:13 +0000 Subject: [PATCH 11/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/flows/khet-ai-agent.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 773ed63..7171e0b 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -6,6 +6,7 @@ */ import {ai} from '@/ai/genkit'; +import {z} from 'genkit'; import {diagnoseCropDisease} from './diagnose-crop-disease'; import {getMandiPriceInsights} from './get-mandi-price-insights'; import {summarizeGovernmentScheme} from './summarize-government-scheme'; From dc05245487546f443142a60882b7af4fb4d69d35 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 16:27:25 +0000 Subject: [PATCH 12/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/flows/khet-ai-agent.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 7171e0b..c90299b 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -76,8 +76,6 @@ Your goal is to understand the user's question and use the available tools to pr - Always be polite and address the farmer directly. - The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. - The user's preferred language is {{targetLanguage}}. You MUST respond in this language. The tools will automatically handle translation, but your own conversational text must also be translated.`, - input: { schema: KhetAIAgentInputSchema }, - output: { schema: KhetAIAgentOutputSchema }, }); @@ -88,8 +86,8 @@ const khetAIAgentFlow = ai.defineFlow( outputSchema: KhetAIAgentOutputSchema, }, async (input) => { - const result = await prompt(input); - const responseText = result.output?.response || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; + const {output} = await prompt(input); + const responseText = output?.content?.parts[0]?.text || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; // Final translation check const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); From 4e923993459c4e2b6585989c9782f974e850a9ae Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 16:42:03 +0000 Subject: [PATCH 13/31] Write a complete README.md file for my GitHub project. Include the follo --- README.md | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 142 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cc730c7..51adb82 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,144 @@ -# Firebase Studio +# KhetAI - AI-Powered Farming Assistant -This is a NextJS starter in Firebase Studio. +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -To get started, take a look at src/app/page.tsx. +KhetAI is an AI-powered, multilingual web application designed to be a personal farming assistant for Indian farmers. It provides instant access to crucial information and diagnostics through a simple, conversational interface. + +![KhetAI Screenshot](https://placehold.co/800x450.png?text=KhetAI+App+Screenshot) + +## Overview + +The primary goal of KhetAI is to empower farmers by leveraging generative AI to provide timely and accessible information. The application supports multiple Indian languages and offers the following key features: + +* **Conversational AI Agent**: A central, chat-based interface on the homepage where farmers can ask questions in their native language about crop diseases, market prices, and government schemes. +* **Crop Health Diagnosis**: Farmers can upload a photo of a diseased crop and receive an instant AI-powered diagnosis and treatment recommendations. +* **Mandi Price Insights**: Get up-to-date market prices for various crops from local markets (mandis), with the location automatically detected or set manually. +* **Government Scheme Information**: Ask questions about various government agricultural schemes and receive simplified summaries of benefits, eligibility, and application processes. +* **Multi-language Support**: The entire interface and all AI responses can be translated into several Indian languages. +* **Persistent User Settings**: User preferences for language and location are saved on the device for a seamless experience. + +## Project Structure + +The project follows a standard Next.js App Router structure, organizing files by feature and responsibility. + +``` +khetai-project/ +├── src/ +│ ├── app/ # Next.js App Router pages for each feature +│ │ ├── crop-diagnosis/ # Crop Health page +│ │ ├── gov-schemes/ # Government Schemes page +│ │ ├── history/ # User query history page +│ │ ├── mandi-prices/ # Mandi Prices page +│ │ ├── settings/ # Settings and History page +│ │ ├── layout.tsx # Root layout +│ │ └── page.tsx # Home page (Conversational Agent) +│ │ +│ ├── ai/ # Genkit AI configuration and flows +│ │ ├── flows/ # Server-side AI logic (tools and agents) +│ │ ├── definitions.ts # Centralized Zod schemas for AI I/O +│ │ └── genkit.ts # Genkit plugin initialization +│ │ +│ ├── components/ # Reusable React components +│ │ └── ui/ # ShadCN UI components +│ │ +│ ├── contexts/ # React Context for global state management +│ │ ├── LanguageContext.tsx # Manages app-wide language and translations +│ │ ├── LocationContext.tsx # Manages user's location +│ │ └── HistoryContext.tsx # Manages user's query history +│ │ +│ ├── hooks/ # Custom React hooks +│ │ +│ └── lib/ # Utility functions and libraries +│ ├── translations.ts # Language translation strings +│ └── utils.ts # General utility functions +│ +├── .env # Environment variables (e.g., API keys) +├── next.config.ts # Next.js configuration +├── package.json # Project dependencies and scripts +└── tailwind.config.ts # Tailwind CSS configuration +``` + +## Tech Stack / Tools Used + +* **Framework**: [Next.js](https://nextjs.org/) (with App Router) +* **Language**: [TypeScript](https://www.typescriptlang.org/) +* **AI/Backend**: [Firebase Genkit](https://firebase.google.com/docs/genkit) +* **AI Model**: [Google Gemini](https://ai.google/gemini/) +* **UI Library**: [React](https://reactjs.org/) +* **Component Library**: [ShadCN UI](https://ui.shadcn.com/) +* **Styling**: [Tailwind CSS](https://tailwindcss.com/) +* **State Management**: React Context API +* **Form Handling**: [React Hook Form](https://react-hook-form.com/) +* **Schema Validation**: [Zod](https://zod.dev/) + +## Setup Guide + +Follow these steps to set up and run the project locally. + +**1. Clone the Repository** + +```bash +git clone https://github.com/your-username/khetai-project.git +cd khetai-project +``` + +**2. Install Dependencies** + +```bash +npm install +``` + +**3. Set Up Environment Variables** + +Create a `.env` file in the root of the project by copying the example: + +```bash +cp .env.example .env +``` + +Open the `.env` file and add your Google Gemini API key: + +``` +GEMINI_API_KEY=your_gemini_api_key_here +``` + +**4. Run the Development Server** + +```bash +npm run dev +``` + +The application will be available at `http://localhost:9002`. + +## Usage Instructions + +Once the application is running: +1. **Set Your Language and Location**: Use the selectors in the top-right corner to choose your preferred language and set your city. You can either allow the browser to detect your location or enter it manually. +2. **Interact with the AI Agent**: On the home page, type or speak your question into the chatbox. You can ask about: + * Mandi prices: "What is the price of tomatoes in Pune?" + * Government schemes: "Tell me about the PM Fasal Bima Yojana." + * Crop diseases: "My corn leaves have yellow spots, what could it be?" +3. **Use Specific Features**: Navigate to the dedicated pages using the sidebar for more structured interactions, such as uploading an image for crop diagnosis. +4. **View History**: Go to the "Settings" page to see a history of your past queries and their results. + +## Contributing Guidelines + +Contributions are welcome! If you'd like to contribute to the project, please follow these steps: + +1. **Fork the repository.** +2. **Create a new branch** for your feature or bug fix: `git checkout -b feature/my-new-feature` or `git checkout -b fix/issue-number`. +3. **Make your changes** and commit them with a clear and descriptive commit message. +4. **Push your changes** to your forked repository. +5. **Create a Pull Request** to the `main` branch of the original repository. + +Please ensure your code follows the existing code style and all tests pass. + +## License + +This project is licensed under the **MIT License**. See the [LICENSE](LICENSE) file for more details. + +## Acknowledgements + +* This project was bootstrapped with [Firebase Studio](https://firebase.google.com/studio). +* UI components from [ShadCN UI](https://ui.shadcn.com/). +* Icons by [Lucide React](https://lucide.dev/guide/packages/lucide-react). \ No newline at end of file From 3a1e43ce156828466831bb1d3d1889d651c6cc83 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 16:48:28 +0000 Subject: [PATCH 14/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/flows/khet-ai-agent.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index c90299b..0d1c2fa 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -86,7 +86,12 @@ const khetAIAgentFlow = ai.defineFlow( outputSchema: KhetAIAgentOutputSchema, }, async (input) => { - const {output} = await prompt(input); + const {output} = await prompt(input.query, { + context: { + location: input.location, + targetLanguage: input.targetLanguage, + }, + }); const responseText = output?.content?.parts[0]?.text || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; // Final translation check From e5dea783b658444dd98ef178aeddb60d40476f15 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 17:03:19 +0000 Subject: [PATCH 15/31] In home page conversation, add an option to upload the image also. And v --- package-lock.json | 92 ++++++++++++++++ package.json | 2 + src/ai/definitions.ts | 16 +++ src/ai/dev.ts | 1 + src/ai/flows/khet-ai-agent.ts | 28 +++-- src/ai/flows/text-to-speech.ts | 86 +++++++++++++++ src/app/page.tsx | 151 +++++++++++++++++++++----- src/components/chat-message.tsx | 31 +++++- src/components/voice-input-button.tsx | 13 ++- 9 files changed, 375 insertions(+), 45 deletions(-) create mode 100644 src/ai/flows/text-to-speech.ts diff --git a/package-lock.json b/package-lock.json index 6144943..fe7454b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,12 +47,14 @@ "recharts": "^2.15.1", "tailwind-merge": "^3.0.1", "tailwindcss-animate": "^1.0.7", + "wav": "^1.0.2", "zod": "^3.24.2" }, "devDependencies": { "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/wav": "^1.0.4", "postcss": "^8", "tailwindcss": "^3.4.1", "typescript": "^5" @@ -2818,6 +2820,16 @@ "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", "license": "MIT" }, + "node_modules/@types/wav": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/wav/-/wav-1.0.4.tgz", + "integrity": "sha512-s8C6tD2lPnkNkX2rWl0FMSpOXrKb3zB9eRO36p2bViSVw9lVJLSJRK7sOe7lOQ13YpM22/K91o/stMempoWPFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", @@ -3065,12 +3077,40 @@ "node": ">=8" } }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "license": "MIT" + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "license": "BSD-3-Clause" }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "license": "MIT" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -3450,6 +3490,12 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -5715,6 +5761,24 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6231,6 +6295,15 @@ "node": ">= 0.8" } }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "license": "MIT", + "dependencies": { + "debug": "2" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -6239,6 +6312,12 @@ "node": ">=10.0.0" } }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -6681,6 +6760,19 @@ "d3-timer": "^3.0.1" } }, + "node_modules/wav": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz", + "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==", + "license": "MIT", + "dependencies": { + "buffer-alloc": "^1.1.0", + "buffer-from": "^1.0.0", + "debug": "^2.2.0", + "readable-stream": "^1.1.14", + "stream-parser": "^0.3.1" + } + }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", diff --git a/package.json b/package.json index 9da2514..02fae7e 100644 --- a/package.json +++ b/package.json @@ -49,12 +49,14 @@ "recharts": "^2.15.1", "tailwind-merge": "^3.0.1", "tailwindcss-animate": "^1.0.7", + "wav": "^1.0.2", "zod": "^3.24.2" }, "devDependencies": { "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/wav": "^1.0.4", "postcss": "^8", "tailwindcss": "^3.4.1", "typescript": "^5" diff --git a/src/ai/definitions.ts b/src/ai/definitions.ts index 1ba8062..9caa6c6 100644 --- a/src/ai/definitions.ts +++ b/src/ai/definitions.ts @@ -67,11 +67,13 @@ export const KhetAIAgentInputSchema = z.object({ query: z.string().describe("The user's query."), location: z.string().describe("The user's location (e.g., city, district)."), targetLanguage: z.string().describe('The language to translate the response to (e.g., "hi", "en").'), + photoDataUri: z.string().optional().describe("An optional photo of a crop, as a data URI."), }); export type KhetAIAgentInput = z.infer; export const KhetAIAgentOutputSchema = z.object({ response: z.string().describe("The agent's response to the user's query."), + audio: z.string().optional().describe("The base64 encoded audio data URI for the response."), }); export type KhetAIAgentOutput = z.infer; @@ -89,3 +91,17 @@ export const TranslateTextOutputSchema = z.object({ translatedText: z.string().describe('The translated text.'), }); export type TranslateTextOutput = z.infer; + + +// ============================================= +// Text to Speech +// ============================================= +export const TextToSpeechInputSchema = z.object({ + text: z.string().describe('The text to convert to speech.'), +}); +export type TextToSpeechInput = z.infer; + +export const TextToSpeechOutputSchema = z.object({ + audio: z.string().describe("A data URI of the generated audio file. Expected format: 'data:audio/wav;base64,'."), +}); +export type TextToSpeechOutput = z.infer; diff --git a/src/ai/dev.ts b/src/ai/dev.ts index 19970b1..1b9d7b3 100644 --- a/src/ai/dev.ts +++ b/src/ai/dev.ts @@ -5,3 +5,4 @@ import '@/ai/flows/summarize-government-scheme.ts'; import '@/ai/flows/diagnose-crop-disease.ts'; import '@/ai/flows/get-mandi-price-insights.ts'; import '@/ai/flows/khet-ai-agent.ts'; +import '@/ai/flows/text-to-speech.ts'; diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 0d1c2fa..c23c414 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -10,7 +10,7 @@ import {z} from 'genkit'; import {diagnoseCropDisease} from './diagnose-crop-disease'; import {getMandiPriceInsights} from './get-mandi-price-insights'; import {summarizeGovernmentScheme} from './summarize-government-scheme'; -import { translateText } from './translate-text'; +import { textToSpeech } from './text-to-speech'; import { DiagnoseCropDiseaseOutputSchema, GetMandiPriceInsightsInputSchema, @@ -22,20 +22,20 @@ import { KhetAIAgentOutput, KhetAIAgentOutputSchema } from '@/ai/definitions'; +import { translateText } from './translate-text'; -// Note: We can't pass image data to this agent directly yet. -// For crop diagnosis, the user would be prompted to go to the specific page. const cropDiseaseTool = ai.defineTool( { name: 'diagnoseCropDisease', - description: 'Diagnoses crop diseases from a user query. This tool CANNOT analyze images. It can only answer text questions about crop diseases.', + description: 'Diagnoses crop diseases from a user query and an image. Use this tool if the user provides an image or asks a question about crop health.', inputSchema: z.object({ query: z.string().describe("The user's question about the crop disease."), + photoDataUri: z.string().describe("A photo of the crop as a data URI."), targetLanguage: z.string().describe('The target language for the response.'), }), outputSchema: DiagnoseCropDiseaseOutputSchema, }, - async (input) => diagnoseCropDisease({ photoDataUri: '', query: input.query, targetLanguage: input.targetLanguage }) + async (input) => diagnoseCropDisease(input) ); const mandiPriceTool = ai.defineTool( @@ -69,9 +69,10 @@ const prompt = ai.definePrompt({ tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. Your goal is to understand the user's question and use the available tools to provide a clear and concise answer in their selected language. +- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. - For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. - For government schemes, use the summarizeGovernmentScheme tool. -- For questions about crop diseases, use the diagnoseCropDisease tool. If the user wants to diagnose a disease from a photo, you must tell them to go to the "Crop Health" page to upload an image, as you cannot process images in this chat. +- For questions about crop diseases (even without an image), use the diagnoseCropDisease tool. - If the user asks a general question or something you don't have a tool for, provide a helpful answer based on your general knowledge. - Always be polite and address the farmer directly. - The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. @@ -86,17 +87,26 @@ const khetAIAgentFlow = ai.defineFlow( outputSchema: KhetAIAgentOutputSchema, }, async (input) => { - const {output} = await prompt(input.query, { + const promptPayload = input.photoDataUri + ? [ {text: input.query}, {media: {url: input.photoDataUri}}] + : input.query; + + const {output} = await prompt(promptPayload, { context: { location: input.location, targetLanguage: input.targetLanguage, + photoDataUri: input.photoDataUri || '', // Pass it to context for the tool + query: input.query }, }); const responseText = output?.content?.parts[0]?.text || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; - // Final translation check const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); + const speech = await textToSpeech({text: translatedResponse.translatedText}); - return { response: translatedResponse.translatedText }; + return { + response: translatedResponse.translatedText, + audio: speech.audio, + }; } ); diff --git a/src/ai/flows/text-to-speech.ts b/src/ai/flows/text-to-speech.ts new file mode 100644 index 0000000..abd800c --- /dev/null +++ b/src/ai/flows/text-to-speech.ts @@ -0,0 +1,86 @@ +'use server'; +/** + * @fileOverview Converts text to speech using Google's generative AI. + * + * - textToSpeech - A function that handles the text-to-speech conversion. + */ + +import { ai } from '@/ai/genkit'; +import { googleAI } from '@genkit-ai/googleai'; +import { + TextToSpeechInput, + TextToSpeechInputSchema, + TextToSpeechOutput, + TextToSpeechOutputSchema +} from '@/ai/definitions'; +import wav from 'wav'; + + +async function toWav( + pcmData: Buffer, + channels = 1, + rate = 24000, + sampleWidth = 2 +): Promise { + return new Promise((resolve, reject) => { + const writer = new wav.Writer({ + channels, + sampleRate: rate, + bitDepth: sampleWidth * 8, + }); + + let bufs: any[] = []; + writer.on('error', reject); + writer.on('data', function (d) { + bufs.push(d); + }); + writer.on('end', function () { + resolve(Buffer.concat(bufs).toString('base64')); + }); + + writer.write(pcmData); + writer.end(); + }); +} + +export async function textToSpeech(input: TextToSpeechInput): Promise { + return textToSpeechFlow(input); +} + + +const textToSpeechFlow = ai.defineFlow( + { + name: 'textToSpeechFlow', + inputSchema: TextToSpeechInputSchema, + outputSchema: TextToSpeechOutputSchema, + }, + async ({text}) => { + const { media } = await ai.generate({ + model: googleAI.model('gemini-2.5-flash-preview-tts'), + config: { + responseModalities: ['AUDIO'], + speechConfig: { + voiceConfig: { + prebuiltVoiceConfig: { voiceName: 'Algenib' }, + }, + }, + }, + prompt: text, + }); + + if (!media) { + throw new Error('No media returned from TTS model'); + } + + const audioBuffer = Buffer.from( + media.url.substring(media.url.indexOf(',') + 1), + 'base64' + ); + + const wavBase64 = await toWav(audioBuffer); + + return { + audio: 'data:audio/wav;base64,' + wavBase64, + }; + } +); diff --git a/src/app/page.tsx b/src/app/page.tsx index c32d541..137b077 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,6 +1,7 @@ 'use client'; import { useState, useRef, useEffect } from 'react'; -import { Send, Loader2, Bot, User } from 'lucide-react'; +import { Send, Loader2, Image as ImageIcon, Mic, Volume2 } from 'lucide-react'; +import Image from 'next/image'; import PageHeader from '@/components/page-header'; import { useLanguage } from '@/contexts/language-context'; import { useLocation } from '@/contexts/location-context'; @@ -11,6 +12,7 @@ import VoiceInputButton from '@/components/voice-input-button'; import ChatMessage, { ChatMessageProps } from '@/components/chat-message'; import { useToast } from '@/hooks/use-toast'; import { khetAIAgent } from '@/ai/flows/khet-ai-agent'; +import { cn } from '@/lib/utils'; export default function Home() { const { t, language } = useLanguage(); @@ -19,11 +21,17 @@ export default function Home() { const [messages, setMessages] = useState([]); const [input, setInput] = useState(''); const [loading, setLoading] = useState(false); + const [imagePreview, setImagePreview] = useState(null); + const [imageDataUri, setImageDataUri] = useState(null); + const [currentAudio, setCurrentAudio] = useState(null); + const [playingMessageId, setPlayingMessageId] = useState(null); const scrollAreaRef = useRef(null); + const fileInputRef = useRef(null); useEffect(() => { setMessages([ { + id: 'initial-message', role: 'assistant', content: t('welcome_message_agent'), }, @@ -38,45 +46,115 @@ export default function Home() { }); } }, [messages]); + + useEffect(() => { + // Stop any currently playing audio when a new message comes in or loading starts + if (currentAudio) { + currentAudio.pause(); + currentAudio.currentTime = 0; + setCurrentAudio(null); + setPlayingMessageId(null); + } + }, [messages, loading]); + + const handleFileChange = (event: React.ChangeEvent) => { + const file = event.target.files?.[0]; + if (file) { + const reader = new FileReader(); + reader.onloadend = () => { + setImagePreview(reader.result as string); + setImageDataUri(reader.result as string); + }; + reader.readAsDataURL(file); + } + }; + + const handlePlayAudio = (audioDataUri: string, messageId: string) => { + if (currentAudio && playingMessageId === messageId) { + currentAudio.pause(); + setCurrentAudio(null); + setPlayingMessageId(null); + } else { + if (currentAudio) { + currentAudio.pause(); + } + const audio = new Audio(audioDataUri); + setCurrentAudio(audio); + setPlayingMessageId(messageId); + audio.play(); + audio.onended = () => { + setCurrentAudio(null); + setPlayingMessageId(null); + } + } + }; const handleSendMessage = async (e: React.FormEvent) => { e.preventDefault(); - if (!input.trim() || loading) return; + if ((!input.trim() && !imageDataUri) || loading) return; - const userMessage: ChatMessageProps = { role: 'user', content: input }; + const userMessage: ChatMessageProps = { + id: Date.now().toString(), + role: 'user', + content: input, + image: imagePreview || undefined, + }; setMessages((prev) => [...prev, userMessage]); setInput(''); + setImagePreview(null); setLoading(true); try { - if (!location) { - toast({ title: t('location_not_set'), description: t('set_location_for_agent'), variant: 'destructive' }); - setMessages(prev => [...prev, { role: 'assistant', content: t('set_location_for_agent')}]); - setLoading(false); - return; - } + if (!location) { + toast({ title: t('location_not_set'), description: t('set_location_for_agent'), variant: 'destructive' }); + setMessages(prev => [...prev, { id: 'error-loc', role: 'assistant', content: t('set_location_for_agent')}]); + setLoading(false); + return; + } const response = await khetAIAgent({ query: input, location: location.city, targetLanguage: language, + photoDataUri: imageDataUri || undefined, }); - const assistantMessage: ChatMessageProps = { role: 'assistant', content: response.response }; + const assistantMessage: ChatMessageProps = { + id: Date.now().toString(), + role: 'assistant', + content: response.response, + audio: response.audio, + onPlayAudio: handlePlayAudio, + }; setMessages((prev) => [...prev, assistantMessage]); + + if (response.audio) { + const audio = new Audio(response.audio); + setCurrentAudio(audio); + setPlayingMessageId(assistantMessage.id!); + audio.play(); + audio.onended = () => { + setCurrentAudio(null); + setPlayingMessageId(null); + }; + } } catch (error) { console.error('Agent error:', error); toast({ title: t('agent_error'), variant: 'destructive' }); - const errorMessage: ChatMessageProps = { role: 'assistant', content: t('agent_error_message') }; + const errorMessage: ChatMessageProps = { id: 'error-agent', role: 'assistant', content: t('agent_error_message') }; setMessages((prev) => [...prev, errorMessage]); } finally { setLoading(false); + setImageDataUri(null); + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } } }; return ( -
+
- {messages.map((msg, index) => ( - + {messages.map((msg) => ( + ))} - {loading && } />} + {loading && } />}
-
-
+
+ {imagePreview && ( +
+ Image preview + +
+ )} + setInput(e.target.value)} placeholder={t('agent_placeholder')} - className="flex-1 text-base p-6" - disabled={loading} - /> - setInput(text)} /> - +
+ + +
+
+ setInput(text)} + /> +
+
+ +
diff --git a/src/components/chat-message.tsx b/src/components/chat-message.tsx index d9c672f..b5b97b7 100644 --- a/src/components/chat-message.tsx +++ b/src/components/chat-message.tsx @@ -1,15 +1,22 @@ 'use client'; -import { Bot, User } from 'lucide-react'; -import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; +import { Bot, User, Volume2, Loader2, VolumeX } from 'lucide-react'; +import Image from 'next/image'; +import { Avatar, AvatarFallback } from '@/components/ui/avatar'; +import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; export interface ChatMessageProps { + id?: string; role: 'user' | 'assistant'; content: React.ReactNode; + image?: string; + audio?: string; + isPlaying?: boolean; + onPlayAudio?: (audioDataUri: string, messageId: string) => void; } -export default function ChatMessage({ role, content }: ChatMessageProps) { +export default function ChatMessage({ role, content, image, audio, id, isPlaying, onPlayAudio }: ChatMessageProps) { const isUser = role === 'user'; return (
@@ -22,13 +29,25 @@ export default function ChatMessage({ role, content }: ChatMessageProps) { )}
- {content} + {image && ( +
+ User upload +
+ )} +
+
{content}
+ {audio && onPlayAudio && id && ( + + )} +
{isUser && ( diff --git a/src/components/voice-input-button.tsx b/src/components/voice-input-button.tsx index fb0b78d..d921403 100644 --- a/src/components/voice-input-button.tsx +++ b/src/components/voice-input-button.tsx @@ -1,10 +1,11 @@ 'use client'; import { useState, useEffect, useRef } from 'react'; -import { Mic, MicOff } from 'lucide-react'; +import { Mic } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useToast } from '@/hooks/use-toast'; import { useLanguage } from '@/contexts/language-context'; +import { cn } from '@/lib/utils'; interface VoiceInputButtonProps { onTranscript: (transcript: string) => void; @@ -47,7 +48,9 @@ export default function VoiceInputButton({ onTranscript, disabled }: VoiceInputB recognitionRef.current = recognition; return () => { - recognition.stop(); + if (recognitionRef.current) { + recognitionRef.current.stop(); + } }; }, [onTranscript, toast, language]); @@ -81,14 +84,14 @@ export default function VoiceInputButton({ onTranscript, disabled }: VoiceInputB return ( ); } From 3d7f1073a5a02a2910293a29edd7c4d708ce43c9 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 17:27:06 +0000 Subject: [PATCH 16/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/app/page.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 137b077..d0975f0 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -55,6 +55,7 @@ export default function Home() { setCurrentAudio(null); setPlayingMessageId(null); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [messages, loading]); const handleFileChange = (event: React.ChangeEvent) => { @@ -107,7 +108,7 @@ export default function Home() { try { if (!location) { toast({ title: t('location_not_set'), description: t('set_location_for_agent'), variant: 'destructive' }); - setMessages(prev => [...prev, { id: 'error-loc', role: 'assistant', content: t('set_location_for_agent')}]); + setMessages(prev => [...prev, { id: 'error-loc-' + Date.now(), role: 'assistant', content: t('set_location_for_agent')}]); setLoading(false); return; } @@ -142,7 +143,7 @@ export default function Home() { } catch (error) { console.error('Agent error:', error); toast({ title: t('agent_error'), variant: 'destructive' }); - const errorMessage: ChatMessageProps = { id: 'error-agent', role: 'assistant', content: t('agent_error_message') }; + const errorMessage: ChatMessageProps = { id: 'error-agent-' + Date.now(), role: 'assistant', content: t('agent_error_message') }; setMessages((prev) => [...prev, errorMessage]); } finally { setLoading(false); From a6552c94af8cac2f28ca0b41d8bf499e17bf0c2e Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 17:31:17 +0000 Subject: [PATCH 17/31] The text bar/ chat bar should be fixed at one place it should not move, --- src/app/page.tsx | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index d0975f0..da6eb30 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,6 +1,7 @@ + 'use client'; import { useState, useRef, useEffect } from 'react'; -import { Send, Loader2, Image as ImageIcon, Mic, Volume2 } from 'lucide-react'; +import { Send, Loader2, Image as ImageIcon, X, Mic } from 'lucide-react'; import Image from 'next/image'; import PageHeader from '@/components/page-header'; import { useLanguage } from '@/contexts/language-context'; @@ -48,7 +49,6 @@ export default function Home() { }, [messages]); useEffect(() => { - // Stop any currently playing audio when a new message comes in or loading starts if (currentAudio) { currentAudio.pause(); currentAudio.currentTime = 0; @@ -69,7 +69,7 @@ export default function Home() { reader.readAsDataURL(file); } }; - + const handlePlayAudio = (audioDataUri: string, messageId: string) => { if (currentAudio && playingMessageId === messageId) { currentAudio.pause(); @@ -160,16 +160,16 @@ export default function Home() { title={t('welcome_title')} subtitle={t('welcome_subtitle_agent')} /> -
- -
+
+ +
{messages.map((msg) => ( ))} {loading && } />}
-
+
{imagePreview && (
Image preview @@ -179,24 +179,24 @@ export default function Home() { className="absolute top-1 right-1 h-6 w-6 z-10" onClick={() => { setImagePreview(null); setImageDataUri(null); if(fileInputRef.current) fileInputRef.current.value = ''; }} > - +
)}
+
+ + +
setInput(e.target.value)} placeholder={t('agent_placeholder')} - className={cn("flex-1 text-base p-4 pr-32", imagePreview ? 'pl-4' : 'pl-12')} + className="flex-1 text-base p-4 pl-14 pr-24" disabled={loading} /> -
- - -
Date: Thu, 24 Jul 2025 17:39:59 +0000 Subject: [PATCH 18/31] Remove the welcome part - Welcome to KhetAI Ask me anything about your f --- src/app/page.tsx | 104 ++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 56 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index da6eb30..12b205f 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -3,7 +3,6 @@ import { useState, useRef, useEffect } from 'react'; import { Send, Loader2, Image as ImageIcon, X, Mic } from 'lucide-react'; import Image from 'next/image'; -import PageHeader from '@/components/page-header'; import { useLanguage } from '@/contexts/language-context'; import { useLocation } from '@/contexts/location-context'; import { Input } from '@/components/ui/input'; @@ -13,7 +12,6 @@ import VoiceInputButton from '@/components/voice-input-button'; import ChatMessage, { ChatMessageProps } from '@/components/chat-message'; import { useToast } from '@/hooks/use-toast'; import { khetAIAgent } from '@/ai/flows/khet-ai-agent'; -import { cn } from '@/lib/utils'; export default function Home() { const { t, language } = useLanguage(); @@ -156,61 +154,55 @@ export default function Home() { return (
- -
- -
- {messages.map((msg) => ( - - ))} - {loading && } />} -
-
-
- {imagePreview && ( -
- Image preview - -
- )} - -
- - -
- setInput(e.target.value)} - placeholder={t('agent_placeholder')} - className="flex-1 text-base p-4 pl-14 pr-24" + +
+ {messages.map((msg) => ( + + ))} + {loading && } />} +
+
+
+ {imagePreview && ( +
+ Image preview + +
+ )} + +
+ + +
+ setInput(e.target.value)} + placeholder={t('agent_placeholder')} + className="flex-1 text-base p-4 pl-14 pr-24" + disabled={loading} + /> +
+ -
- setInput(text)} - /> -
-
- -
- -
-
+ onTranscript={(text) => setInput(text)} + /> +
+
+ +
+ +
); } From 148725dd752da8c2d46d3ac7faabb37e02884bf1 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Thu, 24 Jul 2025 18:03:16 +0000 Subject: [PATCH 19/31] same issue again --- src/components/app-shell.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/app-shell.tsx b/src/components/app-shell.tsx index 6559e60..32b07d7 100644 --- a/src/components/app-shell.tsx +++ b/src/components/app-shell.tsx @@ -73,8 +73,8 @@ export default function AppShell({ children }: { children: React.ReactNode }) { - -
+ +
@@ -84,7 +84,9 @@ export default function AppShell({ children }: { children: React.ReactNode }) {
- {children} +
+ {children} +
); From edd94464972821feeb68f115a72665171bc6c6dc Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Fri, 25 Jul 2025 10:30:13 +0000 Subject: [PATCH 20/31] now the bar is fixed, but the messages are not going up --- src/app/page.tsx | 12 ++++++------ src/components/ui/scroll-area.tsx | 11 ++++++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 12b205f..34c7738 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState, useRef, useEffect } from 'react'; -import { Send, Loader2, Image as ImageIcon, X, Mic } from 'lucide-react'; +import { Send, Loader2, Image as ImageIcon, X } from 'lucide-react'; import Image from 'next/image'; import { useLanguage } from '@/contexts/language-context'; import { useLocation } from '@/contexts/location-context'; @@ -24,7 +24,7 @@ export default function Home() { const [imageDataUri, setImageDataUri] = useState(null); const [currentAudio, setCurrentAudio] = useState(null); const [playingMessageId, setPlayingMessageId] = useState(null); - const scrollAreaRef = useRef(null); + const scrollViewportRef = useRef(null); const fileInputRef = useRef(null); useEffect(() => { @@ -38,9 +38,9 @@ export default function Home() { }, [t]); useEffect(() => { - if (scrollAreaRef.current) { - scrollAreaRef.current.scrollTo({ - top: scrollAreaRef.current.scrollHeight, + if (scrollViewportRef.current) { + scrollViewportRef.current.scrollTo({ + top: scrollViewportRef.current.scrollHeight, behavior: 'smooth', }); } @@ -154,7 +154,7 @@ export default function Home() { return (
- +
{messages.map((msg) => ( diff --git a/src/components/ui/scroll-area.tsx b/src/components/ui/scroll-area.tsx index 0b4a48d..13403ce 100644 --- a/src/components/ui/scroll-area.tsx +++ b/src/components/ui/scroll-area.tsx @@ -7,14 +7,19 @@ import { cn } from "@/lib/utils" const ScrollArea = React.forwardRef< React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( + React.ComponentPropsWithoutRef & { + viewportRef?: React.Ref + } +>(({ className, children, viewportRef, ...props }, ref) => ( - + {children} From 22d38f7120ed4086ade52d71cd31ee46749b258d Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 26 Jul 2025 05:26:38 +0000 Subject: [PATCH 21/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/flows/khet-ai-agent.ts | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index c23c414..9bb7042 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -31,11 +31,10 @@ const cropDiseaseTool = ai.defineTool( inputSchema: z.object({ query: z.string().describe("The user's question about the crop disease."), photoDataUri: z.string().describe("A photo of the crop as a data URI."), - targetLanguage: z.string().describe('The target language for the response.'), }), outputSchema: DiagnoseCropDiseaseOutputSchema, }, - async (input) => diagnoseCropDisease(input) + async (input) => diagnoseCropDisease({ ...input, targetLanguage: '' }) // Target language will be handled by the main flow ); const mandiPriceTool = ai.defineTool( @@ -68,15 +67,15 @@ const prompt = ai.definePrompt({ model: 'googleai/gemini-1.5-flash', tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. -Your goal is to understand the user's question and use the available tools to provide a clear and concise answer in their selected language. -- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. +Your goal is to understand the user's question and use the available tools to provide a clear and concise answer. +- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. Pass BOTH the user's text query and the image data to the tool. - For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. - For government schemes, use the summarizeGovernmentScheme tool. -- For questions about crop diseases (even without an image), use the diagnoseCropDisease tool. +- For questions about crop diseases (even without an image), if the user provides an image, you MUST use the diagnoseCropDisease tool. If not, answer from your general knowledge. - If the user asks a general question or something you don't have a tool for, provide a helpful answer based on your general knowledge. - Always be polite and address the farmer directly. - The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. -- The user's preferred language is {{targetLanguage}}. You MUST respond in this language. The tools will automatically handle translation, but your own conversational text must also be translated.`, +- The user's preferred language is {{targetLanguage}}. The tools will handle their own translation, but your own conversational text must be translated at the end.`, }); @@ -87,24 +86,27 @@ const khetAIAgentFlow = ai.defineFlow( outputSchema: KhetAIAgentOutputSchema, }, async (input) => { - const promptPayload = input.photoDataUri - ? [ {text: input.query}, {media: {url: input.photoDataUri}}] + const promptPayload = input.photoDataUri + ? [ {text: input.query}, {media: {url: input.photoDataUri}}] : input.query; const {output} = await prompt(promptPayload, { context: { location: input.location, targetLanguage: input.targetLanguage, - photoDataUri: input.photoDataUri || '', // Pass it to context for the tool - query: input.query + // Pass query and photoDataUri in context for tools to use + query: input.query, + photoDataUri: input.photoDataUri }, }); - const responseText = output?.content?.parts[0]?.text || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; + + const responseText = output?.content?.parts.map(p => p.text || (p.toolResponse?.content?.parts.map(tp => tp.text).join('\n') || '')).join('\n') + || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); const speech = await textToSpeech({text: translatedResponse.translatedText}); - return { + return { response: translatedResponse.translatedText, audio: speech.audio, }; From abb28b5a4a20cfd98616dde327a1c8d5ed654dfc Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sat, 26 Jul 2025 07:58:35 +0000 Subject: [PATCH 22/31] Instead of using the mock data in Mandi Price Insights use the AGmarket --- src/ai/flows/get-mandi-price-insights.ts | 63 +++++++++++------------- 1 file changed, 29 insertions(+), 34 deletions(-) diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index ed2ce0e..f33af06 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -29,38 +29,33 @@ const getAgmarknetData = ai.defineTool({ location: z.string().describe('The location (e.g., city, district) to get mandi price data for.'), }), outputSchema: z.string(), // Returns a JSON string of mandi data. -}, async (input) => { - const { crop, location } = input; - const basePrice = Math.floor(Math.random() * (5000 - 1500 + 1)) + 1500; // Random base price between 1500-5000 +}, async ({ crop, location }) => { + const apiKey = process.env.AGMARKNET_API_KEY; + if (!apiKey) { + throw new Error('AGMARKNET_API_KEY is not set in the environment variables.'); + } + + // The base URL for the Agmarknet API resource. + const baseUrl = 'https://api.data.gov.in/resource/9ef84268-d588-465a-a308-a864a43d0070'; + const url = `${baseUrl}?api-key=${apiKey}&format=json&limit=10&filters[district]=${location}&filters[commodity]=${crop}`; + + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`API call failed with status: ${response.status}`); + } + const data = await response.json(); - const mockData = { - crop: crop, - location: location, - date: new Date().toISOString().split('T')[0], - unit: 'quintal', - markets: [ - { - name: `${location} Main Market`, - min_price: basePrice, - max_price: basePrice + Math.floor(Math.random() * 500), - modal_price: basePrice + Math.floor(Math.random() * 250), - }, - { - name: `${location} North Market`, - min_price: basePrice - Math.floor(Math.random() * 200), - max_price: basePrice + Math.floor(Math.random() * 300), - modal_price: basePrice - Math.floor(Math.random() * 100), - }, - { - name: `Nearby Village Market`, - min_price: basePrice - Math.floor(Math.random() * 300), - max_price: basePrice + Math.floor(Math.random() * 100), - modal_price: basePrice - Math.floor(Math.random() * 150), - } - ] - }; + if (!data.records || data.records.length === 0) { + return JSON.stringify({ error: `No data found for ${crop} in ${location}. Please try a different crop or a nearby major city.` }); + } + + return JSON.stringify(data.records); - return JSON.stringify(mockData); + } catch (error) { + console.error('Error fetching from Agmarknet API:', error); + return JSON.stringify({ error: 'Failed to fetch data from the Agmarknet API.' }); + } }); const summarizeMandiPriceDataPrompt = ai.definePrompt({ @@ -70,12 +65,12 @@ const summarizeMandiPriceDataPrompt = ai.definePrompt({ mandiData: z.string().describe('The JSON data received from the Agmarknet API tool.'), })}, output: {schema: GetMandiPriceInsightsOutputSchema}, - prompt: `You are an expert agricultural analyst. Analyze the provided JSON data and provide a concise, easy-to-understand summary for a farmer. + prompt: `You are an expert agricultural analyst. Analyze the provided JSON data, which contains mandi price records. If the JSON contains an error field, report that error to the user. Your summary must be a single paragraph and include: -- The approximate average price for the crop. -- The general price range (minimum and maximum). -- A simple recommendation on where they might get the best price. +- The approximate average price for the crop across the listed markets. +- The general price range (minimum and maximum from all records). +- A simple recommendation on which market has the best modal price. IMPORTANT: - ALWAYS use the Indian Rupee symbol (₹). From b9e33b3c7aa7541145c7b545f75501ecedbe44a2 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sat, 26 Jul 2025 08:22:04 +0000 Subject: [PATCH 23/31] i will give you sequenceDiagram for all he agentic flows that irequire. --- src/ai/flows/khet-ai-agent.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 9bb7042..cbc032a 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -12,6 +12,7 @@ import {getMandiPriceInsights} from './get-mandi-price-insights'; import {summarizeGovernmentScheme} from './summarize-government-scheme'; import { textToSpeech } from './text-to-speech'; import { + DiagnoseCropDiseaseInputSchema, DiagnoseCropDiseaseOutputSchema, GetMandiPriceInsightsInputSchema, GetMandiPriceInsightsOutputSchema, @@ -27,14 +28,11 @@ import { translateText } from './translate-text'; const cropDiseaseTool = ai.defineTool( { name: 'diagnoseCropDisease', - description: 'Diagnoses crop diseases from a user query and an image. Use this tool if the user provides an image or asks a question about crop health.', - inputSchema: z.object({ - query: z.string().describe("The user's question about the crop disease."), - photoDataUri: z.string().describe("A photo of the crop as a data URI."), - }), + description: 'Use this tool ONLY when the user provides an image of a plant. This tool analyzes the image to diagnose crop diseases.', + inputSchema: DiagnoseCropDiseaseInputSchema, outputSchema: DiagnoseCropDiseaseOutputSchema, }, - async (input) => diagnoseCropDisease({ ...input, targetLanguage: '' }) // Target language will be handled by the main flow + async (input) => diagnoseCropDisease(input) ); const mandiPriceTool = ai.defineTool( @@ -71,7 +69,6 @@ Your goal is to understand the user's question and use the available tools to pr - If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. Pass BOTH the user's text query and the image data to the tool. - For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. - For government schemes, use the summarizeGovernmentScheme tool. -- For questions about crop diseases (even without an image), if the user provides an image, you MUST use the diagnoseCropDisease tool. If not, answer from your general knowledge. - If the user asks a general question or something you don't have a tool for, provide a helpful answer based on your general knowledge. - Always be polite and address the farmer directly. - The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. @@ -96,7 +93,9 @@ const khetAIAgentFlow = ai.defineFlow( targetLanguage: input.targetLanguage, // Pass query and photoDataUri in context for tools to use query: input.query, - photoDataUri: input.photoDataUri + photoDataUri: input.photoDataUri, + schemeName: input.query, // Pass query as schemeName for govSchemeTool + crop: input.query, // Pass query as crop for mandiPriceTool }, }); From f5eda3070e652ff6eae6f31159ad4e81158288ca Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sat, 26 Jul 2025 21:00:06 +0000 Subject: [PATCH 24/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/flows/diagnose-crop-disease.ts | 1 + src/ai/flows/get-mandi-price-insights.ts | 1 + src/ai/flows/khet-ai-agent.ts | 31 +++++++++++---------- src/ai/flows/summarize-government-scheme.ts | 3 +- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/ai/flows/diagnose-crop-disease.ts b/src/ai/flows/diagnose-crop-disease.ts index 62d221e..ac9e53d 100644 --- a/src/ai/flows/diagnose-crop-disease.ts +++ b/src/ai/flows/diagnose-crop-disease.ts @@ -30,6 +30,7 @@ const prompt = ai.definePrompt({ prompt: `You are an expert in diagnosing crop diseases. Analyze the following image of a crop and answer the user's query. Provide a diagnosis of any diseases or issues present. + And also provide if any pesticides are required to use, give instructions how to use it. e.g. pesticide name how many times farmer has to spary it. User Query: {{{query}}} Crop Photo: {{media url=photoDataUri}}`, diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index f33af06..3ca7d39 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -71,6 +71,7 @@ Your summary must be a single paragraph and include: - The approximate average price for the crop across the listed markets. - The general price range (minimum and maximum from all records). - A simple recommendation on which market has the best modal price. +- Suggest the better time when the farmer should sell his crop. IMPORTANT: - ALWAYS use the Indian Rupee symbol (₹). diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index cbc032a..feca7be 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -12,6 +12,7 @@ import {getMandiPriceInsights} from './get-mandi-price-insights'; import {summarizeGovernmentScheme} from './summarize-government-scheme'; import { textToSpeech } from './text-to-speech'; import { + DiagnoseCropDiseaseInput, DiagnoseCropDiseaseInputSchema, DiagnoseCropDiseaseOutputSchema, GetMandiPriceInsightsInputSchema, @@ -86,22 +87,22 @@ const khetAIAgentFlow = ai.defineFlow( const promptPayload = input.photoDataUri ? [ {text: input.query}, {media: {url: input.photoDataUri}}] : input.query; - - const {output} = await prompt(promptPayload, { - context: { - location: input.location, - targetLanguage: input.targetLanguage, - // Pass query and photoDataUri in context for tools to use - query: input.query, - photoDataUri: input.photoDataUri, - schemeName: input.query, // Pass query as schemeName for govSchemeTool - crop: input.query, // Pass query as crop for mandiPriceTool - }, - }); - const responseText = output?.content?.parts.map(p => p.text || (p.toolResponse?.content?.parts.map(tp => tp.text).join('\n') || '')).join('\n') - || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; - + // The context for tools is inferred from the flow's input schema. + // We pass the full input object to the prompt call. + const {output} = await prompt(input); + + const responseText = output?.content?.parts.map((p: { text?: string; toolResponse?: { name: string, output: any } }) => { + if (p.text) return p.text; + if (p.toolResponse) { + // Extract the relevant summary/diagnosis from the tool's output object + if (p.toolResponse.name === 'diagnoseCropDisease') return p.toolResponse.output.diagnosis; + if (p.toolResponse.name === 'getMandiPriceInsights') return p.toolResponse.output.summary; + if (p.toolResponse.name === 'summarizeGovernmentScheme') return p.toolResponse.output.summary; + } + return ''; + }).join('\n').trim() || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; + const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); const speech = await textToSpeech({text: translatedResponse.translatedText}); diff --git a/src/ai/flows/summarize-government-scheme.ts b/src/ai/flows/summarize-government-scheme.ts index 2d2e9de..8454f27 100644 --- a/src/ai/flows/summarize-government-scheme.ts +++ b/src/ai/flows/summarize-government-scheme.ts @@ -36,7 +36,8 @@ const summarizeGovernmentSchemePrompt = ai.definePrompt({ Query: {{{query}}} Provide a concise and easy-to-understand summary of the scheme, including key benefits and eligibility criteria, tailored to the farmer's query. - Do not include information that is not available in the provided information. Limit the summary to three sentences.`, + Do not include information that is not available in the provided information. Limit the summary to three sentences. + But mention some more basic or the important info related to query which can help farmer in best way for farmer's growth.`, }); const summarizeGovernmentSchemeFlow = ai.defineFlow( From 61374c51a35eb3242609caeb69ca0ccae32f3122 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sat, 26 Jul 2025 21:19:05 +0000 Subject: [PATCH 25/31] AI: Hello! I am KhetAI, your personal farming assistant. How can I help --- src/ai/flows/khet-ai-agent.ts | 121 ++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 51 deletions(-) diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index feca7be..7c30515 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -5,11 +5,11 @@ * - khetAIAgent - A function that handles the conversational agent process. */ -import {ai} from '@/ai/genkit'; -import {z} from 'genkit'; -import {diagnoseCropDisease} from './diagnose-crop-disease'; -import {getMandiPriceInsights} from './get-mandi-price-insights'; -import {summarizeGovernmentScheme} from './summarize-government-scheme'; +import { ai } from '@/ai/genkit'; +import { z } from 'genkit'; +import { diagnoseCropDisease } from './diagnose-crop-disease'; +import { getMandiPriceInsights } from './get-mandi-price-insights'; +import { summarizeGovernmentScheme } from './summarize-government-scheme'; import { textToSpeech } from './text-to-speech'; import { DiagnoseCropDiseaseInput, @@ -37,14 +37,14 @@ const cropDiseaseTool = ai.defineTool( ); const mandiPriceTool = ai.defineTool( - { - name: 'getMandiPriceInsights', - description: 'Gets mandi price insights for a specific crop and location.', - inputSchema: GetMandiPriceInsightsInputSchema, - outputSchema: GetMandiPriceInsightsOutputSchema, - }, - async (input) => getMandiPriceInsights(input) - ); + { + name: 'getMandiPriceInsights', + description: 'Gets mandi price insights for a specific crop and location.', + inputSchema: GetMandiPriceInsightsInputSchema, + outputSchema: GetMandiPriceInsightsOutputSchema, + }, + async (input) => getMandiPriceInsights(input) +); const govSchemeTool = ai.defineTool( { @@ -56,16 +56,15 @@ const govSchemeTool = ai.defineTool( async (input) => summarizeGovernmentScheme(input) ); - export async function khetAIAgent(input: KhetAIAgentInput): Promise { return khetAIAgentFlow(input); } const prompt = ai.definePrompt({ - name: 'khetAIAgentPrompt', - model: 'googleai/gemini-1.5-flash', - tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], - system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. + name: 'khetAIAgentPrompt', + model: 'googleai/gemini-1.5-flash', + tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], + system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. Your goal is to understand the user's question and use the available tools to provide a clear and concise answer. - If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. Pass BOTH the user's text query and the image data to the tool. - For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. @@ -74,41 +73,61 @@ Your goal is to understand the user's question and use the available tools to pr - Always be polite and address the farmer directly. - The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. - The user's preferred language is {{targetLanguage}}. The tools will handle their own translation, but your own conversational text must be translated at the end.`, - }); - +}); const khetAIAgentFlow = ai.defineFlow( - { - name: 'khetAIAgentFlow', - inputSchema: KhetAIAgentInputSchema, - outputSchema: KhetAIAgentOutputSchema, - }, - async (input) => { - const promptPayload = input.photoDataUri - ? [ {text: input.query}, {media: {url: input.photoDataUri}}] - : input.query; - - // The context for tools is inferred from the flow's input schema. - // We pass the full input object to the prompt call. - const {output} = await prompt(input); - - const responseText = output?.content?.parts.map((p: { text?: string; toolResponse?: { name: string, output: any } }) => { - if (p.text) return p.text; - if (p.toolResponse) { - // Extract the relevant summary/diagnosis from the tool's output object - if (p.toolResponse.name === 'diagnoseCropDisease') return p.toolResponse.output.diagnosis; - if (p.toolResponse.name === 'getMandiPriceInsights') return p.toolResponse.output.summary; - if (p.toolResponse.name === 'summarizeGovernmentScheme') return p.toolResponse.output.summary; - } - return ''; - }).join('\n').trim() || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; - - const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); - const speech = await textToSpeech({text: translatedResponse.translatedText}); + { + name: 'khetAIAgentFlow', + inputSchema: KhetAIAgentInputSchema, + outputSchema: KhetAIAgentOutputSchema, + }, + async (input) => { + const promptPayload = input.photoDataUri + ? [{ text: input.query }, { media: { url: input.photoDataUri } }] + : input.query; - return { - response: translatedResponse.translatedText, - audio: speech.audio, - }; + const llmResponse = await prompt(promptPayload, { + context: { + location: input.location, + targetLanguage: input.targetLanguage, + photoDataUri: input.photoDataUri, + query: input.query, + schemeName: input.query, + crop: input.query + }, + }); + + const llmOutput = llmResponse.output; + + if (!llmOutput) { + return { + response: "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it.", + }; + } + + let responseText = llmOutput.text; + + if (llmOutput.toolCalls?.length) { + const toolResponse = await llmResponse.toolRequest?.responses(); + const toolOutput = toolResponse?.[0]?.output; + if(toolOutput){ + responseText = toolOutput.diagnosis || toolOutput.summary || JSON.stringify(toolOutput); + } } + + if (!responseText) { + responseText = "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; + } + + // Translate the response to the user's preferred language + const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); + + // Convert the translated text to speech + const speech = await textToSpeech({ text: translatedResponse.translatedText }); + + return { + response: translatedResponse.translatedText, + audio: speech.audio, + }; + } ); From f488ed5862ac5bbcb8867e5f30565acd592e50cb Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sat, 26 Jul 2025 21:20:55 +0000 Subject: [PATCH 26/31] I see this error with the app, reported by NextJS, please fix it. The er --- src/ai/flows/khet-ai-agent.ts | 52 +++++++++++++++++------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 7c30515..90d97ff 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -12,12 +12,8 @@ import { getMandiPriceInsights } from './get-mandi-price-insights'; import { summarizeGovernmentScheme } from './summarize-government-scheme'; import { textToSpeech } from './text-to-speech'; import { - DiagnoseCropDiseaseInput, - DiagnoseCropDiseaseInputSchema, DiagnoseCropDiseaseOutputSchema, - GetMandiPriceInsightsInputSchema, GetMandiPriceInsightsOutputSchema, - SummarizeGovernmentSchemeInputSchema, SummarizeGovernmentSchemeOutputSchema, KhetAIAgentInput, KhetAIAgentInputSchema, @@ -30,7 +26,11 @@ const cropDiseaseTool = ai.defineTool( { name: 'diagnoseCropDisease', description: 'Use this tool ONLY when the user provides an image of a plant. This tool analyzes the image to diagnose crop diseases.', - inputSchema: DiagnoseCropDiseaseInputSchema, + inputSchema: z.object({ + query: z.string(), + photoDataUri: z.string(), + targetLanguage: z.string(), + }), outputSchema: DiagnoseCropDiseaseOutputSchema, }, async (input) => diagnoseCropDisease(input) @@ -40,7 +40,11 @@ const mandiPriceTool = ai.defineTool( { name: 'getMandiPriceInsights', description: 'Gets mandi price insights for a specific crop and location.', - inputSchema: GetMandiPriceInsightsInputSchema, + inputSchema: z.object({ + crop: z.string(), + location: z.string(), + targetLanguage: z.string(), + }), outputSchema: GetMandiPriceInsightsOutputSchema, }, async (input) => getMandiPriceInsights(input) @@ -49,8 +53,12 @@ const mandiPriceTool = ai.defineTool( const govSchemeTool = ai.defineTool( { name: 'summarizeGovernmentScheme', - description: 'Summarizes a government scheme for a farmer.', - inputSchema: SummarizeGovernmentSchemeInputSchema, + description: 'Summarizes a government scheme for a farmer based on their query.', + inputSchema: z.object({ + schemeName: z.string().describe("The name of the scheme, extracted from the user's query."), + query: z.string().describe("The user's full question about the scheme."), + targetLanguage: z.string(), + }), outputSchema: SummarizeGovernmentSchemeOutputSchema, }, async (input) => summarizeGovernmentScheme(input) @@ -66,13 +74,13 @@ const prompt = ai.definePrompt({ tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. Your goal is to understand the user's question and use the available tools to provide a clear and concise answer. -- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. Pass BOTH the user's text query and the image data to the tool. -- For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. -- For government schemes, use the summarizeGovernmentScheme tool. +- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. Pass the user's text query, the image data, and the target language to the tool. +- For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. Extract the crop name from the query. +- For government schemes, use the summarizeGovernmentScheme tool. Extract the scheme name from the query. - If the user asks a general question or something you don't have a tool for, provide a helpful answer based on your general knowledge. - Always be polite and address the farmer directly. - The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. -- The user's preferred language is {{targetLanguage}}. The tools will handle their own translation, but your own conversational text must be translated at the end.`, +- The user's preferred language is {{targetLanguage}}. Your final answer must be in this language. The tools will handle their own translation, but if you answer directly, you must translate it yourself.`, }); const khetAIAgentFlow = ai.defineFlow( @@ -86,18 +94,8 @@ const khetAIAgentFlow = ai.defineFlow( ? [{ text: input.query }, { media: { url: input.photoDataUri } }] : input.query; - const llmResponse = await prompt(promptPayload, { - context: { - location: input.location, - targetLanguage: input.targetLanguage, - photoDataUri: input.photoDataUri, - query: input.query, - schemeName: input.query, - crop: input.query - }, - }); - - const llmOutput = llmResponse.output; + const llmResponse = await prompt(promptPayload); + const llmOutput = llmResponse.output(); if (!llmOutput) { return { @@ -105,14 +103,16 @@ const khetAIAgentFlow = ai.defineFlow( }; } - let responseText = llmOutput.text; + let responseText: string | undefined; if (llmOutput.toolCalls?.length) { const toolResponse = await llmResponse.toolRequest?.responses(); const toolOutput = toolResponse?.[0]?.output; if(toolOutput){ - responseText = toolOutput.diagnosis || toolOutput.summary || JSON.stringify(toolOutput); + responseText = (toolOutput as any).diagnosis || (toolOutput as any).summary || JSON.stringify(toolOutput); } + } else { + responseText = llmOutput.text; } if (!responseText) { From e8f2eba4e61aaa19766718527b7ff5dfb237298e Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sat, 26 Jul 2025 21:23:20 +0000 Subject: [PATCH 27/31] Instead of AGMarknet API, use Google search and gemini for giving the re --- src/ai/flows/get-mandi-price-insights.ts | 71 +++++----------------- src/ai/flows/khet-ai-agent.ts | 77 ++++++++++++------------ 2 files changed, 55 insertions(+), 93 deletions(-) diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index 3ca7d39..286363e 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -1,7 +1,7 @@ 'use server'; /** - * @fileOverview Fetches and summarizes mandi price insights using the Agmarknet API and Gemini. + * @fileOverview Fetches and summarizes mandi price insights using Google Search via Gemini. * * - getMandiPriceInsights - A function that fetches, analyzes, and summarizes mandi price data. */ @@ -20,66 +20,30 @@ export async function getMandiPriceInsights(input: GetMandiPriceInsightsInput): return getMandiPriceInsightsFlow(input); } -// This is a mock tool. In a real application, this would call an external API. -const getAgmarknetData = ai.defineTool({ - name: 'getAgmarknetData', - description: 'Fetches mandi price data from the Agmarknet API for a specific crop and location.', - inputSchema: z.object({ - crop: z.string().describe('The crop to get mandi price data for.'), - location: z.string().describe('The location (e.g., city, district) to get mandi price data for.'), - }), - outputSchema: z.string(), // Returns a JSON string of mandi data. -}, async ({ crop, location }) => { - const apiKey = process.env.AGMARKNET_API_KEY; - if (!apiKey) { - throw new Error('AGMARKNET_API_KEY is not set in the environment variables.'); - } - - // The base URL for the Agmarknet API resource. - const baseUrl = 'https://api.data.gov.in/resource/9ef84268-d588-465a-a308-a864a43d0070'; - const url = `${baseUrl}?api-key=${apiKey}&format=json&limit=10&filters[district]=${location}&filters[commodity]=${crop}`; - - try { - const response = await fetch(url); - if (!response.ok) { - throw new Error(`API call failed with status: ${response.status}`); - } - const data = await response.json(); - - if (!data.records || data.records.length === 0) { - return JSON.stringify({ error: `No data found for ${crop} in ${location}. Please try a different crop or a nearby major city.` }); - } - - return JSON.stringify(data.records); - - } catch (error) { - console.error('Error fetching from Agmarknet API:', error); - return JSON.stringify({ error: 'Failed to fetch data from the Agmarknet API.' }); - } -}); - -const summarizeMandiPriceDataPrompt = ai.definePrompt({ - name: 'summarizeMandiPriceDataPrompt', +const getMandiPriceInsightsPrompt = ai.definePrompt({ + name: 'getMandiPriceInsightsPrompt', model: 'googleai/gemini-1.5-flash', input: {schema: z.object({ - mandiData: z.string().describe('The JSON data received from the Agmarknet API tool.'), + crop: z.string(), + location: z.string(), })}, output: {schema: GetMandiPriceInsightsOutputSchema}, - prompt: `You are an expert agricultural analyst. Analyze the provided JSON data, which contains mandi price records. If the JSON contains an error field, report that error to the user. + prompt: `You are an expert agricultural analyst. Your task is to provide the latest mandi price for a specific crop in a given location using your access to Google Search. Your summary must be a single paragraph and include: -- The approximate average price for the crop across the listed markets. -- The general price range (minimum and maximum from all records). -- A simple recommendation on which market has the best modal price. +- The approximate average price for the crop in the specified location. +- The general price range (minimum and maximum if available). +- A simple recommendation on whether it's a good time to sell, based on recent price trends. - Suggest the better time when the farmer should sell his crop. IMPORTANT: -- ALWAYS use the Indian Rupee symbol (₹). +- ALWAYS use the Indian Rupee symbol (?). - ALWAYS state that the prices are per quintal. +- If you cannot find data for the specific location, state that and suggest looking for prices in a nearby major market. - Your entire response must be enclosed within the 'summary' field of the JSON output. -Here is the data: -{{{mandiData}}}`, +Crop: {{{crop}}} +Location: {{{location}}}`, }); const getMandiPriceInsightsFlow = ai.defineFlow( @@ -89,17 +53,14 @@ const getMandiPriceInsightsFlow = ai.defineFlow( outputSchema: GetMandiPriceInsightsOutputSchema, }, async ({ crop, location, targetLanguage }) => { - // Step 1: Call the tool directly to get the data. - const mandiData = await getAgmarknetData({ crop, location }); - - // Step 2: Pass the data to the summarization prompt. - const {output} = await summarizeMandiPriceDataPrompt({ mandiData }); + // Step 1: Call the prompt to get insights from the model. + const {output} = await getMandiPriceInsightsPrompt({ crop, location }); if (!output) { throw new Error('Failed to get insights from the model.'); } - // Step 3: Translate the final summary. + // Step 2: Translate the final summary. const translatedSummary = await translateText({ text: output.summary, targetLanguage }); return { summary: translatedSummary.translatedText }; } diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 90d97ff..54d71ce 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -12,8 +12,12 @@ import { getMandiPriceInsights } from './get-mandi-price-insights'; import { summarizeGovernmentScheme } from './summarize-government-scheme'; import { textToSpeech } from './text-to-speech'; import { + DiagnoseCropDiseaseInput, + DiagnoseCropDiseaseInputSchema, DiagnoseCropDiseaseOutputSchema, + GetMandiPriceInsightsInputSchema, GetMandiPriceInsightsOutputSchema, + SummarizeGovernmentSchemeInputSchema, SummarizeGovernmentSchemeOutputSchema, KhetAIAgentInput, KhetAIAgentInputSchema, @@ -26,11 +30,7 @@ const cropDiseaseTool = ai.defineTool( { name: 'diagnoseCropDisease', description: 'Use this tool ONLY when the user provides an image of a plant. This tool analyzes the image to diagnose crop diseases.', - inputSchema: z.object({ - query: z.string(), - photoDataUri: z.string(), - targetLanguage: z.string(), - }), + inputSchema: DiagnoseCropDiseaseInputSchema, outputSchema: DiagnoseCropDiseaseOutputSchema, }, async (input) => diagnoseCropDisease(input) @@ -40,11 +40,7 @@ const mandiPriceTool = ai.defineTool( { name: 'getMandiPriceInsights', description: 'Gets mandi price insights for a specific crop and location.', - inputSchema: z.object({ - crop: z.string(), - location: z.string(), - targetLanguage: z.string(), - }), + inputSchema: GetMandiPriceInsightsInputSchema, outputSchema: GetMandiPriceInsightsOutputSchema, }, async (input) => getMandiPriceInsights(input) @@ -53,12 +49,8 @@ const mandiPriceTool = ai.defineTool( const govSchemeTool = ai.defineTool( { name: 'summarizeGovernmentScheme', - description: 'Summarizes a government scheme for a farmer based on their query.', - inputSchema: z.object({ - schemeName: z.string().describe("The name of the scheme, extracted from the user's query."), - query: z.string().describe("The user's full question about the scheme."), - targetLanguage: z.string(), - }), + description: 'Summarizes a government scheme for a farmer.', + inputSchema: SummarizeGovernmentSchemeInputSchema, outputSchema: SummarizeGovernmentSchemeOutputSchema, }, async (input) => summarizeGovernmentScheme(input) @@ -74,13 +66,13 @@ const prompt = ai.definePrompt({ tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. Your goal is to understand the user's question and use the available tools to provide a clear and concise answer. -- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. Pass the user's text query, the image data, and the target language to the tool. -- For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. Extract the crop name from the query. -- For government schemes, use the summarizeGovernmentScheme tool. Extract the scheme name from the query. +- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. Pass BOTH the user's text query and the image data to the tool. +- For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. +- For government schemes, use the summarizeGovernmentScheme tool. - If the user asks a general question or something you don't have a tool for, provide a helpful answer based on your general knowledge. - Always be polite and address the farmer directly. - The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. -- The user's preferred language is {{targetLanguage}}. Your final answer must be in this language. The tools will handle their own translation, but if you answer directly, you must translate it yourself.`, +- The user's preferred language is {{targetLanguage}}. The tools will handle their own translation, but your own conversational text must be translated at the end.`, }); const khetAIAgentFlow = ai.defineFlow( @@ -90,34 +82,43 @@ const khetAIAgentFlow = ai.defineFlow( outputSchema: KhetAIAgentOutputSchema, }, async (input) => { + // Prepare the payload based on whether an image is provided const promptPayload = input.photoDataUri ? [{ text: input.query }, { media: { url: input.photoDataUri } }] : input.query; - const llmResponse = await prompt(promptPayload); - const llmOutput = llmResponse.output(); + let output; + try { + const result = await prompt(input); + output = result.output; + } catch (error) { + console.error('Error with prompt call:', error); + output = null; + } - if (!llmOutput) { - return { + // Check if 'output' is valid + if (!output || !output.content || !Array.isArray(output.content.parts)) { + console.error('Invalid output received:', output); + return { response: "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it.", + audio: "", // Provide an empty response for the audio }; } - - let responseText: string | undefined; - if (llmOutput.toolCalls?.length) { - const toolResponse = await llmResponse.toolRequest?.responses(); - const toolOutput = toolResponse?.[0]?.output; - if(toolOutput){ - responseText = (toolOutput as any).diagnosis || (toolOutput as any).summary || JSON.stringify(toolOutput); + // Map the response parts to extract the relevant text + const responseText = output.content.parts + .map((p: { text?: string; toolResponse?: { name: string, output: any } }) => { + if (p.text) return p.text; + if (p.toolResponse) { + // Extract relevant summary/diagnosis from the tool's output + if (p.toolResponse.name === 'diagnoseCropDisease') return p.toolResponse.output.diagnosis; + if (p.toolResponse.name === 'getMandiPriceInsights') return p.toolResponse.output.summary; + if (p.toolResponse.name === 'summarizeGovernmentScheme') return p.toolResponse.output.summary; } - } else { - responseText = llmOutput.text; - } - - if (!responseText) { - responseText = "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; - } + return ''; + }) + .join('\n') + .trim() || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; // Translate the response to the user's preferred language const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); From e5d43078ea927dc3eb66ffabd58897a4a86ee374 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sat, 26 Jul 2025 22:42:12 +0000 Subject: [PATCH 28/31] I see this error with the app, reported by NextJS, please fix it. The er --- package-lock.json | 764 ++++++++++++++++++++++- package.json | 1 + src/ai/flows/get-mandi-price-insights.ts | 6 +- src/ai/flows/khet-ai-agent.ts | 126 ++-- 4 files changed, 801 insertions(+), 96 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe7454b..289dd61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,7 @@ "date-fns": "^3.6.0", "dotenv": "^16.5.0", "embla-carousel-react": "^8.6.0", + "firebase": "^12.0.0", "genkit": "^1.0.0-beta.13", "lucide-react": "^0.475.0", "next": "15.3.3", @@ -72,12 +73,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", - "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -91,6 +90,627 @@ "tslib": "^2.4.0" } }, + "node_modules/@firebase/ai": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.0.0.tgz", + "integrity": "sha512-N/aSHjqOpU+KkYU3piMkbcuxzvqsOvxflLUXBAkYAPAz8wjE2Ye3BQDgKHEYuhMmEWqj6LFgEBUN8wwc6dfMTw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/analytics": { + "version": "0.10.18", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.18.tgz", + "integrity": "sha512-iN7IgLvM06iFk8BeFoWqvVpRFW3Z70f+Qe2PfCJ7vPIgLPjHXDE774DhCT5Y2/ZU/ZbXPDPD60x/XPWEoZLNdg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/analytics-compat": { + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.24.tgz", + "integrity": "sha512-jE+kJnPG86XSqGQGhXXYt1tpTbCTED8OQJ/PQ90SEw14CuxRxx/H+lFbWA1rlFtFSsTCptAJtgyRBwr/f00vsw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/analytics": "0.10.18", + "@firebase/analytics-types": "0.8.3", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/analytics-types": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz", + "integrity": "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.0.tgz", + "integrity": "sha512-APIAeKvRNFWKJLjIL8wLDjh7u8g6ZjaeVmItyqSjCdEkJj14UuVlus74D8ofsOMWh45HEwxwkd96GYbi+CImEg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-check": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.11.0.tgz", + "integrity": "sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/app-check-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz", + "integrity": "sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check": "0.11.0", + "@firebase/app-check-types": "0.5.3", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", + "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-check-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz", + "integrity": "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/app-compat": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.0.tgz", + "integrity": "sha512-nUnNpOeRj0KZzVzHsyuyrmZKKHfykZ8mn40FtG28DeSTWeM5b/2P242Va4bmQpJsy5y32vfv50+jvdckrpzy7Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app": "0.14.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", + "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/auth-compat": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.0.tgz", + "integrity": "sha512-J0lGSxXlG/lYVi45wbpPhcWiWUMXevY4fvLZsN1GHh+po7TZVng+figdHBVhFheaiipU8HZyc7ljw1jNojM2nw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth": "1.11.0", + "@firebase/auth-types": "0.13.0", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/auth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.0.tgz", + "integrity": "sha512-5j7+ua93X+IRcJ1oMDTClTo85l7Xe40WSkoJ+shzPrX7OISlVWLdE1mKC57PSD+/LfAbdhJmvKixINBw2ESK6w==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", + "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/auth-types": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0.tgz", + "integrity": "sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/data-connect": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.11.tgz", + "integrity": "sha512-G258eLzAD6im9Bsw+Qm1Z+P4x0PGNQ45yeUuuqe5M9B1rn0RJvvsQCRHXgE52Z+n9+WX1OJd/crcuunvOGc7Vw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/database": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz", + "integrity": "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz", + "integrity": "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/database": "1.1.0", + "@firebase/database-types": "1.0.16", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz", + "integrity": "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-types": "0.9.3", + "@firebase/util": "1.13.0" + } + }, + "node_modules/@firebase/firestore": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.0.tgz", + "integrity": "sha512-5zl0+/h1GvlCSLt06RMwqFsd7uqRtnNZt4sW99k2rKRd6k/ECObIWlEnvthm2cuOSnUmwZknFqtmd1qyYSLUuQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "@firebase/webchannel-wrapper": "1.0.4", + "@grpc/grpc-js": "~1.9.0", + "@grpc/proto-loader": "^0.7.8", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/firestore-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.0.tgz", + "integrity": "sha512-4O7v4VFeSEwAZtLjsaj33YrMHMRjplOIYC2CiYsF6o/MboOhrhe01VrTt8iY9Y5EwjRHuRz4pS6jMBT8LfQYJA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/firestore": "4.9.0", + "@firebase/firestore-types": "3.0.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/firestore-types": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz", + "integrity": "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/firestore/node_modules/@grpc/grpc-js": { + "version": "1.9.15", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz", + "integrity": "sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.8", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@firebase/functions": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.13.0.tgz", + "integrity": "sha512-2/LH5xIbD8aaLOWSFHAwwAybgSzHIM0dB5oVOL0zZnxFG1LctX2bc1NIAaPk1T+Zo9aVkLKUlB5fTXTkVUQprQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/messaging-interop-types": "0.2.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/functions-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.4.0.tgz", + "integrity": "sha512-VPgtvoGFywWbQqtvgJnVWIDFSHV1WE6Hmyi5EGI+P+56EskiGkmnw6lEqc/MEUfGpPGdvmc4I9XMU81uj766/g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/functions": "0.13.0", + "@firebase/functions-types": "0.6.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/functions-types": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz", + "integrity": "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/installations": { + "version": "0.6.19", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.19.tgz", + "integrity": "sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/installations-compat": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.19.tgz", + "integrity": "sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/installations-types": "0.5.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/installations-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz", + "integrity": "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging": { + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.23.tgz", + "integrity": "sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/messaging-interop-types": "0.2.3", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/messaging-compat": { + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz", + "integrity": "sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/messaging": "0.12.23", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/messaging-interop-types": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz", + "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/performance": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.8.tgz", + "integrity": "sha512-k6xfNM/CdTl4RaV4gT/lH53NU+wP33JiN0pUeNBzGVNvfXZ3HbCkoISE3M/XaiOwHgded1l6XfLHa4zHgm0Wyg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0", + "web-vitals": "^4.2.4" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/performance-compat": { + "version": "0.2.21", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.21.tgz", + "integrity": "sha512-OQfYRsIQiEf9ez1SOMLb5TRevBHNIyA2x1GI1H10lZ432W96AK5r4LTM+SNApg84dxOuHt6RWSQWY7TPWffKXg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/performance": "0.7.8", + "@firebase/performance-types": "0.2.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/performance-types": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz", + "integrity": "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/remote-config": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.6.tgz", + "integrity": "sha512-Yelp5xd8hM4NO1G1SuWrIk4h5K42mNwC98eWZ9YLVu6Z0S6hFk1mxotAdCRmH2luH8FASlYgLLq6OQLZ4nbnCA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/remote-config-compat": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.19.tgz", + "integrity": "sha512-y7PZAb0l5+5oIgLJr88TNSelxuASGlXyAKj+3pUc4fDuRIdPNBoONMHaIUa9rlffBR5dErmaD2wUBJ7Z1a513Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/remote-config": "0.6.6", + "@firebase/remote-config-types": "0.4.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/remote-config-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.4.0.tgz", + "integrity": "sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/storage": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.14.0.tgz", + "integrity": "sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/storage-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.4.0.tgz", + "integrity": "sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/storage": "0.14.0", + "@firebase/storage-types": "0.8.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/storage-types": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3.tgz", + "integrity": "sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/webchannel-wrapper": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.4.tgz", + "integrity": "sha512-6m8+P+dE/RPl4OPzjTxcTbQ0rGeRyeTvAi9KwIffBVCiAMKrfXfLZaqD1F+m8t4B5/Q5aHsMozOgirkH1F5oMQ==", + "license": "Apache-2.0" + }, "node_modules/@floating-ui/core": { "version": "1.6.9", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", @@ -3059,9 +3679,10 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -4015,6 +4636,18 @@ "reusify": "^1.0.4" } }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -4075,6 +4708,66 @@ "micromatch": "^4.0.2" } }, + "node_modules/firebase": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.0.0.tgz", + "integrity": "sha512-KV+OrMJpi2uXlqL2zaCcXb7YuQbY/gMIWT1hf8hKeTW1bSumWaHT5qfmn0WTpHwKQa3QEVOtZR2ta9EchcmYuw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/ai": "2.0.0", + "@firebase/analytics": "0.10.18", + "@firebase/analytics-compat": "0.2.24", + "@firebase/app": "0.14.0", + "@firebase/app-check": "0.11.0", + "@firebase/app-check-compat": "0.4.0", + "@firebase/app-compat": "0.5.0", + "@firebase/app-types": "0.9.3", + "@firebase/auth": "1.11.0", + "@firebase/auth-compat": "0.6.0", + "@firebase/data-connect": "0.3.11", + "@firebase/database": "1.1.0", + "@firebase/database-compat": "2.1.0", + "@firebase/firestore": "4.9.0", + "@firebase/firestore-compat": "0.4.0", + "@firebase/functions": "0.13.0", + "@firebase/functions-compat": "0.4.0", + "@firebase/installations": "0.6.19", + "@firebase/installations-compat": "0.2.19", + "@firebase/messaging": "0.12.23", + "@firebase/messaging-compat": "0.2.23", + "@firebase/performance": "0.7.8", + "@firebase/performance-compat": "0.2.21", + "@firebase/remote-config": "0.6.6", + "@firebase/remote-config-compat": "0.2.19", + "@firebase/storage": "0.14.0", + "@firebase/storage-compat": "0.4.0", + "@firebase/util": "1.13.0" + } + }, + "node_modules/firebase/node_modules/@firebase/auth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.0.tgz", + "integrity": "sha512-5j7+ua93X+IRcJ1oMDTClTo85l7Xe40WSkoJ+shzPrX7OISlVWLdE1mKC57PSD+/LfAbdhJmvKixINBw2ESK6w==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@react-native-async-storage/async-storage": "^1.18.1" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, "node_modules/foreground-child": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", @@ -4461,6 +5154,12 @@ "node": ">= 0.8" } }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -4509,6 +5208,12 @@ "node": ">=0.10.0" } }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, "node_modules/import-in-the-middle": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", @@ -5820,11 +6525,6 @@ "decimal.js-light": "^2.4.1" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5921,9 +6621,10 @@ } }, "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6782,12 +7483,41 @@ "node": ">= 8" } }, + "node_modules/web-vitals": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz", + "integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==", + "license": "Apache-2.0" + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", diff --git a/package.json b/package.json index 02fae7e..bdf62b2 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "date-fns": "^3.6.0", "dotenv": "^16.5.0", "embla-carousel-react": "^8.6.0", + "firebase": "^12.0.0", "genkit": "^1.0.0-beta.13", "lucide-react": "^0.475.0", "next": "15.3.3", diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index 286363e..f8918da 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -22,7 +22,7 @@ export async function getMandiPriceInsights(input: GetMandiPriceInsightsInput): const getMandiPriceInsightsPrompt = ai.definePrompt({ name: 'getMandiPriceInsightsPrompt', - model: 'googleai/gemini-1.5-flash', + model: 'googleai/gemini-2.5-flash', input: {schema: z.object({ crop: z.string(), location: z.string(), @@ -35,9 +35,11 @@ Your summary must be a single paragraph and include: - The general price range (minimum and maximum if available). - A simple recommendation on whether it's a good time to sell, based on recent price trends. - Suggest the better time when the farmer should sell his crop. +- If you are not able to get accurate rates, then try giving approximate rates of that crop and give disclaimer as this may not be the accurate, this is given based on some market trends. +- Keep the response short simple and clear cut to cut. IMPORTANT: -- ALWAYS use the Indian Rupee symbol (?). +- ALWAYS use the Indian Rupee symbol (₹) or instead of that use INR or give it as e.g. Rs.3,000/- approximately. - ALWAYS state that the prices are per quintal. - If you cannot find data for the specific location, state that and suggest looking for prices in a nearby major market. - Your entire response must be enclosed within the 'summary' field of the JSON output. diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 54d71ce..0b41b37 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -5,15 +5,13 @@ * - khetAIAgent - A function that handles the conversational agent process. */ -import { ai } from '@/ai/genkit'; -import { z } from 'genkit'; -import { diagnoseCropDisease } from './diagnose-crop-disease'; -import { getMandiPriceInsights } from './get-mandi-price-insights'; -import { summarizeGovernmentScheme } from './summarize-government-scheme'; +import {ai} from '@/ai/genkit'; +import {z} from 'genkit'; +import {diagnoseCropDisease} from './diagnose-crop-disease'; +import {getMandiPriceInsights} from './get-mandi-price-insights'; +import {summarizeGovernmentScheme} from './summarize-government-scheme'; import { textToSpeech } from './text-to-speech'; import { - DiagnoseCropDiseaseInput, - DiagnoseCropDiseaseInputSchema, DiagnoseCropDiseaseOutputSchema, GetMandiPriceInsightsInputSchema, GetMandiPriceInsightsOutputSchema, @@ -29,22 +27,26 @@ import { translateText } from './translate-text'; const cropDiseaseTool = ai.defineTool( { name: 'diagnoseCropDisease', - description: 'Use this tool ONLY when the user provides an image of a plant. This tool analyzes the image to diagnose crop diseases.', - inputSchema: DiagnoseCropDiseaseInputSchema, + description: 'Diagnoses crop diseases from a user query and an image. Use this tool if the user provides an image or asks a question about crop health.', + inputSchema: z.object({ + query: z.string().describe("The user's question about the crop disease."), + photoDataUri: z.string().describe("A photo of the crop as a data URI."), + targetLanguage: z.string().describe('The target language for the response.'), + }), outputSchema: DiagnoseCropDiseaseOutputSchema, }, async (input) => diagnoseCropDisease(input) ); const mandiPriceTool = ai.defineTool( - { - name: 'getMandiPriceInsights', - description: 'Gets mandi price insights for a specific crop and location.', - inputSchema: GetMandiPriceInsightsInputSchema, - outputSchema: GetMandiPriceInsightsOutputSchema, - }, - async (input) => getMandiPriceInsights(input) -); + { + name: 'getMandiPriceInsights', + description: 'Gets mandi price insights for a specific crop and location.', + inputSchema: GetMandiPriceInsightsInputSchema, + outputSchema: GetMandiPriceInsightsOutputSchema, + }, + async (input) => getMandiPriceInsights(input) + ); const govSchemeTool = ai.defineTool( { @@ -56,79 +58,49 @@ const govSchemeTool = ai.defineTool( async (input) => summarizeGovernmentScheme(input) ); + export async function khetAIAgent(input: KhetAIAgentInput): Promise { return khetAIAgentFlow(input); } const prompt = ai.definePrompt({ - name: 'khetAIAgentPrompt', - model: 'googleai/gemini-1.5-flash', - tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], - system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. -Your goal is to understand the user's question and use the available tools to provide a clear and concise answer. -- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. Pass BOTH the user's text query and the image data to the tool. + name: 'khetAIAgentPrompt', + model: 'googleai/gemini-1.5-flash', + tools: [mandiPriceTool, govSchemeTool, cropDiseaseTool], + system: `You are KhetAI, a friendly and helpful AI assistant for Indian farmers. +Your goal is to understand the user's question and use the available tools to provide a clear and concise answer in their selected language. +- If the user provides an image, you MUST use the 'diagnoseCropDisease' tool. - For mandi prices, use the getMandiPriceInsights tool. The user's location is provided in the input. - For government schemes, use the summarizeGovernmentScheme tool. +- For questions about crop diseases (even without an image), use the diagnoseCropDisease tool. - If the user asks a general question or something you don't have a tool for, provide a helpful answer based on your general knowledge. - Always be polite and address the farmer directly. - The user's current location is: {{location}}. Use this for any location-based queries unless they specify a different one. -- The user's preferred language is {{targetLanguage}}. The tools will handle their own translation, but your own conversational text must be translated at the end.`, -}); - -const khetAIAgentFlow = ai.defineFlow( - { - name: 'khetAIAgentFlow', - inputSchema: KhetAIAgentInputSchema, - outputSchema: KhetAIAgentOutputSchema, - }, - async (input) => { - // Prepare the payload based on whether an image is provided - const promptPayload = input.photoDataUri - ? [{ text: input.query }, { media: { url: input.photoDataUri } }] - : input.query; +- The user's preferred language is {{targetLanguage}}. You MUST respond in this language. The tools will automatically handle translation, but your own conversational text must also be translated.`, + }); - let output; - try { - const result = await prompt(input); - output = result.output; - } catch (error) { - console.error('Error with prompt call:', error); - output = null; - } - // Check if 'output' is valid - if (!output || !output.content || !Array.isArray(output.content.parts)) { - console.error('Invalid output received:', output); - return { - response: "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it.", - audio: "", // Provide an empty response for the audio - }; - } +const khetAIAgentFlow = ai.defineFlow( + { + name: 'khetAIAgentFlow', + inputSchema: KhetAIAgentInputSchema, + outputSchema: KhetAIAgentOutputSchema, + }, + async (input) => { + const promptPayload = input.photoDataUri + ? [ {text: input.query}, {media: {url: input.photoDataUri}}] + : input.query; - // Map the response parts to extract the relevant text - const responseText = output.content.parts - .map((p: { text?: string; toolResponse?: { name: string, output: any } }) => { - if (p.text) return p.text; - if (p.toolResponse) { - // Extract relevant summary/diagnosis from the tool's output - if (p.toolResponse.name === 'diagnoseCropDisease') return p.toolResponse.output.diagnosis; - if (p.toolResponse.name === 'getMandiPriceInsights') return p.toolResponse.output.summary; - if (p.toolResponse.name === 'summarizeGovernmentScheme') return p.toolResponse.output.summary; - } - return ''; - }) - .join('\n') - .trim() || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; + const result = await prompt(promptPayload, input); + + const responseText = result.output?.content?.parts[0]?.text || result.choices[0]?.message.tool_calls?.[0]?.output.result || "I'm sorry, I couldn't find an answer to your question. Please try rephrasing it."; - // Translate the response to the user's preferred language - const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); - - // Convert the translated text to speech - const speech = await textToSpeech({ text: translatedResponse.translatedText }); + const translatedResponse = await translateText({ text: responseText, targetLanguage: input.targetLanguage }); + const speech = await textToSpeech({text: translatedResponse.translatedText}); - return { - response: translatedResponse.translatedText, - audio: speech.audio, - }; - } + return { + response: translatedResponse.translatedText, + audio: speech.audio, + }; + } ); From c007e85a485a4b05e0b41ec8c1d038ff485db75d Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sun, 27 Jul 2025 00:25:46 +0000 Subject: [PATCH 29/31] The mandi prices are not coming properly, try using some different metho --- genkit.config.ts | 12 + package-lock.json | 5880 ++++++++++++++++------ package.json | 16 +- src/ai/flows/get-mandi-price-insights.ts | 25 +- src/ai/flows/khet-ai-agent.ts | 48 +- tsconfig.json | 22 +- 6 files changed, 4488 insertions(+), 1515 deletions(-) create mode 100644 genkit.config.ts diff --git a/genkit.config.ts b/genkit.config.ts new file mode 100644 index 0000000..243bd1a --- /dev/null +++ b/genkit.config.ts @@ -0,0 +1,12 @@ +import { genkit } from 'genkit'; +import { googleAI } from '@genkit-ai/googleai'; +import { vertexAI } from '@genkit-ai/vertexai'; + +export default genkit({ + plugins: [ + googleAI(), + vertexAI({ + location: 'us-central1', + }), + ], +}); diff --git a/package-lock.json b/package-lock.json index 289dd61..5ecfe7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,10 @@ "name": "nextn", "version": "0.1.0", "dependencies": { + "@genkit-ai/core": "^1.15.5", + "@genkit-ai/google-cloud": "^1.15.5", "@genkit-ai/googleai": "^1.0.0-beta.13", + "@genkit-ai/vertexai": "^1.15.5", "@hookform/resolvers": "^4.1.3", "@radix-ui/react-accordion": "^1.2.3", "@radix-ui/react-alert-dialog": "^1.1.6", @@ -52,9 +55,20 @@ "zod": "^3.24.2" }, "devDependencies": { - "@types/node": "^20", + "@types/aws-lambda": "^8.10.152", + "@types/bunyan": "^1.8.11", + "@types/caseless": "^0.12.5", + "@types/connect": "^3.4.38", + "@types/memcached": "^2.2.10", + "@types/mysql": "^2.15.27", + "@types/node": "^20.19.9", + "@types/pg": "^8.15.4", + "@types/pg-pool": "^2.0.6", "@types/react": "^18", "@types/react-dom": "^18", + "@types/request": "^2.48.12", + "@types/tedious": "^4.0.14", + "@types/tough-cookie": "^4.0.5", "@types/wav": "^1.0.4", "postcss": "^8", "tailwindcss": "^3.4.1", @@ -65,6 +79,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -72,6 +87,67 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.24.3", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.24.3.tgz", + "integrity": "sha512-916wJXO6T6k8R6BAAcLhLPv/pnLGy7YSEBZXZ1XTFbLcTZE8oTy3oDW9WJf9KKZwMvVcePIfoTSvzXHRcGxkQQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { + "version": "18.19.120", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.120.tgz", + "integrity": "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/@anthropic-ai/vertex-sdk": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@anthropic-ai/vertex-sdk/-/vertex-sdk-0.4.3.tgz", + "integrity": "sha512-2Uef0C5P2Hx+T88RnUSRA3u4aZqmqnrRSOb2N64ozgKPiSUPTM5JlggAq2b32yWMj5d3MLYa6spJXKMmHXOcoA==", + "license": "MIT", + "dependencies": { + "@anthropic-ai/sdk": ">=0.14 <1", + "google-auth-library": "^9.4.2" + } + }, "node_modules/@babel/runtime": { "version": "7.28.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", @@ -81,15 +157,43 @@ "node": ">=6.9.0" } }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", + "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.4.0" } }, + "node_modules/@fastify/busboy": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", + "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==", + "license": "MIT", + "optional": true + }, "node_modules/@firebase/ai": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.0.0.tgz", @@ -712,28 +816,31 @@ "license": "Apache-2.0" }, "node_modules/@floating-ui/core": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", - "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", + "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.9" + "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", - "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz", + "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==", + "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.9" + "@floating-ui/core": "^1.7.2", + "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.4.tgz", + "integrity": "sha512-JbbpPhp38UmXDDAu60RJmbeme37Jbgsm7NrHGgzYYFKmblzRUh6Pa641dII6LsjwF4XlScDrde2UAzDo/b9KPw==", + "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.0.0" + "@floating-ui/dom": "^1.7.2" }, "peerDependencies": { "react": ">=16.8.0", @@ -741,17 +848,18 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", - "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" }, "node_modules/@genkit-ai/ai": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.15.2.tgz", - "integrity": "sha512-TG9QrY+x3AsddfJLeoBir8Dh4TupYy5gLrNkcABr3iZwrXxaBW6vamWRYw7ulgC0R0s5xcbqO63+ASDxSKzOug==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.15.5.tgz", + "integrity": "sha512-s/XwQS/cCHKmjBdEfoKXBw9T0RLd4jm1CVn19IE5ol20ElyL3A63uYjJwIXXjnjtpad+ZylMu38Of+T3MpPTfg==", "license": "Apache-2.0", "dependencies": { - "@genkit-ai/core": "1.15.2", + "@genkit-ai/core": "1.15.5", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.11.19", "colorette": "^2.0.20", @@ -763,10 +871,23 @@ "uuid": "^10.0.0" } }, + "node_modules/@genkit-ai/ai/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@genkit-ai/core": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.15.2.tgz", - "integrity": "sha512-I+Ma88LYUUQmgo9cfp29d1bjjDnsWx01FyYPGPf5Q3nvPWTQcRzVRno2vk93qN6lqfUfwbO6J84Hmm8hVSinQg==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.15.5.tgz", + "integrity": "sha512-HVnN5/F/AtPxelCZNPVczn4WQUiGNVed17Trpdy51tjZFz9gmgWqgoG6p2+9gfDp0Uv0eN9Kq2cXWnJfJaGwHQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -789,10 +910,38 @@ "zod-to-json-schema": "^3.22.4" } }, + "node_modules/@genkit-ai/google-cloud": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.15.5.tgz", + "integrity": "sha512-CGqXeE48THyJL06r81/Nv03ri5xdKrTnUJQcsH7Tt09IPh4bJ7C1Js+QFJVwZJNxcrl/1eKhF2mb1tGZqQ+mng==", + "license": "Apache-2.0", + "dependencies": { + "@google-cloud/logging-winston": "^6.0.0", + "@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.19.0", + "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.4.1", + "@google-cloud/opentelemetry-resource-util": "^2.4.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.49.1", + "@opentelemetry/core": "~1.25.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resources": "~1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", + "@opentelemetry/sdk-node": "^0.52.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", + "google-auth-library": "^9.6.3", + "node-fetch": "^3.3.2", + "winston": "^3.12.0" + }, + "peerDependencies": { + "genkit": "^1.15.5" + } + }, "node_modules/@genkit-ai/googleai": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@genkit-ai/googleai/-/googleai-1.15.2.tgz", - "integrity": "sha512-Xu72/Ug1YSDBykiNTJCLMmVvangCS+fF8hRQ8fSKEM1/dTH0Se8vw75JtRnlHGcoQb/Enw8x0sJAG9UPVS3J1A==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@genkit-ai/googleai/-/googleai-1.15.5.tgz", + "integrity": "sha512-icHrYLHeLlTPRrWXj0xkvib930R5jo9oUfMlEm8mMfUbIuITnmt0InNKniAkhbkmurHqqKlxIEL1TnxhZsU/bA==", "license": "Apache-2.0", "dependencies": { "@google/generative-ai": "^0.24.0", @@ -800,7 +949,309 @@ "node-fetch": "^3.3.2" }, "peerDependencies": { - "genkit": "^1.15.2" + "genkit": "^1.15.5" + } + }, + "node_modules/@genkit-ai/vertexai": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@genkit-ai/vertexai/-/vertexai-1.15.5.tgz", + "integrity": "sha512-QqQKo2gkkrf9uyObMULIoF0J5kG2Yq6NDKTMzhpfgX012nto4su7Ar3Kc7AjM6JyFyKbXKlaFKeFBsudxCOUtA==", + "license": "Apache-2.0", + "dependencies": { + "@anthropic-ai/sdk": "^0.24.3", + "@anthropic-ai/vertex-sdk": "^0.4.0", + "@google-cloud/aiplatform": "^3.23.0", + "@google-cloud/vertexai": "^1.9.3", + "@mistralai/mistralai-gcp": "^1.3.5", + "google-auth-library": "^9.14.2", + "googleapis": "^140.0.1", + "node-fetch": "^3.3.2", + "openai": "^4.52.7" + }, + "optionalDependencies": { + "@google-cloud/bigquery": "^7.8.0", + "firebase-admin": ">=12.2" + }, + "peerDependencies": { + "genkit": "^1.15.5" + } + }, + "node_modules/@google-cloud/aiplatform": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/@google-cloud/aiplatform/-/aiplatform-3.35.0.tgz", + "integrity": "sha512-Eo+ckr1KbTxAOew9P+MeeR0aQXeW5PeOzrSM1JyGny/SGKejwX/RcGWSFpeapnlegTfI9N9xJeUeo3M+XBOeFg==", + "license": "Apache-2.0", + "dependencies": { + "google-gax": "^4.0.3", + "protobuf.js": "^1.1.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/bigquery": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.4.tgz", + "integrity": "sha512-C7jeI+9lnCDYK3cRDujcBsPgiwshWKn/f0BiaJmClplfyosCLfWE83iGQ0eKH113UZzjR9c9q7aZQg0nU388sw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/common": "^5.0.0", + "@google-cloud/paginator": "^5.0.2", + "@google-cloud/precise-date": "^4.0.0", + "@google-cloud/promisify": "4.0.0", + "arrify": "^2.0.1", + "big.js": "^6.0.0", + "duplexify": "^4.0.0", + "extend": "^3.0.2", + "is": "^3.3.0", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/common": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz", + "integrity": "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==", + "license": "Apache-2.0", + "dependencies": { + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "arrify": "^2.0.1", + "duplexify": "^4.1.1", + "extend": "^3.0.2", + "google-auth-library": "^9.0.0", + "html-entities": "^2.5.2", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/firestore": { + "version": "7.11.3", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.3.tgz", + "integrity": "sha512-qsM3/WHpawF07SRVvEJJVRwhYzM7o9qtuksyuqnrMig6fxIrwWnsezECWsG/D5TyYru51Fv5c/RTqNDQ2yU+4w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.3.0", + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^4.3.3", + "protobufjs": "^7.2.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/logging": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.0.tgz", + "integrity": "sha512-Ma94jvuoMpbgNniwtelOt8w82hxK62FuOXZonEv0Hyk3B+/YVuLG/SWNyY9yMso/RXnPEc1fP2qo9kDrjf/b2w==", + "license": "Apache-2.0", + "dependencies": { + "@google-cloud/common": "^5.0.0", + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "@opentelemetry/api": "^1.7.0", + "arrify": "^2.0.1", + "dot-prop": "^6.0.0", + "eventid": "^2.0.0", + "extend": "^3.0.2", + "gcp-metadata": "^6.0.0", + "google-auth-library": "^9.0.0", + "google-gax": "^4.0.3", + "on-finished": "^2.3.0", + "pumpify": "^2.0.1", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/logging-winston": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-6.0.1.tgz", + "integrity": "sha512-tgA/qe/aGZITMrJ/5Tuykv234pLb/Qo6iDZ8SDkjbsiIy69mLQmbphrUd/IqnE17BSDfrwDUckvWdghiy8b+Qg==", + "license": "Apache-2.0", + "dependencies": { + "@google-cloud/logging": "^11.0.0", + "google-auth-library": "^9.0.0", + "lodash.mapvalues": "^4.6.0", + "winston-transport": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "winston": ">=3.2.1" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-monitoring-exporter/-/opentelemetry-cloud-monitoring-exporter-0.19.0.tgz", + "integrity": "sha512-5SOPXwC6RET4ZvXxw5D97dp8fWpqWEunHrzrUUGXhG4UAeedQe1KvYV8CK+fnaAbN2l2ha6QDYspT6z40TVY0g==", + "license": "Apache-2.0", + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.3.0", + "@google-cloud/precise-date": "^4.0.0", + "google-auth-library": "^9.0.0", + "googleapis": "^137.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-metrics": "^1.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter/node_modules/googleapis": { + "version": "137.1.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-137.1.0.tgz", + "integrity": "sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.0.0", + "googleapis-common": "^7.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-cloud-trace-exporter": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-trace-exporter/-/opentelemetry-cloud-trace-exporter-2.4.1.tgz", + "integrity": "sha512-Dq2IyAyA9PCjbjLOn86i2byjkYPC59b5ic8k/L4q5bBWH0Jro8lzMs8C0G5pJfqh2druj8HF+oAIAlSdWQ+Z9Q==", + "license": "Apache-2.0", + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.4.0", + "@grpc/grpc-js": "^1.1.8", + "@grpc/proto-loader": "^0.7.0", + "google-auth-library": "^9.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-trace-base": "^1.0.0" + } + }, + "node_modules/@google-cloud/opentelemetry-resource-util": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-resource-util/-/opentelemetry-resource-util-2.4.0.tgz", + "integrity": "sha512-/7ujlMoKtDtrbQlJihCjQnm31n2s2RTlvJqcSbt2jV3OkCzPAdo3u31Q13HNugqtIRUSk7bUoLx6AzhURkhW4w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.22.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/resources": "^1.0.0" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", + "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", + "license": "Apache-2.0", + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/precise-date": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-4.0.0.tgz", + "integrity": "sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", + "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.16.0.tgz", + "integrity": "sha512-7/5LRgykyOfQENcm6hDKP8SX/u9XxE5YOiWOkgkwcoO+cG8xT/cyOvp9wwN3IxfdYgpHs8CE7Nq2PKX2lNaEXw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "<4.1.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "duplexify": "^4.1.3", + "fast-xml-parser": "^4.4.1", + "gaxios": "^6.0.2", + "google-auth-library": "^9.6.3", + "html-entities": "^2.5.2", + "mime": "^3.0.0", + "p-limit": "^3.0.1", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@google-cloud/vertexai": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@google-cloud/vertexai/-/vertexai-1.10.0.tgz", + "integrity": "sha512-HqYqoivNtkq59po8m7KI0n+lWKdz4kabENncYQXZCX/hBWJfXtKAfR/2nUQsP+TwSfHKoA7zDL2RrJYIv/j3VQ==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.1.0" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@google/generative-ai": { @@ -847,6 +1298,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-4.1.3.tgz", "integrity": "sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==", + "license": "MIT", "dependencies": { "@standard-schema/utils": "^0.3.0" }, @@ -855,12 +1307,13 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", - "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", + "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==", "cpu": [ "arm64" ], + "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -872,16 +1325,17 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.1.0" + "@img/sharp-libvips-darwin-arm64": "1.2.0" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", - "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz", + "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==", "cpu": [ "x64" ], + "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -893,16 +1347,17 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" + "@img/sharp-libvips-darwin-x64": "1.2.0" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==", "cpu": [ "arm64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "darwin" @@ -912,12 +1367,13 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz", + "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "darwin" @@ -927,12 +1383,13 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz", + "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==", "cpu": [ "arm" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -942,12 +1399,13 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz", + "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==", "cpu": [ "arm64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -957,12 +1415,13 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz", + "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==", "cpu": [ "ppc64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -972,12 +1431,13 @@ } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz", + "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==", "cpu": [ "s390x" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -987,12 +1447,13 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz", + "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -1002,12 +1463,13 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz", + "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==", "cpu": [ "arm64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -1017,12 +1479,13 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz", + "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -1032,12 +1495,13 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", - "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz", + "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==", "cpu": [ "arm" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -1049,16 +1513,17 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" + "@img/sharp-libvips-linux-arm": "1.2.0" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", - "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz", + "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==", "cpu": [ "arm64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -1070,16 +1535,17 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" + "@img/sharp-libvips-linux-arm64": "1.2.0" } }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", - "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz", + "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==", "cpu": [ - "s390x" + "ppc64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -1091,16 +1557,39 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" + "@img/sharp-libvips-linux-ppc64": "1.2.0" } }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", - "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz", + "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==", "cpu": [ - "x64" + "s390x" ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz", + "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -1112,16 +1601,17 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" + "@img/sharp-libvips-linux-x64": "1.2.0" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", - "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz", + "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==", "cpu": [ "arm64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -1133,16 +1623,17 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", - "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz", + "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==", "cpu": [ "x64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -1154,19 +1645,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + "@img/sharp-libvips-linuxmusl-x64": "1.2.0" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", - "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz", + "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==", "cpu": [ "wasm32" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.3" + "@emnapi/runtime": "^1.4.4" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -1176,12 +1668,13 @@ } }, "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", - "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz", + "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==", "cpu": [ "arm64" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" @@ -1194,12 +1687,13 @@ } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", - "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz", + "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==", "cpu": [ "ia32" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" @@ -1212,12 +1706,13 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", - "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz", + "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==", "cpu": [ "x64" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" @@ -1233,6 +1728,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1245,44 +1741,115 @@ "node": ">=12" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1298,10 +1865,22 @@ "url": "https://opencollective.com/js-sdsl" } }, + "node_modules/@mistralai/mistralai-gcp": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mistralai/mistralai-gcp/-/mistralai-gcp-1.5.0.tgz", + "integrity": "sha512-KUv4GziIN8do4gmPe7T85gpYW1o2Q89e0hs8PQfZhFRMYz7uYPwxHyVI5UaxWlHFcmAvyxfaOAH0OuCC38Hb6g==", + "dependencies": { + "google-auth-library": "^9.11.0" + }, + "peerDependencies": { + "zod": ">= 3" + } + }, "node_modules/@next/env": { "version": "15.3.3", "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz", - "integrity": "sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==" + "integrity": "sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==", + "license": "MIT" }, "node_modules/@next/swc-darwin-arm64": { "version": "15.3.3", @@ -1310,6 +1889,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1325,6 +1905,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1340,6 +1921,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -1355,6 +1937,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -1370,6 +1953,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -1385,6 +1969,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -1400,6 +1985,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -1415,6 +2001,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -1427,6 +2014,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1439,6 +2027,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -1447,6 +2036,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1459,6 +2049,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", "engines": { "node": ">=8.0.0" } @@ -1475,6 +2066,67 @@ "node": ">=14" } }, + "node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.49.2.tgz", + "integrity": "sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-amqplib": "^0.41.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.43.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.43.1", + "@opentelemetry/instrumentation-bunyan": "^0.40.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.40.0", + "@opentelemetry/instrumentation-connect": "^0.38.0", + "@opentelemetry/instrumentation-cucumber": "^0.8.0", + "@opentelemetry/instrumentation-dataloader": "^0.11.0", + "@opentelemetry/instrumentation-dns": "^0.38.0", + "@opentelemetry/instrumentation-express": "^0.41.1", + "@opentelemetry/instrumentation-fastify": "^0.38.0", + "@opentelemetry/instrumentation-fs": "^0.14.0", + "@opentelemetry/instrumentation-generic-pool": "^0.38.1", + "@opentelemetry/instrumentation-graphql": "^0.42.0", + "@opentelemetry/instrumentation-grpc": "^0.52.0", + "@opentelemetry/instrumentation-hapi": "^0.40.0", + "@opentelemetry/instrumentation-http": "^0.52.0", + "@opentelemetry/instrumentation-ioredis": "^0.42.0", + "@opentelemetry/instrumentation-kafkajs": "^0.2.0", + "@opentelemetry/instrumentation-knex": "^0.39.0", + "@opentelemetry/instrumentation-koa": "^0.42.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.39.0", + "@opentelemetry/instrumentation-memcached": "^0.38.0", + "@opentelemetry/instrumentation-mongodb": "^0.46.0", + "@opentelemetry/instrumentation-mongoose": "^0.41.0", + "@opentelemetry/instrumentation-mysql": "^0.40.0", + "@opentelemetry/instrumentation-mysql2": "^0.40.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.39.0", + "@opentelemetry/instrumentation-net": "^0.38.0", + "@opentelemetry/instrumentation-pg": "^0.43.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-redis": "^0.41.0", + "@opentelemetry/instrumentation-redis-4": "^0.41.1", + "@opentelemetry/instrumentation-restify": "^0.40.0", + "@opentelemetry/instrumentation-router": "^0.39.0", + "@opentelemetry/instrumentation-socket.io": "^0.41.0", + "@opentelemetry/instrumentation-tedious": "^0.13.0", + "@opentelemetry/instrumentation-undici": "^0.5.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.0", + "@opentelemetry/resource-detector-aws": "^1.6.0", + "@opentelemetry/resource-detector-azure": "^0.2.10", + "@opentelemetry/resource-detector-container": "^0.4.0", + "@opentelemetry/resource-detector-gcp": "^0.29.10", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.4.1" + } + }, "node_modules/@opentelemetry/context-async-hooks": { "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", @@ -1502,6 +2154,15 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", @@ -1578,6 +2239,15 @@ "@opentelemetry/api": "^1.0.0" } }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/instrumentation": { "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", @@ -1598,170 +2268,1075 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", - "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.41.0.tgz", + "integrity": "sha512-00Oi6N20BxJVcqETjgNzCmVKN+I5bJH/61IlHiIWd00snj1FdgiIKlpE4hYVacTB2sjIBB3nTbHskttdZEE2eg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-transformer": "0.52.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/otlp-grpc-exporter-base": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", - "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.43.0.tgz", + "integrity": "sha512-pSxcWlsE/pCWQRIw92sV2C+LmKXelYkjkA7C5s39iPUi4pZ2lA1nIiw+1R/y2pDEhUHcaKkNyljQr3cx9ZpVlQ==", "license": "Apache-2.0", "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagator-aws-xray": "^1.3.1", + "@opentelemetry/resources": "^1.8.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/aws-lambda": "8.10.122" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", - "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "node_modules/@opentelemetry/instrumentation-aws-lambda/node_modules/@types/aws-lambda": { + "version": "8.10.122", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.122.tgz", + "integrity": "sha512-vBkIh9AY22kVOCEKo5CJlyCgmSWvasC+SWUxL/x/vOwRobMpI/HG1xp/Ae3AqmSiZeLUbOhW0FCD3ZjqqUxmXw==", + "license": "MIT" + }, + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.43.1.tgz", + "integrity": "sha512-qLT2cCniJ5W+6PFzKbksnoIQuq9pS83nmgaExfUwXVvlwi0ILc50dea0tWBHZMkdIDa/zZdcuFrJ7+fUcSnRow==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-logs": "0.52.1", - "@opentelemetry/sdk-metrics": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "protobufjs": "^7.3.0" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagation-utils": "^0.30.10", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/propagator-b3": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", - "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.40.0.tgz", + "integrity": "sha512-aZ4cXaGWwj79ZXSYrgFVsrDlE4mmf2wfvP9bViwRc0j75A6eN6GaHYHqufFGMTCqASQn5pIjjP+Bx+PWTGiofw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1" + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@types/bunyan": "1.8.9" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", - "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/@types/bunyan": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", + "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.40.0.tgz", + "integrity": "sha512-JxbM39JU7HxE9MTKKwi6y5Z3mokjZB2BjwfqYi4B3Y29YO3I42Z7eopG6qq06yWZc+nQli386UDQe0d9xKmw0A==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz", + "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/connect": "3.4.36" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", - "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "node_modules/@opentelemetry/instrumentation-connect/node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.8.0.tgz", + "integrity": "sha512-ieTm4RBIlZt2brPwtX5aEZYtYnkyqhAVXJI9RIohiBVMe5DxiwCwt+2Exep/nDVqGPX8zRBZUl4AEw423OxJig==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", - "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.11.0.tgz", + "integrity": "sha512-27urJmwkH4KDaMJtEv1uy2S7Apk4XbN4AgWMdfMJbi7DnOduJmeuA+DpJCwXB72tEWXo89z5T3hUVJIDiSNmNw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "lodash.merge": "^4.6.2" + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/sdk-node": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", - "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.38.0.tgz", + "integrity": "sha512-Um07I0TQXDWa+ZbEAKDFUxFH40dLtejtExDOMLNJ1CL8VmOmA71qx93Qi/QG4tGkiI1XWqr7gF/oiMCJ4m8buQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", - "@opentelemetry/exporter-trace-otlp-http": "0.52.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", - "@opentelemetry/exporter-zipkin": "1.25.1", - "@opentelemetry/instrumentation": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-logs": "0.52.1", - "@opentelemetry/sdk-metrics": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "@opentelemetry/sdk-trace-node": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "semver": "^7.5.4" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz", + "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz", + "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz", + "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.38.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.38.1.tgz", + "integrity": "sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz", + "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", + "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz", + "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", + "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz", + "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.2.0.tgz", + "integrity": "sha512-uKKmhEFd0zR280tJovuiBG7cfnNZT4kvVTvqtHPxQP7nOmRbJstCYHFH13YzjVcKjkmoArmxiSulmZmF7SLIlg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.24.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.39.0.tgz", + "integrity": "sha512-lRwTqIKQecPWDkH1KEcAUcFhCaNssbKSpxf4sxRTAROCwrCEnYkjOuqJHV+q1/CApjMTaKu0Er4LBv/6bDpoxA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz", + "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.39.0.tgz", + "integrity": "sha512-eU1Wx1RRTR/2wYXFzH9gcpB8EPmhYlNDIUHzUXjyUE0CAXEJhBLkYNlzdaVCoQDw2neDqS+Woshiia6+emWK9A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.38.0.tgz", + "integrity": "sha512-tPmyqQEZNyrvg6G+iItdlguQEcGzfE+bJkpQifmBXmWBnoS5oU3UxqtyYuXGL2zI9qQM5yMBHH4nRXWALzy7WA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@types/memcached": "^2.2.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz", + "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.41.0.tgz", + "integrity": "sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz", + "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/mysql": "2.15.22" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@types/mysql": { + "version": "2.15.22", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", + "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz", + "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz", + "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.38.0.tgz", + "integrity": "sha512-stjow1PijcmUquSmRD/fSihm/H61DbjPlJuJhWUe7P22LFPjFhsrSeiB5vGj3vn+QGceNAs+kioUTzMGPbNxtg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz", + "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.4" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@types/pg-pool": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz", + "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==", + "license": "MIT", + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.41.0.tgz", + "integrity": "sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.41.0.tgz", + "integrity": "sha512-RJ1pwI3btykp67ts+5qZbaFSAAzacucwBet5/5EsKYtWBpHbWwV/qbGN/kIBzXg5WEZBhXLrR/RUq0EpEUpL3A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.1.tgz", + "integrity": "sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.40.0.tgz", + "integrity": "sha512-sm/rH/GysY/KOEvZqYBZSLYFeXlBkHCgqPDgWc07tz+bHCN6mPs9P3otGOSTe7o3KAIM8Nc6ncCO59vL+jb2cA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.39.0.tgz", + "integrity": "sha512-LaXnVmD69WPC4hNeLzKexCCS19hRLrUw3xicneAMkzJSzNJvPyk7G6I7lz7VjQh1cooObPBt9gNyd3hhTCUrag==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.41.0.tgz", + "integrity": "sha512-7fzDe9/FpO6NFizC/wnzXXX7bF9oRchsD//wFqy5g5hVEgXZCQ70IhxjrKdBvgjyIejR9T9zTvfQ6PfVKfkCAw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.13.0.tgz", + "integrity": "sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/tedious": "^4.0.14" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.5.0.tgz", + "integrity": "sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.39.0.tgz", + "integrity": "sha512-v/1xziLJ9CyB3YDjBSBzbB70Qd0JwWTo36EqWK5m3AR0CzsyMQQmf3ZIZM6sgx7hXMcRQ0pnEYhg6nhrUQPm9A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", + "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagation-utils": { + "version": "0.30.16", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.16.tgz", + "integrity": "sha512-ZVQ3Z/PQ+2GQlrBfbMMMT0U7MzvYZLCPP800+ooyaBqm4hMvuQHfP028gB9/db0mwkmyEAMad9houukUVxhwcw==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/propagator-aws-xray": { + "version": "1.26.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.26.2.tgz", + "integrity": "sha512-k43wxTjKYvwfce9L4eT8fFYy/ATmCfPHZPZsyT/6ABimf2KE1HafoOsIcxLOtmNSZt6dCvBIYCrXaOWta20xJg==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", + "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.29.7", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.29.7.tgz", + "integrity": "sha512-PExUl/R+reSQI6Y/eNtgAsk6RHk1ElYSzOa8/FHfdc/nLmx9sqMasBEpLMkETkzDP7t27ORuXe4F9vwkV2uwwg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-aws": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.12.0.tgz", + "integrity": "sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-azure": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.12.tgz", + "integrity": "sha512-iIarQu6MiCjEEp8dOzmBvCSlRITPFTinFB2oNKAjU6xhx8d7eUcjNOKhBGQTvuCriZrxrEvDaEEY9NfrPQ6uYQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.25.1", + "@opentelemetry/resources": "^1.10.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.4.4.tgz", + "integrity": "sha512-ZEN2mq7lIjQWJ8NTt1umtr6oT/Kb89856BOmESLSvgSHbIwOFYs7cSfSRH5bfiVw6dXTQAVbZA/wLgCHKrebJA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.26.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp": { + "version": "0.29.13", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.13.tgz", + "integrity": "sha512-vdotx+l3Q+89PeyXMgKEGnZ/CwzwMtuMi/ddgD9/5tKZ08DfDGB2Npz9m2oXPHRCjc4Ro6ifMqFlRyzIvgOjhg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", "license": "Apache-2.0", @@ -1777,6 +3352,15 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/sdk-trace-node": { "version": "1.25.1", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", @@ -1798,18 +3382,34 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.36.0.tgz", + "integrity": "sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" } }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1880,58 +3480,32 @@ "license": "BSD-3-Clause" }, "node_modules/@radix-ui/number": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", - "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "license": "MIT" }, "node_modules/@radix-ui/primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", - "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", + "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "license": "MIT" }, "node_modules/@radix-ui/react-accordion": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.3.tgz", - "integrity": "sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A==", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collapsible": "1.1.3", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-collapsible": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.3.tgz", - "integrity": "sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz", + "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collapsible": "1.1.11", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -1949,16 +3523,17 @@ } }, "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.6.tgz", - "integrity": "sha512-p4XnPqgej8sZAAReCAKgz1REYZEBLR8hU9Pg27wFnCWIMc8g1ccCs0FjBcy05V15VTu8pAePw/VDYeOm/uZ6yQ==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.14.tgz", + "integrity": "sha512-IOZfZ3nPvN6lXpJTBCunFQPRSvK8MDgSc1FB85xnIpUKOw9en0dJj8JmCAxV7BiZdtYlUpmrQjoTFkVYtdoWzQ==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dialog": "1.1.6", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dialog": "1.1.14", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -1975,29 +3550,13 @@ } } }, - "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-arrow": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz", - "integrity": "sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.2" + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", @@ -2015,14 +3574,16 @@ } }, "node_modules/@radix-ui/react-avatar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.3.tgz", - "integrity": "sha512-Paen00T4P8L8gd9bNsRMw7Cbaz85oxiv+hzomsRZgFm2byltPFDtfcoqlWJ8GyZlIBWgLssJlzLCnKU0G0302g==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz", + "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==", + "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2040,18 +3601,19 @@ } }, "node_modules/@radix-ui/react-checkbox": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.4.tgz", - "integrity": "sha512-wP0CPAHq+P5I4INKe3hJrIa1WoNqqrejzW+zoU0rOvo1b9gDEJJFl2rYfO1PYJUQCc2H1WZxIJmyv9BS8i5fLw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.2.tgz", + "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2072,6 +3634,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz", "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==", + "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.2", "@radix-ui/react-compose-refs": "1.1.2", @@ -2097,84 +3660,15 @@ } } }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/primitive": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", - "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==" - }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-presence": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", - "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "dependencies": { + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { @@ -2192,84 +3686,11 @@ } } }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz", - "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", - "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -2281,9 +3702,10 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", - "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -2295,61 +3717,46 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.6.tgz", - "integrity": "sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.5", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.2", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-portal": "1.1.4", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", + "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", + "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, "node_modules/@radix-ui/react-direction": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", - "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -2361,15 +3768,16 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz", - "integrity": "sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", + "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2387,17 +3795,18 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.6.tgz", - "integrity": "sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA==", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz", + "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-menu": "2.1.6", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -2415,9 +3824,10 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", - "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", + "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -2429,13 +3839,14 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz", - "integrity": "sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2453,11 +3864,12 @@ } }, "node_modules/@radix-ui/react-id": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", - "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2470,11 +3882,12 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.2.tgz", - "integrity": "sha512-zo1uGMTaNlHehDyFQcDZXRJhUPDuukcnHz0/jnrup0JA6qL+AFpAnty+7VKa9esuU5xTblAZzTGYJKSKaBxBhw==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.2" + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", @@ -2492,26 +3905,27 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.6.tgz", - "integrity": "sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg==", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.5", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.2", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.2", - "@radix-ui/react-portal": "1.1.4", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-roving-focus": "1.1.2", - "@radix-ui/react-slot": "1.1.2", - "@radix-ui/react-use-callback-ref": "1.1.0", + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz", + "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, @@ -2530,38 +3944,22 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-menubar": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.6.tgz", - "integrity": "sha512-FHq7+3DlXwh/7FOM4i0G4bC4vPjiq89VEEvNF4VMLchGnaUuUbE5uKXMUCjdKaOghEEMeiKa5XCa2Pk4kteWmg==", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-menu": "2.1.6", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-roving-focus": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0" + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.15.tgz", + "integrity": "sha512-Z71C7LGD+YDYo3TV81paUs8f3Zbmkvg6VLRQpKYfzioOE6n7fOhA3ApK/V/2Odolxjoc4ENk8AYCjohCNayd5A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -2579,23 +3977,24 @@ } }, "node_modules/@radix-ui/react-popover": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.6.tgz", - "integrity": "sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg==", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.5", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.2", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.2", - "@radix-ui/react-portal": "1.1.4", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz", + "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, @@ -2614,38 +4013,22 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-popper": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.2.tgz", - "integrity": "sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz", + "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", + "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-rect": "1.1.0", - "@radix-ui/react-use-size": "1.1.0", - "@radix-ui/rect": "1.1.0" + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2663,12 +4046,13 @@ } }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.4.tgz", - "integrity": "sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2686,12 +4070,13 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", - "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", + "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2709,11 +4094,12 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", - "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.1.2" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -2730,30 +4116,14 @@ } } }, - "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-progress": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.2.tgz", - "integrity": "sha512-u1IgJFQ4zNAUTjGdDL5dcl/U8ntOR6jsnhxKb5RKp5Ozwl88xKR9EqRZOe/Mk8tnx0x5tNUe2F+MzsyjqMg0MA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz", + "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==", + "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2" + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", @@ -2771,20 +4141,21 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.3.tgz", - "integrity": "sha512-xtCsqt8Rp09FK50ItqEqTJ7Sxanz8EM8dnkVIhJrc/wkMMomSmXHvYbhv3E7Zx4oXh98aaLt9W679SUYXg4IDA==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.7.tgz", + "integrity": "sha512-9w5XhD0KPOrm92OTTE0SysH3sYzHsSTHNvZgUBo/VZ80VdYyB5RneDbc0dKpURS24IxkoFRu/hI0i4XyfFwY6g==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-roving-focus": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2802,19 +4173,20 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz", - "integrity": "sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz", + "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -2832,19 +4204,20 @@ } }, "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.3.tgz", - "integrity": "sha512-l7+NNBfBYYJa9tNqVcP2AGvxdE3lmE6kFTBXdvHgUaZuy+4wGCL1Cl2AfaR7RKyimj7lZURGLwFO59k4eBnDJQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz", + "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==", + "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.0", - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2862,29 +4235,30 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.6.tgz", - "integrity": "sha512-T6ajELxRvTuAMWH0YmRJ1qez+x4/7Nq7QIx7zJ0VK3qaEWdnWpNbEDnmWldG1zBDwqrLy5aLMUWcoGirVj5kMg==", - "dependencies": { - "@radix-ui/number": "1.1.0", - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.5", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.2", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.2", - "@radix-ui/react-portal": "1.1.4", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.2", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.5.tgz", + "integrity": "sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, @@ -2903,29 +4277,13 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-separator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.2.tgz", - "integrity": "sha512-oZfHcaAp2Y6KFBX6I5P1u7CQoy4lheCGiYj+pGFrHy8E/VNRb5E39TkTr3JrV520csPBTZjkuKFdEsjS5EUNKQ==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.2" + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", @@ -2943,21 +4301,22 @@ } }, "node_modules/@radix-ui/react-slider": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.2.3.tgz", - "integrity": "sha512-nNrLAWLjGESnhqBqcCNW4w2nn7LxudyMzeB6VgdyAnFLC6kfQgnAjSL2v6UkQTnDctJBlxrmxfplWS4iYjdUTw==", - "dependencies": { - "@radix-ui/number": "1.1.0", - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.5.tgz", + "integrity": "sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -2978,6 +4337,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, @@ -2991,32 +4351,19 @@ } } }, - "node_modules/@radix-ui/react-slot/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-switch": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.3.tgz", - "integrity": "sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz", + "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -3034,18 +4381,19 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.3.tgz", - "integrity": "sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz", + "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==", + "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-roving-focus": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -3063,22 +4411,23 @@ } }, "node_modules/@radix-ui/react-toast": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.6.tgz", - "integrity": "sha512-gN4dpuIVKEgpLn1z5FhzT9mYRUitbfZq9XqN/7kkBMUgFTzTG8x/KszWJugJXHcwxckY8xcKDZPz7kG3o6DsUA==", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-collection": "1.1.2", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.5", - "@radix-ui/react-portal": "1.1.4", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.2" + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.14.tgz", + "integrity": "sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -3096,22 +4445,23 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.8.tgz", - "integrity": "sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA==", - "dependencies": { - "@radix-ui/primitive": "1.1.1", - "@radix-ui/react-compose-refs": "1.1.1", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.5", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.2", - "@radix-ui/react-portal": "1.1.4", - "@radix-ui/react-presence": "1.1.2", - "@radix-ui/react-primitive": "2.0.2", - "@radix-ui/react-slot": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.2" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz", + "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -3128,27 +4478,11 @@ } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", - "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -3160,11 +4494,13 @@ } }, "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -3180,6 +4516,7 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, @@ -3193,10 +4530,14 @@ } } }, - "node_modules/@radix-ui/react-use-effect-event/node_modules/@radix-ui/react-use-layout-effect": { + "node_modules/@radix-ui/react-use-escape-keydown": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -3207,12 +4548,13 @@ } } }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", - "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" + "use-sync-external-store": "^1.5.0" }, "peerDependencies": { "@types/react": "*", @@ -3225,9 +4567,10 @@ } }, "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", - "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -3239,9 +4582,10 @@ } }, "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", - "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -3253,11 +4597,12 @@ } }, "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", - "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", "dependencies": { - "@radix-ui/rect": "1.1.0" + "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -3270,11 +4615,12 @@ } }, "node_modules/@radix-ui/react-use-size": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", - "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -3287,11 +4633,12 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.2.tgz", - "integrity": "sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.2" + "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", @@ -3309,47 +4656,108 @@ } }, "node_modules/@radix-ui/rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" }, "node_modules/@standard-schema/utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", - "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==" + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.152", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.152.tgz", + "integrity": "sha512-soT/c2gYBnT5ygwiHPmd9a1bftj462NWVk2tKCc1PYHSIacB2UwbTS2zYG4jzag1mRDuzg/OjtxQjQ2NKRB6Rw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bunyan": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.11.tgz", + "integrity": "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", + "license": "MIT" + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/d3-array": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" }, "node_modules/@types/d3-color": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" }, "node_modules/@types/d3-ease": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", - "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" }, "node_modules/@types/d3-interpolate": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", "dependencies": { "@types/d3-color": "*" } @@ -3357,12 +4765,14 @@ "node_modules/@types/d3-path": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", - "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==" + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" }, "node_modules/@types/d3-scale": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", "dependencies": { "@types/d3-time": "*" } @@ -3371,6 +4781,7 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", "dependencies": { "@types/d3-path": "*" } @@ -3378,12 +4789,40 @@ "node_modules/@types/d3-time": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", - "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==" + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" }, "node_modules/@types/d3-timer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", - "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } }, "node_modules/@types/handlebars": { "version": "4.1.0", @@ -3395,51 +4834,231 @@ "handlebars": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT", + "optional": true + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "license": "MIT" + }, + "node_modules/@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/mysql": { + "version": "2.15.27", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.27.tgz", + "integrity": "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { - "version": "20.17.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.17.tgz", - "integrity": "sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==", + "version": "20.19.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz", + "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/pg": { + "version": "8.15.4", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.4.tgz", + "integrity": "sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg==", + "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/pg": "*" } }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "devOptional": true + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT", + "optional": true }, "node_modules/@types/react": { - "version": "18.3.18", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", - "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", + "version": "18.3.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", - "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "devOptional": true, + "license": "MIT", "peerDependencies": { "@types/react": "^18.0.0" } }, + "node_modules/@types/request": { + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "license": "MIT", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, + "node_modules/@types/request/node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/shimmer": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", "license": "MIT" }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, "node_modules/@types/wav": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/wav/-/wav-1.0.4.tgz", @@ -3453,7 +5072,20 @@ "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "license": "BSD-2-Clause" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } }, "node_modules/accepts": { "version": "1.3.8", @@ -3498,6 +5130,18 @@ "node": ">= 14" } }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -3532,22 +5176,24 @@ } }, "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -3556,12 +5202,14 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3573,12 +5221,14 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" }, "node_modules/aria-hidden": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -3592,6 +5242,21 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, "node_modules/async-mutex": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", @@ -3601,10 +5266,27 @@ "tslib": "^2.4.0" } }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "optional": true, + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", "engines": { "node": ">= 4.0.0" } @@ -3612,7 +5294,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -3634,6 +5317,20 @@ ], "license": "MIT" }, + "node_modules/big.js": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", + "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" + } + }, "node_modules/bignumber.js": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", @@ -3647,6 +5344,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -3679,18 +5377,20 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -3756,6 +5456,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -3770,9 +5471,10 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -3782,12 +5484,13 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -3800,14 +5503,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001699", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz", - "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "funding": [ { "type": "opencollective", @@ -3821,12 +5525,14 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3838,24 +5544,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3879,6 +5572,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3896,6 +5590,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -3910,6 +5605,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", "dependencies": { "clsx": "^2.1.1" }, @@ -3920,7 +5616,8 @@ "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", @@ -3936,83 +5633,11 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4021,6 +5646,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", "optional": true, "dependencies": { "color-convert": "^2.0.1", @@ -4034,6 +5660,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4044,13 +5671,14 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "optional": true, + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -4062,10 +5690,58 @@ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "license": "MIT" }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/colorspace/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/colorspace/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/colorspace/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -4073,7 +5749,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -4134,6 +5811,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4147,6 +5825,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -4157,12 +5836,14 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/d3-array": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { "internmap": "1 - 2" }, @@ -4174,6 +5855,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4182,6 +5864,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", "engines": { "node": ">=12" } @@ -4190,6 +5873,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4198,6 +5882,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -4209,6 +5894,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4217,6 +5903,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -4232,6 +5919,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", "dependencies": { "d3-path": "^3.1.0" }, @@ -4243,6 +5931,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", "dependencies": { "d3-array": "2 - 3" }, @@ -4254,6 +5943,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -4265,6 +5955,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4282,6 +5973,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -4299,12 +5991,14 @@ "node_modules/decimal.js-light": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4317,6 +6011,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4340,6 +6043,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", "optional": true, "engines": { "node": ">=8" @@ -4348,31 +6052,50 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dotenv": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -4396,6 +6119,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -4405,10 +6129,23 @@ "node": ">= 0.4" } }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", @@ -4428,12 +6165,14 @@ "node_modules/embla-carousel": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", - "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==" + "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", + "license": "MIT" }, "node_modules/embla-carousel-react": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz", "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==", + "license": "MIT", "dependencies": { "embla-carousel": "8.6.0", "embla-carousel-reactive-utils": "8.6.0" @@ -4446,14 +6185,22 @@ "version": "8.6.0", "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz", "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==", + "license": "MIT", "peerDependencies": { "embla-carousel": "8.6.0" } }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", @@ -4464,10 +6211,20 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -4476,6 +6233,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -4484,6 +6242,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -4491,6 +6250,21 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -4515,10 +6289,41 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/eventid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", + "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", + "license": "Apache-2.0", + "dependencies": { + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eventid/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, "node_modules/express": { "version": "4.21.2", @@ -4572,6 +6377,16 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, + "node_modules/farmhash-modern": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/farmhash-modern/-/farmhash-modern-1.1.0.tgz", + "integrity": "sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4582,6 +6397,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -4590,6 +6406,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4605,6 +6422,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4628,10 +6446,30 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-parser": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "strnum": "^1.1.1" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -4648,6 +6486,12 @@ "node": ">=0.8.0" } }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -4675,6 +6519,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4704,6 +6549,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "license": "Apache-2.0", "dependencies": { "micromatch": "^4.0.2" } @@ -4744,6 +6590,56 @@ "@firebase/util": "1.13.0" } }, + "node_modules/firebase-admin": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.4.0.tgz", + "integrity": "sha512-Y8DcyKK+4pl4B93ooiy1G8qvdyRMkcNFfBSh+8rbVcw4cW8dgG0VXCCTp5NUwub8sn9vSPsOwpb9tE2OuFmcfQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@fastify/busboy": "^3.0.0", + "@firebase/database-compat": "^2.0.0", + "@firebase/database-types": "^1.0.6", + "@types/node": "^22.8.7", + "farmhash-modern": "^1.1.0", + "google-auth-library": "^9.14.2", + "jsonwebtoken": "^9.0.0", + "jwks-rsa": "^3.1.0", + "node-forge": "^1.3.1", + "uuid": "^11.0.2" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@google-cloud/firestore": "^7.11.0", + "@google-cloud/storage": "^7.14.0" + } + }, + "node_modules/firebase-admin/node_modules/@types/node": { + "version": "22.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", + "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/firebase-admin/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/firebase/node_modules/@firebase/auth": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.0.tgz", @@ -4768,12 +6664,19 @@ } } }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -4783,6 +6686,50 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "license": "MIT" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -4817,6 +6764,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -4830,13 +6778,15 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4849,10 +6799,18 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "license": "MIT", + "optional": true + }, "node_modules/gaxios": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", @@ -4889,19 +6847,6 @@ } } }, - "node_modules/gaxios/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/gcp-metadata": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", @@ -4917,16 +6862,29 @@ } }, "node_modules/genkit": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.15.2.tgz", - "integrity": "sha512-GvssmZb6W9O+TskFsags3m5PjWWY7UD5/FvH+n2YDZhwdNS+hpAM8KcUmk7gulcX+EhB9+ZenMzxpRwE+NJf2g==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.15.5.tgz", + "integrity": "sha512-D4YdwMqbEpVvkymkr4oEwH/xOfLtQtfIalZZTfsYGM/drO6DvhMD5JzDpoN1GqWogRsyqQzU3KI5wK/miW3svg==", "license": "Apache-2.0", "dependencies": { - "@genkit-ai/ai": "1.15.2", - "@genkit-ai/core": "1.15.2", + "@genkit-ai/ai": "1.15.5", + "@genkit-ai/core": "1.15.5", "uuid": "^10.0.0" } }, + "node_modules/genkit/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -4937,16 +6895,17 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.0", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", @@ -4963,6 +6922,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4983,6 +6943,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -4992,19 +6953,21 @@ } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5014,6 +6977,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -5038,6 +7002,49 @@ "node": ">=14" } }, + "node_modules/google-gax": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.6.1.tgz", + "integrity": "sha512-V6eky/xz2mcKfAd1Ioxyd6nmA61gao3n01C+YeuIwu3vzM9EDR6wcVzMSIbLMDXWeoi9SHYctXuKYC5uJUT3eQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.10.9", + "@grpc/proto-loader": "^0.7.13", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "google-auth-library": "^9.3.0", + "node-fetch": "^2.7.0", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^2.0.2", + "protobufjs": "^7.3.2", + "retry-request": "^7.0.0", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/google-gax/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/google-logging-utils": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", @@ -5047,10 +7054,41 @@ "node": ">=14" } }, + "node_modules/googleapis": { + "version": "140.0.1", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-140.0.1.tgz", + "integrity": "sha512-ZGvBX4mQcFXO9ACnVNg6Aqy3KtBPB5zTuue43YVLxwn8HSv8jB7w+uDKoIPSoWuxGROgnj2kbng6acXncOQRNA==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.0.0", + "googleapis-common": "^7.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/googleapis-common": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz", + "integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^6.0.3", + "google-auth-library": "^9.7.0", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5061,7 +7099,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/gtoken": { "version": "7.1.0", @@ -5101,6 +7140,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -5109,6 +7149,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -5120,6 +7161,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -5131,6 +7188,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -5138,6 +7196,22 @@ "node": ">= 0.4" } }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -5160,6 +7234,55 @@ "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "license": "MIT" }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -5196,6 +7319,15 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5231,6 +7363,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "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.", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -5239,12 +7372,14 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -5258,16 +7393,27 @@ "node": ">= 0.10" } }, + "node_modules/is": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.2.tgz", + "integrity": "sha512-a2xr4E3s1PjDS8ORcGgXpWx6V+liNs+O3JRD2mb9aeugD7rtkkZ0zgLdYgw0tWsKhsdiezGYptSiMlVazCBTuQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "optional": true + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -5279,6 +7425,7 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -5293,6 +7440,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -5307,6 +7455,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5315,6 +7464,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -5323,6 +7473,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -5334,10 +7485,20 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -5350,20 +7511,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -5378,14 +7554,26 @@ "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/json-bigint": { "version": "1.0.0", @@ -5409,12 +7597,13 @@ "license": "MIT" }, "node_modules/json-stable-stringify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz", - "integrity": "sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "isarray": "^2.0.5", "jsonify": "^0.0.1", "object-keys": "^1.1.1" @@ -5442,6 +7631,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -5453,10 +7643,64 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "license": "Public Domain", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "optional": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "optional": true + }, "node_modules/jwa": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", @@ -5468,6 +7712,49 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/jwks-rsa": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.2.0.tgz", + "integrity": "sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/express": "^4.17.20", + "@types/jsonwebtoken": "^9.0.4", + "debug": "^4.3.4", + "jose": "^4.15.4", + "limiter": "^1.1.5", + "lru-memoizer": "^2.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jwks-rsa/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/jwks-rsa/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "optional": true + }, "node_modules/jws": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", @@ -5482,14 +7769,22 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11" } }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -5497,10 +7792,17 @@ "url": "https://github.com/sponsors/antonk52" } }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "optional": true + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" }, "node_modules/lodash": { "version": "4.17.21", @@ -5514,12 +7816,97 @@ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT", + "optional": true + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/long": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", @@ -5530,6 +7917,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -5538,14 +7926,34 @@ } }, "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-memoizer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", + "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", + "license": "MIT", + "optional": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } }, "node_modules/lucide-react": { "version": "0.475.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.475.0.tgz", "integrity": "sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==", + "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } @@ -5554,6 +7962,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5580,6 +7989,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -5597,6 +8007,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5606,15 +8017,16 @@ } }, "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "license": "MIT", + "optional": true, "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, "node_modules/mime-db": { @@ -5639,23 +8051,22 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5664,6 +8075,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -5684,6 +8096,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -5691,15 +8104,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5726,6 +8140,7 @@ "version": "15.3.3", "resolved": "https://registry.npmjs.org/next/-/next-15.3.3.tgz", "integrity": "sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==", + "license": "MIT", "dependencies": { "@next/env": "15.3.3", "@swc/counter": "0.1.3", @@ -5793,6 +8208,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -5840,10 +8256,21 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "optional": true, + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5852,6 +8279,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5860,6 +8288,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -5880,6 +8309,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5900,22 +8330,131 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openai": { + "version": "4.104.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz", + "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.120", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.120.tgz", + "integrity": "sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/openai/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" }, "node_modules/parseurl": { "version": "1.3.3", @@ -5936,6 +8475,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "license": "MIT", "dependencies": { "@yarnpkg/lockfile": "^1.1.0", "chalk": "^4.1.2", @@ -5961,36 +8501,11 @@ "npm": ">5" } }, - "node_modules/patch-package/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5999,6 +8514,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -6006,12 +8522,14 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -6023,21 +8541,60 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -6049,22 +8606,24 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/postcss": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", - "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -6079,8 +8638,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -6092,6 +8652,7 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -6108,6 +8669,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -6122,40 +8684,6 @@ "postcss": "^8.4.21" } }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, "node_modules/postcss-nested": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", @@ -6170,6 +8698,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.1.1" }, @@ -6184,6 +8713,7 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6195,12 +8725,53 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -6210,7 +8781,38 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proto3-json-serializer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", + "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==", + "license": "Apache-2.0", + "dependencies": { + "protobufjs": "^7.2.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/protobuf.js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/protobuf.js/-/protobuf.js-1.1.2.tgz", + "integrity": "sha512-USO7Xus/pzPw549M1TguiyoOrKEhm9VMXv+CkDufcjMC8Rd7EPbxeRQPEjCV8ua1tm0k7z9xHkogcxovZogWdA==", + "license": "MIT", + "dependencies": { + "long": "~1.1.2" + } + }, + "node_modules/protobuf.js/node_modules/long": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/long/-/long-1.1.5.tgz", + "integrity": "sha512-TU6nAF5SdasnTr28c7e74P4Crbn9o3/zwo1pM22Wvg2i2vlZ4Eelxwu4QT7j21z0sDBlJDEnEZjXTZg2J8WJrg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.6" + } }, "node_modules/protobufjs": { "version": "7.5.3", @@ -6249,6 +8851,27 @@ "node": ">= 0.10" } }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "license": "MIT", + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, "node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", @@ -6281,7 +8904,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/range-parser": { "version": "1.2.1", @@ -6311,6 +8935,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -6322,6 +8947,7 @@ "version": "8.10.1", "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", + "license": "MIT", "funding": { "type": "individual", "url": "https://github.com/sponsors/gpbl" @@ -6335,6 +8961,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -6344,9 +8971,10 @@ } }, "node_modules/react-hook-form": { - "version": "7.54.2", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.54.2.tgz", - "integrity": "sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==", + "version": "7.61.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.61.1.tgz", + "integrity": "sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==", + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -6361,12 +8989,14 @@ "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" }, "node_modules/react-remove-scroll": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz", - "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "license": "MIT", "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", @@ -6391,6 +9021,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" @@ -6412,6 +9043,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", "dependencies": { "fast-equals": "^5.0.1", "prop-types": "^15.8.1", @@ -6426,6 +9058,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" @@ -6447,6 +9080,7 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -6462,32 +9096,30 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", "dependencies": { "pify": "^2.3.0" } }, "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -6496,9 +9128,10 @@ } }, "node_modules/recharts": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.1.tgz", - "integrity": "sha512-v8PUTUlyiDe56qUj82w/EDVuzEFXwEHp9/xOowGAZwfLjB9uAy3GllQVIYMWF6nU+qibx85WF75zD7AjqoT54Q==", + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", + "license": "MIT", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", @@ -6521,6 +9154,7 @@ "version": "0.4.5", "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", "dependencies": { "decimal.js-light": "^2.4.1" } @@ -6584,6 +9218,7 @@ "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -6599,10 +9234,35 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", + "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", + "license": "MIT", + "dependencies": { + "@types/request": "^2.48.8", + "extend": "^3.0.2", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -6613,6 +9273,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6620,47 +9281,6 @@ "rimraf": "bin.js" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6679,6 +9299,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -6703,6 +9324,15 @@ ], "license": "MIT" }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6713,6 +9343,7 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } @@ -6721,6 +9352,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6761,6 +9393,18 @@ "node": ">= 0.8" } }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6786,6 +9430,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -6805,10 +9450,11 @@ "license": "ISC" }, "node_modules/sharp": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", - "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", + "version": "0.34.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz", + "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==", "hasInstallScript": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "color": "^4.2.3", @@ -6822,33 +9468,35 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.2", - "@img/sharp-darwin-x64": "0.34.2", - "@img/sharp-libvips-darwin-arm64": "1.1.0", - "@img/sharp-libvips-darwin-x64": "1.1.0", - "@img/sharp-libvips-linux-arm": "1.1.0", - "@img/sharp-libvips-linux-arm64": "1.1.0", - "@img/sharp-libvips-linux-ppc64": "1.1.0", - "@img/sharp-libvips-linux-s390x": "1.1.0", - "@img/sharp-libvips-linux-x64": "1.1.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", - "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.2", - "@img/sharp-linux-arm64": "0.34.2", - "@img/sharp-linux-s390x": "0.34.2", - "@img/sharp-linux-x64": "0.34.2", - "@img/sharp-linuxmusl-arm64": "0.34.2", - "@img/sharp-linuxmusl-x64": "0.34.2", - "@img/sharp-wasm32": "0.34.2", - "@img/sharp-win32-arm64": "0.34.2", - "@img/sharp-win32-ia32": "0.34.2", - "@img/sharp-win32-x64": "0.34.2" + "@img/sharp-darwin-arm64": "0.34.3", + "@img/sharp-darwin-x64": "0.34.3", + "@img/sharp-libvips-darwin-arm64": "1.2.0", + "@img/sharp-libvips-darwin-x64": "1.2.0", + "@img/sharp-libvips-linux-arm": "1.2.0", + "@img/sharp-libvips-linux-arm64": "1.2.0", + "@img/sharp-libvips-linux-ppc64": "1.2.0", + "@img/sharp-libvips-linux-s390x": "1.2.0", + "@img/sharp-libvips-linux-x64": "1.2.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", + "@img/sharp-libvips-linuxmusl-x64": "1.2.0", + "@img/sharp-linux-arm": "0.34.3", + "@img/sharp-linux-arm64": "0.34.3", + "@img/sharp-linux-ppc64": "0.34.3", + "@img/sharp-linux-s390x": "0.34.3", + "@img/sharp-linux-x64": "0.34.3", + "@img/sharp-linuxmusl-arm64": "0.34.3", + "@img/sharp-linuxmusl-x64": "0.34.3", + "@img/sharp-wasm32": "0.34.3", + "@img/sharp-win32-arm64": "0.34.3", + "@img/sharp-win32-ia32": "0.34.3", + "@img/sharp-win32-x64": "0.34.3" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6860,6 +9508,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } @@ -6946,6 +9595,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -6957,7 +9607,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "optional": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } @@ -6966,6 +9616,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6983,10 +9634,20 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -6996,6 +9657,15 @@ "node": ">= 0.8" } }, + "node_modules/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "license": "MIT", + "dependencies": { + "stubs": "^3.0.0" + } + }, "node_modules/stream-parser": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", @@ -7005,6 +9675,12 @@ "debug": "2" } }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -7014,25 +9690,26 @@ } }, "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "license": "MIT" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/string-width-cjs": { @@ -7040,6 +9717,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7049,23 +9727,11 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7073,25 +9739,12 @@ "node": ">=8" } }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7099,18 +9752,30 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==", + "license": "MIT" }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", "dependencies": { "client-only": "0.0.1" }, @@ -7133,6 +9798,7 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -7150,10 +9816,55 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7165,70 +9876,200 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/teeny-request": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", + "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", + "license": "Apache-2.0", + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.9", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/teeny-request/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/teeny-request/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwind-merge": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.1.tgz", - "integrity": "sha512-AvzE8FmSoXC7nC+oU5GlQJbip2UO7tmOhOfQyOmPhrStOGXHU08j8mZEHZ4BmCqY5dWTCo4ClWkNyRNx1wpT0g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/tailwindcss": { - "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "node_modules/teeny-request/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.6", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=14.0.0" + "node": ">= 6" } }, - "node_modules/tailwindcss-animate": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", - "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "node_modules/teeny-request/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/teeny-request/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } @@ -7237,6 +10078,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -7247,12 +10089,14 @@ "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -7264,6 +10108,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -7286,15 +10131,26 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/type-is": { "version": "1.6.18", @@ -7310,10 +10166,11 @@ } }, "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7336,14 +10193,16 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -7363,10 +10222,17 @@ "integrity": "sha512-EWkjYEN0L6KOfEoOH6Wj4ghQqU7eBZMJqRHQnxQAq+dSEzRPClkWjf8557HkWQXF6BrAUoLSAyy9i3RVTliaNg==", "license": "http://geraintluff.github.io/tv4/LICENSE.txt" }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "license": "BSD" + }, "node_modules/use-callback-ref": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -7387,6 +10253,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -7404,10 +10271,20 @@ } } }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", @@ -7419,9 +10296,9 @@ } }, "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -7444,6 +10321,7 @@ "version": "36.9.2", "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", @@ -7474,6 +10352,30 @@ "stream-parser": "^0.3.1" } }, + "node_modules/wav/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/wav/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/wav/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -7532,6 +10434,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7542,6 +10445,42 @@ "node": ">= 8" } }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -7549,16 +10488,17 @@ "license": "MIT" }, "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -7569,6 +10509,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7581,61 +10522,20 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } }, "node_modules/y18n": { "version": "5.0.8", @@ -7646,6 +10546,13 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true + }, "node_modules/yaml": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", @@ -7685,51 +10592,24 @@ "node": ">=12" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "optional": true, "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "node": ">=10" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index bdf62b2..6282370 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,10 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@genkit-ai/core": "^1.15.5", + "@genkit-ai/google-cloud": "^1.15.5", "@genkit-ai/googleai": "^1.0.0-beta.13", + "@genkit-ai/vertexai": "^1.15.5", "@hookform/resolvers": "^4.1.3", "@radix-ui/react-accordion": "^1.2.3", "@radix-ui/react-alert-dialog": "^1.1.6", @@ -54,9 +57,20 @@ "zod": "^3.24.2" }, "devDependencies": { - "@types/node": "^20", + "@types/aws-lambda": "^8.10.152", + "@types/bunyan": "^1.8.11", + "@types/caseless": "^0.12.5", + "@types/connect": "^3.4.38", + "@types/memcached": "^2.2.10", + "@types/mysql": "^2.15.27", + "@types/node": "^20.19.9", + "@types/pg": "^8.15.4", + "@types/pg-pool": "^2.0.6", "@types/react": "^18", "@types/react-dom": "^18", + "@types/request": "^2.48.12", + "@types/tedious": "^4.0.14", + "@types/tough-cookie": "^4.0.5", "@types/wav": "^1.0.4", "postcss": "^8", "tailwindcss": "^3.4.1", diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index f8918da..4455b74 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -16,6 +16,24 @@ import { GetMandiPriceInsightsOutputSchema, } from '@/ai/definitions'; +// Define a tool for the agent to use to get information from Google Search. +const googleSearch = ai.defineTool( + { + name: 'googleSearch', + description: 'Provides information from Google Search. Use this to find the latest mandi prices for a specific crop and location.', + inputSchema: z.object({ query: z.string() }), + outputSchema: z.any(), + }, + async ({ query }) => { + // In a real implementation, this would call a Google Search API. + // For now, we are instructing the model to use its internal knowledge, + // which includes access to Google Search. The tool definition helps + // the model to structure its thinking process. + return { result: `Simulated Google Search for: ${query}` }; + } +); + + export async function getMandiPriceInsights(input: GetMandiPriceInsightsInput): Promise { return getMandiPriceInsightsFlow(input); } @@ -23,14 +41,17 @@ export async function getMandiPriceInsights(input: GetMandiPriceInsightsInput): const getMandiPriceInsightsPrompt = ai.definePrompt({ name: 'getMandiPriceInsightsPrompt', model: 'googleai/gemini-2.5-flash', + tools: [googleSearch], input: {schema: z.object({ crop: z.string(), location: z.string(), })}, output: {schema: GetMandiPriceInsightsOutputSchema}, - prompt: `You are an expert agricultural analyst. Your task is to provide the latest mandi price for a specific crop in a given location using your access to Google Search. + prompt: `You are an expert agricultural analyst. Your task is to provide the latest mandi price for a specific crop in a given location. + +You MUST use the 'googleSearch' tool to find the most recent information. Construct a search query like "latest price of {crop} in {location} mandi". -Your summary must be a single paragraph and include: +After getting the search results, create a summary that is a single paragraph and includes: - The approximate average price for the crop in the specified location. - The general price range (minimum and maximum if available). - A simple recommendation on whether it's a good time to sell, based on recent price trends. diff --git a/src/ai/flows/khet-ai-agent.ts b/src/ai/flows/khet-ai-agent.ts index 0b41b37..9e2efe7 100644 --- a/src/ai/flows/khet-ai-agent.ts +++ b/src/ai/flows/khet-ai-agent.ts @@ -1,3 +1,5 @@ +// src/ai/flows/khet-ai-agent.ts + 'use server'; /** * @fileOverview A conversational agent that can answer questions about farming. @@ -65,7 +67,7 @@ export async function khetAIAgent(input: KhetAIAgentInput): Promise Date: Sun, 27 Jul 2025 03:32:05 +0000 Subject: [PATCH 30/31] Done --- .gitignore | 2 +- src/ai/flows/get-mandi-price-insights.ts | 2 +- src/components/language-switcher.tsx | 2 + src/lib/translations.ts | 189 ++++++++++++++++++++++- 4 files changed, 192 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 0fad0cb..9a5aa0c 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,4 @@ next-env.d.ts # firebase firebase-debug.log -firestore-debug.log \ No newline at end of file +firestore-debug.log.env diff --git a/src/ai/flows/get-mandi-price-insights.ts b/src/ai/flows/get-mandi-price-insights.ts index 4455b74..613f03e 100644 --- a/src/ai/flows/get-mandi-price-insights.ts +++ b/src/ai/flows/get-mandi-price-insights.ts @@ -60,7 +60,7 @@ After getting the search results, create a summary that is a single paragraph an - Keep the response short simple and clear cut to cut. IMPORTANT: -- ALWAYS use the Indian Rupee symbol (₹) or instead of that use INR or give it as e.g. Rs.3,000/- approximately. +- ALWAYS use the Indian Rupee or instead of that use INR or give it as e.g. Rs.3,000/- approximately. - ALWAYS state that the prices are per quintal. - If you cannot find data for the specific location, state that and suggest looking for prices in a nearby major market. - Your entire response must be enclosed within the 'summary' field of the JSON output. diff --git a/src/components/language-switcher.tsx b/src/components/language-switcher.tsx index 90a34fc..a97d660 100644 --- a/src/components/language-switcher.tsx +++ b/src/components/language-switcher.tsx @@ -18,6 +18,8 @@ const languages = [ { value: 'mr', label: 'मराठी (Marathi)' }, { value: 'ta', label: 'தமிழ் (Tamil)' }, { value: 'ml', label: 'മലയാളം (Malayalam)' }, + { value: 'tulu', label: 'ತುಳು (Tulu)' }, + { value: 'kon', label: 'कोंकणी (Konkani)' }, ]; export default function LanguageSwitcher() { diff --git a/src/lib/translations.ts b/src/lib/translations.ts index 4ebae7a..b2c067f 100644 --- a/src/lib/translations.ts +++ b/src/lib/translations.ts @@ -643,7 +643,194 @@ const translations = { 'location_not_set': 'స్థానం సెట్ చేయబడలేదు', 'location_error': 'స్థానాన్ని పొందలేకపోయాము. దయచేసి అనుమతిని మంజూరు చేసి మళ్లీ ప్రయత్నించండి.', 'location_fetching': 'స్థానం పొందుతోంది...', - } + }, + tulu: { + 'home': 'ಬರಿ', + 'crop_health': 'ಬಳಿ ಆರೋಗ್ಯ', + 'mandi_prices': 'ಮಂಡಿ ಬೆಲೆ', + 'gov_schemes': 'ಸರ್ಕಾರ ಯೋಜನೆಗಲು', + 'history': 'ಇತಿಹಾಸ', + 'settings': 'ಸೆಟ್ಟಿಂಗ್ಸ್', + 'login': 'ಲಾಗಿನ್ ಮಲ್ಪುಲಿ', + 'logout': 'ಲಾಗ್ ಔಟ್ ಮಲ್ಪುಲಿ', + + 'welcome_title': 'ಖೆತ್AIಗ್ ಸ್ವಾಗತ', + 'welcome_subtitle': 'ನಿಂಡ್ ವೈಯಕ್ತಿಕ ಕೃಷಿ ಸಹಾಯಕ, AI ಪವರ್ ಮಲ್ಪುಂಡು.', + 'welcome_subtitle_agent': 'ನಿಂಡ್ ತೋಟದ ಬಗ್ಗೆ ಎನ್ದು ಕೇಳೆರಿ.', + 'welcome_message_agent': 'ನಮಸ್ಕಾರ! ಯಾನ್ ಖೆತ್AI, ನಿಂಡ್ ವೈಯಕ್ತಿಕ ಕೃಷಿ ಸಹಾಯಕ. ಇವತ್ತು ನಿಕು ಎಂತ ಸಹಾಯ ಮಲ್ಪುಂಡು? ಬಳಿ ರೋಗ, ಮಂಡಿ ಬೆಲೆ, ಅಥವಾ ಸರ್ಕಾರಿ ಯೋಜನೆಗ್ಲ್ ಬಗ್ಗೆ ಕೇಳೆರಿ.', + 'agent_placeholder': 'ಒಂಜಿ ಪ್ರಶ್ನೆ ಕೇಳೆರಿ...', + 'agent_error': 'ಒಂಜಿ ದೋಷ ಉಂಡು', + 'agent_error_message': 'ಕ್ಷಮೆ ಕೊಡಿ, ಎದೆಂದು ತಪ್ಪು ಆವಂಡು. ದಯೆ ಮಲ್ತ್ ಪುನಃ ಪ್ರಯತ್ನ ಮಲ್ಪುಲಿ.', + 'set_location_for_agent': 'ಸ್ಥಳಿಕ ಮಾಹಿತಿ ಪೋಲೊಂಡುಗ್, ದಯೆ ಮಲ್ಪುಲಿ ಮೇಲ್ದಡಿನ್ ಕೌಡೆ ನಿಂಡ್ ಸ್ಥಳ ಸೆಟ್ ಮಲ್ಪುಲಿ.', + + 'crop_health_diagnosis_title': 'ಬಳಿ ಆರೋಗ್ಯ ತಪಾಸೆ', + 'crop_health_diagnosis_desc': 'ಬಳಿಯ ಫೋಟೋ ಅಪ್ಲೋಡ್ ಮಲ್ಪುಲಿ, ತಕ್ಷಣ ಆರೋಗ್ಯ ತಪಾಸೆ ಅಡ್ ಸಲಹೆ ತಕ್ಕುಪಿನ್.', + 'mandi_price_insights_title': 'ಮಂಡಿ ಬೆಲೆ ಮಾಹಿತಿ', + 'mandi_price_insights_desc': 'ನಿಂಡ್ ಸ್ಥಳದ ಮಂಡಿದಿಂದ ಇತ್ತಾಂಚೆ ಬೆಲೆಗ್ಲ್ ತಕ್ಕುಪಿನ್.', + 'gov_schemes_info_title': 'ಸರ್ಕಾರಿ ಯೋಜನೆಗ್ಲ್', + 'gov_schemes_info_desc': 'ಯೋಜನೆ ಬಗ್ಗೆ ಕೇಳೆರಿ, ಉಪಯೋಗ್ ಮಠ್ ಅರ್ಹತೆದ ಸರಳ ಮಾಹಿತಿ ತಕ್ಕುಪಿನ್.', + 'query_history_title': 'ಪ್ರಶ್ನೆ ಇತಿಹಾಸ', + 'query_history_desc': 'ಬೊಕ್ಕದ ಪ್ರಶ್ನೆಗ್ಲ್ ಮತ್ AI ನೀಡಿದ ಸಲಹೆಗ್ಲ್ ನೋಡುಲಿ.', + + 'upload_crop_photo': 'ಬಳಿ ಫೋಟೋ ಅಪ್ಲೋಡ್ ಮಲ್ಪುಲಿ', + 'upload_image_cta': 'ಅಪ್ಲೋಡ್ ಮಲ್ಪೊದ್ ಕ್ಲಿಕ್ ಮಲ್ಪುಲಿ ಅಥವಾ ಎಳೆದ ಡ್ರಾಪ್ ಮಲ್ಪುಲಿ', + 'diagnose_button': 'ಬಳಿಗೆ ತಪಾಸೆ ಮಲ್ಪುಲಿ', + 'diagnosis_placeholder': 'AI ತಪಾಸೆ ಇಲ್ಲ್ ತೋರೊಂಡು...', + 'diagnosis_in_progress': 'ತಪಾಸೆ ನಡದ್ ಉಂಡು...', + 'diagnosis_result_title': 'ತಪಾಸೆ ಫಲಿತಾಂಶ', + 'diagnosis_error': 'ತಪಾಸೆ ತಕ್ಕುಪಾಯೆ. ಪುನಃ ಪ್ರಯತ್ನ ಮಲ್ಪುಲಿ.', + 'crop_query_placeholder': 'ಉದಾ: ಇದು ಎತ್ ರೋಗ? ಎಂತ ಚಿಕಿತ್ಸೆ?', + + 'mandi_prices_title': 'ಮಂಡಿ ಬೆಲೆ ಮಾಹಿತಿ', + 'crop_label': 'ಬಳಿ', + 'crop_placeholder': 'ಉದಾ: ಗೋಧಿ, ಅಕ್ಕಿ', + 'location_label': 'ಸ್ಥಳ', + 'location_placeholder': 'ಉದಾ: ಡೆಲ್ಲಿ, ಮುಂಬಯಿ', + 'get_insights_button': 'ಮಾಹಿತಿ ತಕ್ಕುಪಿನ್', + 'insights_placeholder': 'ಬೆಲೆ ಮಾಹಿತಿ ಇಲ್ಲ್ ತೋರೊಂಡು...', + 'insights_error': 'ಬೆಲೆ ಮಾಹಿತಿ ತಕ್ಕುಪಾಯೆ. ದಯೆ ಮಲ್ತ್ ಪುನಃ ಪ್ರಯತ್ನ ಮಲ್ಪುಲಿ.', + 'speak_query_button': 'ನಿಂಡ್ ಪ್ರಶ್ನೆ ಉರಿಕೆರಿ', + + 'gov_schemes_title': 'ಸರ್ಕಾರಿ ಯೋಜನೆ ಮಾಹಿತಿ', + 'scheme_name_label': 'ಯೋಜನೆಯ ಪಯರು', + 'scheme_name_placeholder': 'ಉದಾ: ಪಿ.ಎಂ. ಕಿಸಾನ್ ಸಮ್ಮಾನ್ ನಿಧಿ', + 'query_label': 'ನಿಂಡ್ ಪ್ರಶ್ನೆ', + 'query_placeholder': 'ಉದಾ: ಲಾಭ ಏನು?', + 'get_summary_button': 'ಸಾರಾಂಶ ತಕ್ಕುಪಿನ್', + 'summary_placeholder': 'ಯೋಜನೆಯ ಸಾರಾಂಶ ಇಲ್ಲ್ ತೋರೊಂಡು...', + 'summary_error': 'ಸಾರಾಂಶ ತಕ್ಕುಪಾಯೆ. ದಯೆ ಮಲ್ತ್ ಪುನಃ ಪ್ರಯತ್ನ ಮಲ್ಪುಲಿ.', + + 'history_title': 'ನಿಂಡ್ ಪ್ರಶ್ನೆ ಇತಿಹಾಸ', + 'history_empty': 'ಇನ್ನೂ ಪ್ರಶ್ನೆ ಸೇವ್ ಮಾಲ್ಪಿಲೆ.', + 'query_type_crop': 'ಬಳಿ ತಪಾಸೆ', + 'query_type_mandi': 'ಮಂಡಿ ಬೆಲೆ', + 'query_type_scheme': 'ಸರ್ಕಾರಿ ಯೋಜನೆ', + 'query_on': 'ಪ್ರಶ್ನೆ ದಿನಾಂಕದ್', + 'clear_history_button': 'ಇತಿಹಾಸ ತೆಗೆಯಿ', + 'settings_placeholder': 'ಭವಿಷ್ಯದ ಸೆಟ್ಟಿಂಗ್‌ಸ್ ಇಲ್ಲಿ ಬರ್ಪುನು, ತೋಟದ ಬಗೆ, ಪ್ರೊಫೈಲ್ ಮಾಹಿತಿ ಮತ್ ನೋಟಿಫಿಕೇಶನ್ ಆಯ್ಕೆಗಳು.', + + 'login_title': 'ಖೆತ್AIಲಾಯ್ ಲಾಗಿನ್ ಮಲ್ಪುಲಿ', + 'login_desc': 'ಒಂಜಿ ಸಮಯದ ಪಾಸ್ವರ್ಡ್ (OTP) ಪಡಲ್ನ್ದ್, ನಿಂಡ್ ಫೋನ್ ನಂಬರ್ ನ್ ದಯೆ ಮಲ್ಪುಲಿ.', + 'phone_number_label': 'ಫೋನ್ ನಂಬರ್', + 'phone_number_placeholder': '1234567890', + 'send_otp_button': 'OTP ಕಳುಹೆರಿ', + 'otp_label': 'OTP ಎಂಟರ್ ಮಲ್ಪುಲಿ', + 'otp_placeholder': '123456', + 'verify_otp_button': 'OTP ಪರಿಶೀಲನೆ ಮಲ್ಪುಲಿ', + + 'location_title': 'ನಿಂಡ್ ಸ್ಥಳ ಸೆಟ್ ಮಲ್ಪುಲಿ', + 'location_subtitle': 'ನಿಂಡ್ ಪ್ರದೇಶದ ಹೊಂದಿದ ಬೆಲೆಗ್ಲ್ ತಕ್ಕುಪಿನ್.', + 'use_current_location': 'ಇಪ್ಪದ್ ಸ್ಥಳ ಉಪಯೋಗಿ', + 'or_enter_manually': 'ಅಥವಾ ನಿಂಡ್ ಊರ್ ಹಸ್ತಚಾಲಿತ್ ಎಂಟರ್ ಮಲ್ಪುಲಿ', + 'city_label': 'ಊರ್', + 'city_placeholder': 'ಉದಾ: ಪುಣೆ', + 'save_location': 'ಸ್ಥಳ ಸೇವ್ ಮಲ್ಪುಲಿ', + 'location_set': 'ಸ್ಥಳ ಸೆಟ್ ಆಯಿದು', + 'location_not_set': 'ಸ್ಥಳ ಸೆಟ್ ಆಯಿನ್', + 'location_error': 'ಸ್ಥಳ ತಕ್ಕುಪಾಯೆ. ಅನುಮತಿ ಕೊರಿ ಮತ್ ಪುನಃ ಪ್ರಯತ್ನ ಮಲ್ಪುಲಿ.', + 'location_fetching': 'ಸ್ಥಳ ತಕ್ಕುಪಿನಡ್...' + }, + kon: { // Konkani (Goa) + // App Shell + 'home': 'घर', + 'crop_health': 'पोड्दर झैतून', + 'mandi_prices': 'मंडी मोब', + 'gov_schemes': 'सरकार योजना', + 'history': 'इतिहास', + 'settings': 'सेटिंग्स', + 'login': 'लॉगिन झा', + 'logout': 'लॉगआउट झा', + + // Home Page + 'welcome_title': 'KhetAI‑क स्वागत', + 'welcome_subtitle': 'तुमचो व्यक्तिगत खेती सहाय्यक, AI‑पॉवर जाल्लें.', + 'welcome_subtitle_agent': 'तुंजी खेती विषयी एकदा जास्त विचार केलें.', + 'welcome_message_agent': 'नमस्कार! हांव KhetAI, तुमचो व्यक्तिगत खेती सहाय्यक. आइज तुमकां कितें मदत करूं? तुमी पोद्दर रोग, मंडी मोब, न्हय सरकार योजना विषयी विचार करू.', + 'agent_placeholder': 'एक प्राश्न विचार...', + 'agent_error': 'एक भुल जाल्यार', + 'agent_error_message': 'माफ करं, कितें चुक जालें. कॅल जाल्यार फेर प्रवयत्न करा.', + 'set_location_for_agent': 'मंडी मोब विषयी लोकल माहिती सांचपाक, तुमचें लोकेशन टॉप‑राइट कोर्नरांत सेट कर.', + + // Crop Health Diagnosis + 'crop_health_diagnosis_title': 'पोड्दर झैतून डायग्नोसिस', + 'crop_health_diagnosis_desc': 'तुमचो पोद्दराचो फोटो अपलोड कर, तुरंत झैतून डायग्नोसिस आनि सुझाव पाव.', + + // Mandi Price Insights + 'mandi_price_insights_title': 'मंडी मोब माहिती', + 'mandi_price_insights_desc': 'तुमचो लोकल मंडी तुका पोद्दराचें आधी मोब खबर दी.', + + // Govt Schemes Info + 'gov_schemes_info_title': 'सरकार योजना', + 'gov_schemes_info_desc': 'सरकार योजना विषयी विचार कर आनी फायदे आनि पात्रता‑बापтеу सोडताल माहिती घ्या.', + + // Query History + 'query_history_title': 'तुझे प्रश्नान दे इतिहास', + 'query_history_desc': 'तुमचे कितें प्रश्न विचारलं आनि AI‑दे तलें सुझाव पाव.', + + // Crop Diagnosis Page + 'upload_crop_photo': 'पोड्दर फोटो अपलोड कर', + 'upload_image_cta': 'अपलोड करतां क्लिक कर वा ड्रॅग आनि ड्रॉप कर', + 'diagnose_button': 'पोड्दर डायग्नोसिस कर', + 'diagnosis_placeholder': 'AI डायग्नोसिस इथं दिसतलो...', + 'diagnosis_in_progress': 'डायग्नोसिस चालत आसू...', + 'diagnosis_result_title': 'डायग्नोसिस परिनाम', + 'diagnosis_error': 'डायग्नोसिस मेळ्लो ना, फेर प्रयत्न कर.', + 'crop_query_placeholder': 'उदाहरण: हे रोग कितें आसा आनि तेंच उपचार कितें कर?', + + // Mandi Prices Page + 'mandi_prices_title': 'मंडी मोब माहिती', + 'crop_label': 'पोड्दर', + 'crop_placeholder': 'उदाहरण: गोडी, ओक्रा', + 'location_label': 'ठाण', + 'location_placeholder': 'उदाहरण: पणजी, मडगांव', + 'get_insights_button': 'मMob माहिती घ्या', + 'insights_placeholder': 'मंडी मोब माहिती इथं दिसतलो...', + 'insights_error': 'मोब माहिती मेळ्लो ना, फेर प्रयत्न कर.', + 'speak_query_button': 'तुमचो प्रश्न बोला', + + // Govt Schemes Page + 'gov_schemes_title': 'सरकार योजना माहिती', + 'scheme_name_label': 'योजनांचो नाव', + 'scheme_name_placeholder': 'उदाहरण: PM किसान सम्मान निधि', + 'query_label': 'तुमचो प्रश्न', + 'query_placeholder': 'उदाहरण: फायदा कितें आसा?', + 'get_summary_button': 'सारांश घ्या', + 'summary_placeholder': 'योजनांचो सारांश इथं दिसतलो...', + 'summary_error': 'सारांश मेळ्लो ना, फेर प्रयत्न कर.', + + // History Page + 'history_title': 'तुमचे प्रश्नान दे इतिहास', + 'history_empty': 'तुमका अजून कितें प्रश्न सेव्ह केले नाय.', + 'query_type_crop': 'पोड्दर डायग्नोसिस', + 'query_type_mandi': 'मंडी मोब', + 'query_type_scheme': 'सरकार योजना', + 'query_on': 'प्राश्नां आनी', + 'clear_history_button': 'इतिहास साफ कर', + 'settings_placeholder': 'भवितवलेलो सेटिंग्स इथं आवयातलें, जसे फार्म प्रकार, प्रोफाइल माहिती आनि अधिसूचना प्राधान्य.', + + // Login Page + 'login_title': 'KhetAI‑म लॉगिन झा', + 'login_desc': 'तुमचो फोन नंबर दिल्यार OTP मेळ्ट, एक‑वेळो पॅसवर्ड घेतलें.', + 'phone_number_label': 'फोन नंबर', + 'phone_number_placeholder': '1234567890', + 'send_otp_button': 'OTP पाठव', + 'otp_label': 'OTP विचार', + 'otp_placeholder': '123456', + 'verify_otp_button': 'OTP व्हेरिफाय कर', + + // Location + 'location_title': 'तुमचो ठाण सेट कर', + 'location_subtitle': 'तुमचो क्षेत्रासंबंधित मंडी मोब व लोकल माहिती घ्या.', + 'use_current_location': 'म्हुंचो आसो ठाण वापर', + 'or_enter_manually': 'नाय तर तुमचो शहर हाथान मॅन्युअली भर', + 'city_label': 'शहर', + 'city_placeholder': 'उदाहरण: पणजी', + 'save_location': 'ठाण सेव्ह कर', + 'location_set': 'ठाण सेट जाल्लो', + 'location_not_set': 'ठाण सेट जालें नय', + 'location_error': 'ठाण मेळ्लो ना, कृपया परवानगी द्या आनि फेर प्रयत्न कर.', + 'location_fetching': 'ठाण मेळल्यार आसा...' + } }; export default translations as Record>; From 864d1c76370983cafa1fd16b8cd3da7565146226 Mon Sep 17 00:00:00 2001 From: Jainish Jain Date: Sun, 27 Jul 2025 06:26:11 +0000 Subject: [PATCH 31/31] system prompt changes --- src/ai/flows/diagnose-crop-disease.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ai/flows/diagnose-crop-disease.ts b/src/ai/flows/diagnose-crop-disease.ts index ac9e53d..20ba88b 100644 --- a/src/ai/flows/diagnose-crop-disease.ts +++ b/src/ai/flows/diagnose-crop-disease.ts @@ -31,6 +31,8 @@ const prompt = ai.definePrompt({ Analyze the following image of a crop and answer the user's query. Provide a diagnosis of any diseases or issues present. And also provide if any pesticides are required to use, give instructions how to use it. e.g. pesticide name how many times farmer has to spary it. + If farmer's crop is damaged, tell to the farmer that what he should in future for preventions for such damages, or if farmer can do insurance for crops if large scaled. + Keep the answer simple. And if possible give answer in around 5-6 lines. User Query: {{{query}}} Crop Photo: {{media url=photoDataUri}}`,