From 6f1fd31b52d11b3307850dc3955cf5c18d318716 Mon Sep 17 00:00:00 2001 From: "ryota.sasazawa" Date: Tue, 4 Mar 2025 14:07:11 +0900 Subject: [PATCH 01/10] =?UTF-8?q?=F0=9F=94=A7=20Fix=20Supabase=20CLI=20pul?= =?UTF-8?q?l=20command=20in=20package.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/apps/migration-web/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/apps/migration-web/package.json b/frontend/apps/migration-web/package.json index 2891330a2..1e513e12a 100644 --- a/frontend/apps/migration-web/package.json +++ b/frontend/apps/migration-web/package.json @@ -32,7 +32,7 @@ "lint": "pnpm run '/^lint:.*/'", "lint:biome": "biome check .", "start": "next start", - "supabase:pull": "pnpm supabase pull", + "supabase:pull": "pnpm supabase db pull", "supabase:reset": "pnpm supabase db reset", "supabase:start": "pnpm supabase start", "supabase:stop": "pnpm supabase stop" From 0dfd612e31228f56957b1896f6b3548978628811 Mon Sep 17 00:00:00 2001 From: "ryota.sasazawa" Date: Tue, 4 Mar 2025 14:07:34 +0900 Subject: [PATCH 02/10] =?UTF-8?q?=F0=9F=94=A7=20Add=20documents=20table=20?= =?UTF-8?q?with=20vector=20embeddings=20and=20matching=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20250304050615_remote_schema.sql | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 frontend/apps/migration-web/supabase/migrations/20250304050615_remote_schema.sql diff --git a/frontend/apps/migration-web/supabase/migrations/20250304050615_remote_schema.sql b/frontend/apps/migration-web/supabase/migrations/20250304050615_remote_schema.sql new file mode 100644 index 000000000..11e09c0e3 --- /dev/null +++ b/frontend/apps/migration-web/supabase/migrations/20250304050615_remote_schema.sql @@ -0,0 +1,80 @@ +create extension if not exists "vector" with schema "public" version '0.8.0'; + +create sequence "public"."documents_id_seq"; + +create table "public"."documents" ( + "id" bigint not null default nextval('documents_id_seq'::regclass), + "content" text, + "metadata" jsonb, + "embedding" vector(1536) +); + +alter sequence "public"."documents_id_seq" owned by "public"."documents"."id"; + +CREATE UNIQUE INDEX documents_pkey ON public.documents USING btree (id); + +alter table "public"."documents" add constraint "documents_pkey" PRIMARY KEY using index "documents_pkey"; + +set check_function_bodies = off; + +CREATE OR REPLACE FUNCTION public.match_documents(query_embedding vector, match_count integer DEFAULT NULL::integer, filter jsonb DEFAULT '{}'::jsonb) + RETURNS TABLE(id bigint, content text, metadata jsonb, similarity double precision) + LANGUAGE plpgsql +AS $function$ +#variable_conflict use_column +begin + return query + select + id, + content, + metadata, + 1 - (documents.embedding <=> query_embedding) as similarity + from documents + where metadata @> filter + order by documents.embedding <=> query_embedding + limit match_count; +end; +$function$ +; + +grant delete on table "public"."documents" to "anon"; + +grant insert on table "public"."documents" to "anon"; + +grant references on table "public"."documents" to "anon"; + +grant select on table "public"."documents" to "anon"; + +grant trigger on table "public"."documents" to "anon"; + +grant truncate on table "public"."documents" to "anon"; + +grant update on table "public"."documents" to "anon"; + +grant delete on table "public"."documents" to "authenticated"; + +grant insert on table "public"."documents" to "authenticated"; + +grant references on table "public"."documents" to "authenticated"; + +grant select on table "public"."documents" to "authenticated"; + +grant trigger on table "public"."documents" to "authenticated"; + +grant truncate on table "public"."documents" to "authenticated"; + +grant update on table "public"."documents" to "authenticated"; + +grant delete on table "public"."documents" to "service_role"; + +grant insert on table "public"."documents" to "service_role"; + +grant references on table "public"."documents" to "service_role"; + +grant select on table "public"."documents" to "service_role"; + +grant trigger on table "public"."documents" to "service_role"; + +grant truncate on table "public"."documents" to "service_role"; + +grant update on table "public"."documents" to "service_role"; From b85c609cc67d6c47d33c4e59959cb664b3452f12 Mon Sep 17 00:00:00 2001 From: "ryota.sasazawa" Date: Tue, 4 Mar 2025 15:35:07 +0900 Subject: [PATCH 03/10] =?UTF-8?q?=E2=9C=A8=20Add=20URL=20content=20vectori?= =?UTF-8?q?zation=20feature=20to=20migration=20web=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/apps/migration-web/.env.template | 2 + .../migration-web/app/api/vectorize/route.ts | 37 + .../apps/migration-web/app/review/page.tsx | 2 + .../components/UrlVectorizer.module.css | 74 ++ .../components/UrlVectorizer.tsx | 92 ++ frontend/apps/migration-web/lib/index.ts | 2 + frontend/apps/migration-web/lib/supabase.ts | 6 + .../apps/migration-web/lib/vectorization.ts | 65 + frontend/apps/migration-web/package.json | 4 +- pnpm-lock.yaml | 1066 ++++++++++++++--- 10 files changed, 1193 insertions(+), 157 deletions(-) create mode 100644 frontend/apps/migration-web/app/api/vectorize/route.ts create mode 100644 frontend/apps/migration-web/components/UrlVectorizer.module.css create mode 100644 frontend/apps/migration-web/components/UrlVectorizer.tsx create mode 100644 frontend/apps/migration-web/lib/supabase.ts create mode 100644 frontend/apps/migration-web/lib/vectorization.ts diff --git a/frontend/apps/migration-web/.env.template b/frontend/apps/migration-web/.env.template index c8fadcb44..94e5abad4 100644 --- a/frontend/apps/migration-web/.env.template +++ b/frontend/apps/migration-web/.env.template @@ -2,3 +2,5 @@ OPENAI_API_KEY="YOUR_API_KEY" LANGFUSE_PUBLIC_KEY="" LANGFUSE_SECRET_KEY="" LANGFUSE_BASE_URL="https://cloud.langfuse.com" +SUPABASE_URL="YOUR_SUPABASE_URL" +SUPABASE_SERVICE_ROLE_KEY="YOUR_SERVICE_ROLE_KEY" diff --git a/frontend/apps/migration-web/app/api/vectorize/route.ts b/frontend/apps/migration-web/app/api/vectorize/route.ts new file mode 100644 index 000000000..ed294c5fa --- /dev/null +++ b/frontend/apps/migration-web/app/api/vectorize/route.ts @@ -0,0 +1,37 @@ +import { vectorizeUrl } from '@/lib/vectorization' +import type { NextRequest } from 'next/server' + +export const runtime = 'edge' + +export async function POST(req: NextRequest) { + try { + const { url } = await req.json() + + if (!url || typeof url !== 'string') { + return new Response( + JSON.stringify({ + error: 'URL is not provided or is in an invalid format', + }), + { status: 400 }, + ) + } + + const result = await vectorizeUrl(url) + + return new Response( + JSON.stringify({ + success: true, + message: 'Content vectorized and stored successfully', + id: result.documentId, + chunkCount: result.chunkCount, + }), + { status: 200 }, + ) + } catch (error) { + console.error('Error in vectorize API:', error) + return new Response( + JSON.stringify({ error: 'An error occurred while processing the URL' }), + { status: 500 }, + ) + } +} diff --git a/frontend/apps/migration-web/app/review/page.tsx b/frontend/apps/migration-web/app/review/page.tsx index 3199e8d07..99de60cfa 100644 --- a/frontend/apps/migration-web/app/review/page.tsx +++ b/frontend/apps/migration-web/app/review/page.tsx @@ -1,10 +1,12 @@ import { ReviewWindow } from '@/components/ReviewWindow' +import { UrlVectorizer } from '@/components/UrlVectorizer' import styles from './page.module.css' export default function ReviewPage() { return (

Database Schema Review

+ { + const [url, setUrl] = useState('') + const [isLoading, setIsLoading] = useState(false) + const [error, setError] = useState(null) + const [success, setSuccess] = useState(null) + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault() + + if (!url.trim()) { + setError('Please enter a URL') + return + } + + if (!url.startsWith('http://') && !url.startsWith('https://')) { + setError('Please enter a valid URL (must start with http:// or https://)') + return + } + + setIsLoading(true) + setError(null) + setSuccess(null) + + try { + const response = await fetch(`/${endpoint}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ url }), + }) + + const data = await response.json() + + if (!response.ok) { + throw new Error(data.error || `Error: ${response.statusText}`) + } + + setSuccess( + `URL content successfully vectorized and stored. ID: ${data.id}`, + ) + setUrl('') + } catch (err) { + console.error('Error during vectorization:', err) + setError( + err instanceof Error + ? err.message + : 'An error occurred while processing the URL', + ) + } finally { + setIsLoading(false) + } + } + + return ( +
+

URL Content Vectorization

+
+
+ setUrl(e.target.value)} + placeholder="https://example.com" + className={styles.input} + disabled={isLoading} + /> + +
+ + {error &&
{error}
} + {success &&
{success}
} + +

+ Enter a URL to fetch its content, vectorize it, and store it in the + database. +

+
+
+ ) +} diff --git a/frontend/apps/migration-web/lib/index.ts b/frontend/apps/migration-web/lib/index.ts index 57dfbdbe7..94e49f418 100644 --- a/frontend/apps/migration-web/lib/index.ts +++ b/frontend/apps/migration-web/lib/index.ts @@ -1 +1,3 @@ export * from './langfuse' +export * from './supabase' +export * from './vectorization' diff --git a/frontend/apps/migration-web/lib/supabase.ts b/frontend/apps/migration-web/lib/supabase.ts new file mode 100644 index 000000000..dae7d9429 --- /dev/null +++ b/frontend/apps/migration-web/lib/supabase.ts @@ -0,0 +1,6 @@ +import { createClient } from '@supabase/supabase-js' + +export const supabaseClient = createClient( + process.env.SUPABASE_URL || '', + process.env.SUPABASE_SERVICE_ROLE_KEY || '', +) diff --git a/frontend/apps/migration-web/lib/vectorization.ts b/frontend/apps/migration-web/lib/vectorization.ts new file mode 100644 index 000000000..f89f9d768 --- /dev/null +++ b/frontend/apps/migration-web/lib/vectorization.ts @@ -0,0 +1,65 @@ +import { CheerioWebBaseLoader } from '@langchain/community/document_loaders/web/cheerio' +import { HtmlToTextTransformer } from '@langchain/community/document_transformers/html_to_text' +import { SupabaseVectorStore } from '@langchain/community/vectorstores/supabase' +import { OpenAIEmbeddings } from '@langchain/openai' +import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter' +import { supabaseClient } from '.' + +const embeddings = new OpenAIEmbeddings({ + modelName: 'text-embedding-3-small', +}) + +const vectorStore = new SupabaseVectorStore(embeddings, { + client: supabaseClient, + tableName: 'documents', + queryName: 'match_documents', +}) + +export type VectorizationResult = { + documentId?: string + chunkCount: number +} + +export async function vectorizeUrl(url: string): Promise { + const loader = new CheerioWebBaseLoader(url) + const docs = await loader.load() + + const transformer = new HtmlToTextTransformer() + const sequence = + RecursiveCharacterTextSplitter.fromLanguage('html').pipe(transformer) + const newDocuments = await sequence.invoke(docs) + const pages = newDocuments.map((doc) => doc.pageContent) + + const extractedText = await Promise.all( + pages.map(async (page) => { + return page.split('\n').join(' ') + }), + ) + + const extractedDocs = extractedText.map((text) => ({ + pageContent: text, + metadata: {}, + })) + + const splitter = new RecursiveCharacterTextSplitter({ + chunkSize: 300, + chunkOverlap: 0, + }) + + const chunks = await splitter.splitDocuments(extractedDocs) + + for (const chunk of chunks) { + chunk.metadata = { + ...chunk.metadata, + source: url, + type: 'webpage', + } + } + + const ids = await vectorStore.addDocuments(chunks) + + return { + documentId: ids[0], + chunkCount: chunks.length, + } +} diff --git a/frontend/apps/migration-web/package.json b/frontend/apps/migration-web/package.json index 1e513e12a..81c09a6a2 100644 --- a/frontend/apps/migration-web/package.json +++ b/frontend/apps/migration-web/package.json @@ -3,8 +3,11 @@ "private": true, "version": "0.1.0", "dependencies": { + "@langchain/community": "0.3.33", "@langchain/core": "0.3.42", "@langchain/openai": "0.4.4", + "@supabase/supabase-js": "2.49.1", + "html-to-text": "9.0.5", "langchain": "0.3.19", "langfuse-langchain": "3.36.0", "next": "15.1.2", @@ -16,7 +19,6 @@ "@types/node": "22.9.0", "@types/react": "18", "@types/react-dom": "18", - "supabase": "2.15.8", "typed-css-modules": "0.9.1", "typescript": "5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 35dbe8f70..c4862f42e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -178,18 +178,27 @@ importers: frontend/apps/migration-web: dependencies: + '@langchain/community': + specifier: 0.3.33 + version: 0.3.33(@browserbasehq/sdk@2.3.0)(@browserbasehq/stagehand@1.13.1(@playwright/test@1.50.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.5.1(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1))))(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(@supabase/supabase-js@2.49.1)(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(html-to-text@9.0.5)(ibm-cloud-sdk-core@5.1.3)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(playwright@1.50.1)(ws@8.18.0) '@langchain/core': specifier: 0.3.42 version: 0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)) '@langchain/openai': specifier: 0.4.4 version: 0.4.4(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(ws@8.18.0) + '@supabase/supabase-js': + specifier: 2.49.1 + version: 2.49.1 + html-to-text: + specifier: 9.0.5 + version: 9.0.5 langchain: specifier: 0.3.19 - version: 0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0) + version: 0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0) langfuse-langchain: specifier: 3.36.0 - version: 3.36.0(langchain@0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0)) + version: 3.36.0(langchain@0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0)) next: specifier: 15.1.2 version: 15.1.2(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.50.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -212,9 +221,6 @@ importers: '@types/react-dom': specifier: '18' version: 18.3.1 - supabase: - specifier: 2.15.8 - version: 2.15.8 typed-css-modules: specifier: 0.9.1 version: 0.9.1 @@ -510,6 +516,9 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@anthropic-ai/sdk@0.27.3': + resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -690,6 +699,18 @@ packages: cpu: [x64] os: [win32] + '@browserbasehq/sdk@2.3.0': + resolution: {integrity: sha512-H2nu46C6ydWgHY+7yqaP8qpfRJMJFVGxVIgsuHe1cx9HkfJHqzkuIqaK/k8mU4ZeavQgV5ZrJa0UX6MDGYiT4w==} + + '@browserbasehq/stagehand@1.13.1': + resolution: {integrity: sha512-sty9bDiuuQJDOS+/uBfXpwYQY+mhFyqi6uT5wSOrazagZ5s8tgk3ryCIheB/BGS5iisc6ivAsKe9aC9n5WBTAg==} + peerDependencies: + '@playwright/test': ^1.42.1 + deepmerge: ^4.3.1 + dotenv: ^16.4.5 + openai: ^4.62.1 + zod: ^3.23.8 + '@bundled-es-modules/deepmerge@4.3.1': resolution: {integrity: sha512-Rk453EklPUPC3NRWc3VUNI/SSUjdBaFoaQvFRmNBNtMHVtOFD5AntiWg5kEE1hqcPqedYFDzxE3ZcMYPcA195w==} @@ -1247,6 +1268,10 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@ibm-cloud/watsonx-ai@1.5.1': + resolution: {integrity: sha512-7srn4TgknDWcql63OXLNsZnqVbsqHzFVLTihDPI/UyufDxQbGdsYbdc/aEua1qW9HYDoAmEerXuYuohsMwthjw==} + engines: {node: '>=18.0.0'} + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1436,10 +1461,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1486,6 +1507,380 @@ packages: peerDependencies: tslib: '2' + '@langchain/community@0.3.33': + resolution: {integrity: sha512-BtgfvyPvb/HYUWLa5YXoDVMY+8pkZvaZzwp5NSebstVKsitsjuG/pwzZ7gDQO1c8LJZlxAeYyAwwQBI87ibRRg==} + engines: {node: '>=18'} + peerDependencies: + '@arcjet/redact': ^v1.0.0-alpha.23 + '@aws-crypto/sha256-js': ^5.0.0 + '@aws-sdk/client-bedrock-agent-runtime': ^3.749.0 + '@aws-sdk/client-bedrock-runtime': ^3.749.0 + '@aws-sdk/client-dynamodb': ^3.749.0 + '@aws-sdk/client-kendra': ^3.749.0 + '@aws-sdk/client-lambda': ^3.749.0 + '@aws-sdk/client-s3': ^3.749.0 + '@aws-sdk/client-sagemaker-runtime': ^3.749.0 + '@aws-sdk/client-sfn': ^3.749.0 + '@aws-sdk/credential-provider-node': ^3.388.0 + '@aws-sdk/dsql-signer': '*' + '@azure/search-documents': ^12.0.0 + '@azure/storage-blob': ^12.15.0 + '@browserbasehq/sdk': '*' + '@browserbasehq/stagehand': ^1.0.0 + '@clickhouse/client': ^0.2.5 + '@cloudflare/ai': '*' + '@datastax/astra-db-ts': ^1.0.0 + '@elastic/elasticsearch': ^8.4.0 + '@getmetal/metal-sdk': '*' + '@getzep/zep-cloud': ^1.0.6 + '@getzep/zep-js': ^0.9.0 + '@gomomento/sdk': ^1.51.1 + '@gomomento/sdk-core': ^1.51.1 + '@google-ai/generativelanguage': '*' + '@google-cloud/storage': ^6.10.1 || ^7.7.0 + '@gradientai/nodejs-sdk': ^1.2.0 + '@huggingface/inference': ^2.6.4 + '@huggingface/transformers': ^3.2.3 + '@ibm-cloud/watsonx-ai': '*' + '@lancedb/lancedb': ^0.12.0 + '@langchain/core': '>=0.2.21 <0.4.0' + '@layerup/layerup-security': ^1.5.12 + '@libsql/client': ^0.14.0 + '@mendable/firecrawl-js': ^1.4.3 + '@mlc-ai/web-llm': '*' + '@mozilla/readability': '*' + '@neondatabase/serverless': '*' + '@notionhq/client': ^2.2.10 + '@opensearch-project/opensearch': '*' + '@pinecone-database/pinecone': '*' + '@planetscale/database': ^1.8.0 + '@premai/prem-sdk': ^0.3.25 + '@qdrant/js-client-rest': ^1.8.2 + '@raycast/api': ^1.55.2 + '@rockset/client': ^0.9.1 + '@smithy/eventstream-codec': ^2.0.5 + '@smithy/protocol-http': ^3.0.6 + '@smithy/signature-v4': ^2.0.10 + '@smithy/util-utf8': ^2.0.0 + '@spider-cloud/spider-client': ^0.0.21 + '@supabase/supabase-js': ^2.45.0 + '@tensorflow-models/universal-sentence-encoder': '*' + '@tensorflow/tfjs-converter': '*' + '@tensorflow/tfjs-core': '*' + '@upstash/ratelimit': ^1.1.3 || ^2.0.3 + '@upstash/redis': ^1.20.6 + '@upstash/vector': ^1.1.1 + '@vercel/kv': '*' + '@vercel/postgres': '*' + '@writerai/writer-sdk': ^0.40.2 + '@xata.io/client': ^0.28.0 + '@zilliz/milvus2-sdk-node': '>=2.3.5' + apify-client: ^2.7.1 + assemblyai: ^4.6.0 + better-sqlite3: '>=9.4.0 <12.0.0' + cassandra-driver: ^4.7.2 + cborg: ^4.1.1 + cheerio: ^1.0.0-rc.12 + chromadb: '*' + closevector-common: 0.1.3 + closevector-node: 0.1.6 + closevector-web: 0.1.6 + cohere-ai: '*' + convex: ^1.3.1 + crypto-js: ^4.2.0 + d3-dsv: ^2.0.0 + discord.js: ^14.14.1 + dria: ^0.0.3 + duck-duck-scrape: ^2.2.5 + epub2: ^3.0.1 + fast-xml-parser: '*' + firebase-admin: ^11.9.0 || ^12.0.0 + google-auth-library: '*' + googleapis: '*' + hnswlib-node: ^3.0.0 + html-to-text: ^9.0.5 + ibm-cloud-sdk-core: '*' + ignore: ^5.2.0 + interface-datastore: ^8.2.11 + ioredis: ^5.3.2 + it-all: ^3.0.4 + jsdom: '*' + jsonwebtoken: ^9.0.2 + llmonitor: ^0.5.9 + lodash: ^4.17.21 + lunary: ^0.7.10 + mammoth: ^1.6.0 + mongodb: '>=5.2.0' + mysql2: ^3.9.8 + neo4j-driver: '*' + notion-to-md: ^3.1.0 + officeparser: ^4.0.4 + openai: '*' + pdf-parse: 1.1.1 + pg: ^8.11.0 + pg-copy-streams: ^6.0.5 + pickleparser: ^0.2.1 + playwright: ^1.32.1 + portkey-ai: ^0.1.11 + puppeteer: '*' + pyodide: '>=0.24.1 <0.27.0' + redis: '*' + replicate: '*' + sonix-speech-recognition: ^2.1.1 + srt-parser-2: ^1.2.3 + typeorm: ^0.3.20 + typesense: ^1.5.3 + usearch: ^1.1.1 + voy-search: 0.6.2 + weaviate-ts-client: '*' + web-auth-library: ^1.0.3 + word-extractor: '*' + ws: ^8.14.2 + youtubei.js: '*' + peerDependenciesMeta: + '@arcjet/redact': + optional: true + '@aws-crypto/sha256-js': + optional: true + '@aws-sdk/client-bedrock-agent-runtime': + optional: true + '@aws-sdk/client-bedrock-runtime': + optional: true + '@aws-sdk/client-dynamodb': + optional: true + '@aws-sdk/client-kendra': + optional: true + '@aws-sdk/client-lambda': + optional: true + '@aws-sdk/client-s3': + optional: true + '@aws-sdk/client-sagemaker-runtime': + optional: true + '@aws-sdk/client-sfn': + optional: true + '@aws-sdk/credential-provider-node': + optional: true + '@aws-sdk/dsql-signer': + optional: true + '@azure/search-documents': + optional: true + '@azure/storage-blob': + optional: true + '@browserbasehq/sdk': + optional: true + '@clickhouse/client': + optional: true + '@cloudflare/ai': + optional: true + '@datastax/astra-db-ts': + optional: true + '@elastic/elasticsearch': + optional: true + '@getmetal/metal-sdk': + optional: true + '@getzep/zep-cloud': + optional: true + '@getzep/zep-js': + optional: true + '@gomomento/sdk': + optional: true + '@gomomento/sdk-core': + optional: true + '@google-ai/generativelanguage': + optional: true + '@google-cloud/storage': + optional: true + '@gradientai/nodejs-sdk': + optional: true + '@huggingface/inference': + optional: true + '@huggingface/transformers': + optional: true + '@lancedb/lancedb': + optional: true + '@layerup/layerup-security': + optional: true + '@libsql/client': + optional: true + '@mendable/firecrawl-js': + optional: true + '@mlc-ai/web-llm': + optional: true + '@mozilla/readability': + optional: true + '@neondatabase/serverless': + optional: true + '@notionhq/client': + optional: true + '@opensearch-project/opensearch': + optional: true + '@pinecone-database/pinecone': + optional: true + '@planetscale/database': + optional: true + '@premai/prem-sdk': + optional: true + '@qdrant/js-client-rest': + optional: true + '@raycast/api': + optional: true + '@rockset/client': + optional: true + '@smithy/eventstream-codec': + optional: true + '@smithy/protocol-http': + optional: true + '@smithy/signature-v4': + optional: true + '@smithy/util-utf8': + optional: true + '@spider-cloud/spider-client': + optional: true + '@supabase/supabase-js': + optional: true + '@tensorflow-models/universal-sentence-encoder': + optional: true + '@tensorflow/tfjs-converter': + optional: true + '@tensorflow/tfjs-core': + optional: true + '@upstash/ratelimit': + optional: true + '@upstash/redis': + optional: true + '@upstash/vector': + optional: true + '@vercel/kv': + optional: true + '@vercel/postgres': + optional: true + '@writerai/writer-sdk': + optional: true + '@xata.io/client': + optional: true + '@zilliz/milvus2-sdk-node': + optional: true + apify-client: + optional: true + assemblyai: + optional: true + better-sqlite3: + optional: true + cassandra-driver: + optional: true + cborg: + optional: true + cheerio: + optional: true + chromadb: + optional: true + closevector-common: + optional: true + closevector-node: + optional: true + closevector-web: + optional: true + cohere-ai: + optional: true + convex: + optional: true + crypto-js: + optional: true + d3-dsv: + optional: true + discord.js: + optional: true + dria: + optional: true + duck-duck-scrape: + optional: true + epub2: + optional: true + fast-xml-parser: + optional: true + firebase-admin: + optional: true + google-auth-library: + optional: true + googleapis: + optional: true + hnswlib-node: + optional: true + html-to-text: + optional: true + ignore: + optional: true + interface-datastore: + optional: true + ioredis: + optional: true + it-all: + optional: true + jsdom: + optional: true + jsonwebtoken: + optional: true + llmonitor: + optional: true + lodash: + optional: true + lunary: + optional: true + mammoth: + optional: true + mongodb: + optional: true + mysql2: + optional: true + neo4j-driver: + optional: true + notion-to-md: + optional: true + officeparser: + optional: true + pdf-parse: + optional: true + pg: + optional: true + pg-copy-streams: + optional: true + pickleparser: + optional: true + playwright: + optional: true + portkey-ai: + optional: true + puppeteer: + optional: true + pyodide: + optional: true + redis: + optional: true + replicate: + optional: true + sonix-speech-recognition: + optional: true + srt-parser-2: + optional: true + typeorm: + optional: true + typesense: + optional: true + usearch: + optional: true + voy-search: + optional: true + weaviate-ts-client: + optional: true + web-auth-library: + optional: true + word-extractor: + optional: true + ws: + optional: true + youtubei.js: + optional: true + '@langchain/core@0.3.42': resolution: {integrity: sha512-pT/jC5lqWK3YGDq8dQwgKoa6anqAhMtG1x5JbnrOj9NdaLeBbCKBDQ+/Ykzk3nZ8o+0UMsaXNZo7IVL83VVjHg==} engines: {node: '>=18'} @@ -2590,6 +2985,9 @@ packages: '@rushstack/eslint-patch@1.10.4': resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + '@selderee/plugin-htmlparser2@0.11.0': + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + '@sentry-internal/browser-utils@8.49.0': resolution: {integrity: sha512-XkPHHdFqsN7EPaB+QGUOEmpFqXiqP67t2rRZ1HG1UwJoe0PhJEKNy7b4+WRwmT7ODSt+PvFk1gNBlJBpThwH7Q==} engines: {node: '>=14.18'} @@ -2787,6 +3185,28 @@ packages: peerDependencies: storybook: ^8.3.4 + '@supabase/auth-js@2.68.0': + resolution: {integrity: sha512-odG7nb7aOmZPUXk6SwL2JchSsn36Ppx11i2yWMIc/meUO2B2HK9YwZHPK06utD9Ql9ke7JKDbwGin/8prHKxxQ==} + + '@supabase/functions-js@2.4.4': + resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} + + '@supabase/node-fetch@2.6.15': + resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} + engines: {node: 4.x || >=6.0.0} + + '@supabase/postgrest-js@1.19.2': + resolution: {integrity: sha512-MXRbk4wpwhWl9IN6rIY1mR8uZCCG4MZAEji942ve6nMwIqnBgBnZhZlON6zTTs6fgveMnoCILpZv1+K91jN+ow==} + + '@supabase/realtime-js@2.11.2': + resolution: {integrity: sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==} + + '@supabase/storage-js@2.7.1': + resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + + '@supabase/supabase-js@2.49.1': + resolution: {integrity: sha512-lKaptKQB5/juEF5+jzmBeZlz69MdHZuxf+0f50NwhL+IE//m4ZnOeWlsKRjjsM0fVayZiQKqLvYdBn0RLkhGiQ==} + '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -2807,6 +3227,9 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -2953,6 +3376,9 @@ packages: '@types/node-fetch@2.6.12': resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node@10.14.22': + resolution: {integrity: sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw==} + '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} @@ -2974,6 +3400,9 @@ packages: '@types/pg@8.6.1': resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + '@types/phoenix@1.6.6': + resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} + '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} @@ -3018,6 +3447,9 @@ packages: '@types/tinycolor2@1.4.6': resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -3027,6 +3459,9 @@ packages: '@types/uuid@10.0.0': resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + '@types/ws@8.5.14': + resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} + '@typescript-eslint/eslint-plugin@8.16.0': resolution: {integrity: sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3435,6 +3870,9 @@ packages: resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -3460,10 +3898,6 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - bin-links@5.0.0: - resolution: {integrity: sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA==} - engines: {node: ^18.17.0 || >=20.5.0} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -3501,6 +3935,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -3614,10 +4051,6 @@ packages: resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} engines: {node: '>= 14.16.0'} - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -3674,10 +4107,6 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - cmd-shim@7.0.0: - resolution: {integrity: sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw==} - engines: {node: ^18.17.0 || >=20.5.0} - code-block-writer@13.0.3: resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} @@ -3851,10 +4280,6 @@ packages: damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -4043,6 +4468,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -4363,6 +4791,9 @@ packages: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} + expr-eval@2.0.2: + resolution: {integrity: sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==} + express@4.21.2: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} @@ -4419,10 +4850,6 @@ packages: picomatch: optional: true - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -4431,6 +4858,10 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4454,9 +4885,22 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -4467,6 +4911,10 @@ packages: form-data-encoder@1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + form-data@4.0.1: resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} @@ -4475,10 +4923,6 @@ packages: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - formidable@2.1.2: resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} @@ -4770,9 +5214,16 @@ packages: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} + html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@9.1.0: resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} @@ -4806,6 +5257,10 @@ packages: resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} + ibm-cloud-sdk-core@5.1.3: + resolution: {integrity: sha512-FCJSK4Gf5zdmR3yEM2DDlaYDrkfhSwP3hscKzPrQEfc4/qMnFn6bZuOOw5ulr3bB/iAbfeoGF0CkIe+dWdpC7Q==} + engines: {node: '>=18'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -5123,6 +5578,9 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + iterator.prototype@1.1.3: resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} engines: {node: '>= 0.4'} @@ -5226,10 +5684,20 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -5331,6 +5799,9 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} + leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -5362,9 +5833,30 @@ packages: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -5675,10 +6167,6 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@3.0.1: - resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} - engines: {node: '>= 18'} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -5793,10 +6281,6 @@ packages: encoding: optional: true - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-plop@0.26.3: resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} engines: {node: '>=8.9.4'} @@ -5815,10 +6299,6 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - npm-normalize-package-bin@4.0.0: - resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==} - engines: {node: ^18.17.0 || >=20.5.0} - npm-package-arg@11.0.3: resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} engines: {node: ^16.14.0 || >=18.0.0} @@ -6019,6 +6499,9 @@ packages: parse5@7.2.1: resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -6087,6 +6570,13 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + + peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} @@ -6250,10 +6740,6 @@ packages: resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -6286,6 +6772,9 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} @@ -6300,6 +6789,9 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -6393,10 +6885,6 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - read-cmd-shim@5.0.0: - resolution: {integrity: sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==} - engines: {node: ^18.17.0 || >=20.5.0} - read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -6409,6 +6897,14 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-web-to-node-stream@3.0.4: + resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} + engines: {node: '>=8'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -6497,6 +6993,9 @@ packages: resolution: {integrity: sha512-/Tvpny/RVVicqlYTKwt/GtpZRsPG1CmJNhxVKGz+Sy/4MONfXCVNK69MFgGKdUt0/324q3ClI2dICcPgISrC8g==} engines: {node: '>=8.6.0'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -6529,6 +7028,12 @@ packages: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + retry-axios@2.6.0: + resolution: {integrity: sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ==} + engines: {node: '>=10.7.0'} + peerDependencies: + axios: '*' + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -6547,10 +7052,6 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@5.0.10: - resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} - hasBin: true - rollup-plugin-execute@1.1.1: resolution: {integrity: sha512-isCNR/VrwlEfWJMwsnmt5TBRod8dW1IjVRxcXCBrxDmVTeA1IXjzeLSS3inFBmRD7KDPlo38KSb2mh5v5BoWgA==} @@ -6617,6 +7118,9 @@ packages: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} + selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -6856,6 +7360,10 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + style-dictionary@4.1.3: resolution: {integrity: sha512-KJTkMaFbwSdSsDm6m5M6ki7oQo9vMKV37Vyj0cFpkYw6ucqQKORRQNZT0KXUubxNTtbjv2tmy9wvDSayxS0Zzg==} engines: {node: '>=18.0.0'} @@ -6885,11 +7393,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - supabase@2.15.8: - resolution: {integrity: sha512-yY4kVpdd7x9u5QqTW/8zUXIrMgdkBDGqQwkDugBLe8uoFdH9tVZKt0L5RmuM21RJ0MEQkby2sQrTfiXvgGyx9w==} - engines: {npm: '>=8'} - hasBin: true - superagent@7.1.6: resolution: {integrity: sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==} engines: {node: '>=6.4.0 <13 || >=14'} @@ -6937,10 +7440,6 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -7038,6 +7537,14 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -7245,6 +7752,10 @@ packages: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -7280,6 +7791,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -7449,10 +7963,6 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - web-streams-polyfill@4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} @@ -7535,10 +8045,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@6.0.0: - resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} - engines: {node: ^18.17.0 || >=20.5.0} - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -7562,10 +8068,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - yaml@2.5.1: resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} @@ -7636,6 +8138,18 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + '@anthropic-ai/sdk@0.27.3': + dependencies: + '@types/node': 18.19.78 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.25.9 @@ -7870,6 +8384,34 @@ snapshots: '@biomejs/cli-win32-x64@1.9.3': optional: true + '@browserbasehq/sdk@2.3.0': + dependencies: + '@types/node': 18.19.78 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@browserbasehq/stagehand@1.13.1(@playwright/test@1.50.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(zod@3.24.1)': + dependencies: + '@anthropic-ai/sdk': 0.27.3 + '@browserbasehq/sdk': 2.3.0 + '@playwright/test': 1.50.1 + deepmerge: 4.3.1 + dotenv: 16.4.7 + openai: 4.86.1(ws@8.18.0)(zod@3.24.1) + ws: 8.18.0 + zod: 3.24.1 + zod-to-json-schema: 3.24.3(zod@3.24.1) + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + '@bundled-es-modules/deepmerge@4.3.1': dependencies: deepmerge: 4.3.1 @@ -8335,6 +8877,16 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@ibm-cloud/watsonx-ai@1.5.1(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))': + dependencies: + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1))) + '@types/node': 18.19.78 + extend: 3.0.2 + ibm-cloud-sdk-core: 5.1.3 + transitivePeerDependencies: + - '@langchain/core' + - supports-color + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -8525,10 +9077,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -8578,6 +9126,51 @@ snapshots: dependencies: tslib: 2.8.1 + '@langchain/community@0.3.33(@browserbasehq/sdk@2.3.0)(@browserbasehq/stagehand@1.13.1(@playwright/test@1.50.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(zod@3.24.1))(@ibm-cloud/watsonx-ai@1.5.1(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1))))(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(@supabase/supabase-js@2.49.1)(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(html-to-text@9.0.5)(ibm-cloud-sdk-core@5.1.3)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(playwright@1.50.1)(ws@8.18.0)': + dependencies: + '@browserbasehq/stagehand': 1.13.1(@playwright/test@1.50.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(zod@3.24.1) + '@ibm-cloud/watsonx-ai': 1.5.1(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1))) + '@langchain/core': 0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)) + '@langchain/openai': 0.4.4(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(ws@8.18.0) + binary-extensions: 2.3.0 + expr-eval: 2.0.2 + flat: 5.0.2 + ibm-cloud-sdk-core: 5.1.3 + js-yaml: 4.1.0 + langchain: 0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0) + langsmith: 0.3.11(openai@4.86.1(ws@8.18.0)(zod@3.24.1)) + openai: 4.86.1(ws@8.18.0)(zod@3.24.1) + uuid: 10.0.0 + zod: 3.24.1 + zod-to-json-schema: 3.24.3(zod@3.24.1) + optionalDependencies: + '@browserbasehq/sdk': 2.3.0 + '@supabase/supabase-js': 2.49.1 + cheerio: 1.0.0 + html-to-text: 9.0.5 + ignore: 5.3.2 + jsonwebtoken: 9.0.2 + lodash: 4.17.21 + playwright: 1.50.1 + ws: 8.18.0 + transitivePeerDependencies: + - '@langchain/anthropic' + - '@langchain/aws' + - '@langchain/cerebras' + - '@langchain/cohere' + - '@langchain/deepseek' + - '@langchain/google-genai' + - '@langchain/google-vertexai' + - '@langchain/google-vertexai-web' + - '@langchain/groq' + - '@langchain/mistralai' + - '@langchain/ollama' + - '@langchain/xai' + - axios + - encoding + - handlebars + - peggy + '@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1))': dependencies: '@cfworker/json-schema': 4.1.1 @@ -9895,6 +10488,11 @@ snapshots: '@rushstack/eslint-patch@1.10.4': {} + '@selderee/plugin-htmlparser2@0.11.0': + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + '@sentry-internal/browser-utils@8.49.0': dependencies: '@sentry/core': 8.49.0 @@ -10213,6 +10811,48 @@ snapshots: dependencies: storybook: 8.3.4 + '@supabase/auth-js@2.68.0': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/functions-js@2.4.4': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/node-fetch@2.6.15': + dependencies: + whatwg-url: 5.0.0 + + '@supabase/postgrest-js@1.19.2': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/realtime-js@2.11.2': + dependencies: + '@supabase/node-fetch': 2.6.15 + '@types/phoenix': 1.6.6 + '@types/ws': 8.5.14 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@supabase/storage-js@2.7.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/supabase-js@2.49.1': + dependencies: + '@supabase/auth-js': 2.68.0 + '@supabase/functions-js': 2.4.4 + '@supabase/node-fetch': 2.6.15 + '@supabase/postgrest-js': 1.19.2 + '@supabase/realtime-js': 2.11.2 + '@supabase/storage-js': 2.7.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.15': @@ -10247,6 +10887,8 @@ snapshots: '@testing-library/dom': 10.4.0 optional: true + '@tokenizer/token@0.3.0': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} '@ts-morph/common@0.25.0': @@ -10448,6 +11090,8 @@ snapshots: '@types/node': 22.9.0 form-data: 4.0.1 + '@types/node@10.14.22': {} + '@types/node@12.20.55': {} '@types/node@18.19.78': @@ -10476,6 +11120,8 @@ snapshots: pg-protocol: 1.7.0 pg-types: 2.2.0 + '@types/phoenix@1.6.6': {} + '@types/prop-types@15.7.13': {} '@types/qs@6.9.18': {} @@ -10523,12 +11169,18 @@ snapshots: '@types/tinycolor2@1.4.6': {} + '@types/tough-cookie@4.0.5': {} + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} '@types/uuid@10.0.0': {} + '@types/ws@8.5.14': + dependencies: + '@types/node': 22.9.0 + '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -11051,6 +11703,14 @@ snapshots: axe-core@4.10.2: {} + axios@1.7.9(debug@4.4.0): + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + axobject-query@4.1.0: {} bail@2.0.2: {} @@ -11069,14 +11729,6 @@ snapshots: dependencies: is-windows: 1.0.2 - bin-links@5.0.0: - dependencies: - cmd-shim: 7.0.0 - npm-normalize-package-bin: 4.0.0 - proc-log: 5.0.0 - read-cmd-shim: 5.0.0 - write-file-atomic: 6.0.0 - binary-extensions@2.3.0: {} bl@4.1.0: @@ -11133,6 +11785,8 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -11282,8 +11936,6 @@ snapshots: dependencies: readdirp: 4.0.2 - chownr@3.0.0: {} - chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} @@ -11324,8 +11976,6 @@ snapshots: clsx@2.1.1: {} - cmd-shim@7.0.0: {} - code-block-writer@13.0.3: {} collapse-white-space@2.1.0: {} @@ -11477,8 +12127,6 @@ snapshots: damerau-levenshtein@1.0.8: {} - data-uri-to-buffer@4.0.1: {} - data-uri-to-buffer@6.0.2: {} data-view-buffer@1.0.1: @@ -11644,6 +12292,10 @@ snapshots: eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + ee-first@1.1.1: {} effect@3.6.5: {} @@ -12180,6 +12832,8 @@ snapshots: expect-type@1.1.0: {} + expr-eval@2.0.2: {} + express@4.21.2: dependencies: accepts: 1.3.8 @@ -12268,11 +12922,6 @@ snapshots: optionalDependencies: picomatch: 4.0.2 - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -12281,6 +12930,12 @@ snapshots: dependencies: flat-cache: 3.2.0 + file-type@16.5.4: + dependencies: + readable-web-to-node-stream: 3.0.4 + strtok3: 6.3.0 + token-types: 4.2.1 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -12317,8 +12972,14 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flat@5.0.2: {} + flatted@3.3.2: {} + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: + debug: 4.4.0 + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -12330,6 +12991,12 @@ snapshots: form-data-encoder@1.7.2: {} + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + form-data@4.0.1: dependencies: asynckit: 0.4.0 @@ -12341,10 +13008,6 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - formidable@2.1.2: dependencies: dezalgo: 1.0.4 @@ -12775,8 +13438,23 @@ snapshots: html-tags@3.3.1: {} + html-to-text@9.0.5: + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + html-void-elements@3.0.0: {} + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + htmlparser2@9.1.0: dependencies: domelementtype: 2.3.0 @@ -12823,6 +13501,26 @@ snapshots: hyperdyperid@1.2.0: {} + ibm-cloud-sdk-core@5.1.3: + dependencies: + '@types/debug': 4.1.12 + '@types/node': 10.14.22 + '@types/tough-cookie': 4.0.5 + axios: 1.7.9(debug@4.4.0) + camelcase: 6.3.0 + debug: 4.4.0 + dotenv: 16.4.7 + extend: 3.0.2 + file-type: 16.5.4 + form-data: 4.0.0 + isstream: 0.1.2 + jsonwebtoken: 9.0.2 + mime-types: 2.1.35 + retry-axios: 2.6.0(axios@1.7.9) + tough-cookie: 4.1.4 + transitivePeerDependencies: + - supports-color + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -13124,6 +13822,8 @@ snapshots: isexe@2.0.0: {} + isstream@0.1.2: {} + iterator.prototype@1.1.3: dependencies: define-properties: 1.2.1 @@ -13227,6 +13927,19 @@ snapshots: jsonpointer@5.0.1: {} + jsonwebtoken@9.0.2: + 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.1.1 + ms: 2.1.3 + semver: 7.7.1 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -13234,6 +13947,17 @@ snapshots: object.assign: 4.1.5 object.values: 1.2.0 + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -13246,7 +13970,7 @@ snapshots: kleur@3.0.3: {} - langchain@0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0): + langchain@0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0): dependencies: '@langchain/core': 0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)) '@langchain/openai': 0.4.4(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(ws@8.18.0) @@ -13262,6 +13986,7 @@ snapshots: zod: 3.24.1 zod-to-json-schema: 3.24.3(zod@3.24.1) optionalDependencies: + axios: 1.7.9(debug@4.4.0) cheerio: 1.0.0 handlebars: 4.7.8 transitivePeerDependencies: @@ -13273,9 +13998,9 @@ snapshots: dependencies: mustache: 4.2.0 - langfuse-langchain@3.36.0(langchain@0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0)): + langfuse-langchain@3.36.0(langchain@0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0)): dependencies: - langchain: 0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0) + langchain: 0.3.19(@langchain/core@0.3.42(openai@4.86.1(ws@8.18.0)(zod@3.24.1)))(axios@1.7.9)(cheerio@1.0.0)(handlebars@4.7.8)(openai@4.86.1(ws@8.18.0)(zod@3.24.1))(ws@8.18.0) langfuse: 3.36.0 langfuse-core: 3.36.0 @@ -13301,6 +14026,8 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 + leac@0.6.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -13324,8 +14051,22 @@ snapshots: lodash.get@4.4.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.merge@4.6.2: {} + lodash.once@4.1.1: {} + lodash.startcase@4.4.0: {} lodash@4.17.21: {} @@ -13881,11 +14622,6 @@ snapshots: minipass@7.1.2: {} - minizlib@3.0.1: - dependencies: - minipass: 7.1.2 - rimraf: 5.0.10 - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -13974,12 +14710,6 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - node-plop@0.26.3: dependencies: '@babel/runtime-corejs3': 7.25.7 @@ -14002,8 +14732,6 @@ snapshots: normalize-range@0.1.2: {} - npm-normalize-package-bin@4.0.0: {} - npm-package-arg@11.0.3: dependencies: hosted-git-info: 7.0.2 @@ -14265,6 +14993,11 @@ snapshots: dependencies: entities: 4.5.0 + parseley@0.12.1: + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 + parseurl@1.3.3: {} pascal-case@2.0.1: @@ -14338,6 +15071,10 @@ snapshots: pathval@2.0.0: {} + peberminta@0.9.0: {} + + peek-readable@4.1.0: {} + pg-int8@1.0.1: {} pg-protocol@1.7.0: {} @@ -14471,8 +15208,6 @@ snapshots: proc-log@4.2.0: {} - proc-log@5.0.0: {} - process@0.11.10: {} progress@2.0.3: {} @@ -14512,6 +15247,10 @@ snapshots: proxy-from-env@1.1.0: {} + psl@1.15.0: + dependencies: + punycode: 2.3.1 + punycode@1.4.1: {} punycode@2.3.1: {} @@ -14522,6 +15261,8 @@ snapshots: dependencies: side-channel: 1.0.6 + querystringify@2.2.0: {} + queue-microtask@1.2.3: {} queue@6.0.2: @@ -14617,8 +15358,6 @@ snapshots: dependencies: pify: 2.3.0 - read-cmd-shim@5.0.0: {} - read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -14637,6 +15376,18 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readable-web-to-node-stream@3.0.4: + dependencies: + readable-stream: 4.7.0 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -14795,6 +15546,8 @@ snapshots: transitivePeerDependencies: - supports-color + requires-port@1.0.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -14829,6 +15582,10 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + retry-axios@2.6.0(axios@1.7.9): + dependencies: + axios: 1.7.9(debug@4.4.0) + retry@0.13.1: {} reusify@1.0.4: {} @@ -14841,10 +15598,6 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@5.0.10: - dependencies: - glob: 10.4.5 - rollup-plugin-execute@1.1.1: {} rollup@3.29.5: @@ -14936,6 +15689,10 @@ snapshots: extend-shallow: 2.0.1 kind-of: 6.0.3 + selderee@0.11.0: + dependencies: + parseley: 0.12.1 + semver@6.3.1: {} semver@7.6.3: {} @@ -15232,6 +15989,11 @@ snapshots: strip-json-comments@3.1.1: {} + strtok3@6.3.0: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + style-dictionary@4.1.3: dependencies: '@bundled-es-modules/deepmerge': 4.3.1 @@ -15272,15 +16034,6 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 - supabase@2.15.8: - dependencies: - bin-links: 5.0.0 - https-proxy-agent: 7.0.5 - node-fetch: 3.3.2 - tar: 7.4.3 - transitivePeerDependencies: - - supports-color - superagent@7.1.6: dependencies: component-emitter: 1.3.1 @@ -15375,15 +16128,6 @@ snapshots: tapable@2.2.1: {} - tar@7.4.3: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.0.1 - mkdirp: 3.0.1 - yallist: 5.0.0 - term-size@2.2.1: {} terser-webpack-plugin@5.3.11(webpack@5.97.1): @@ -15461,6 +16205,18 @@ snapshots: toidentifier@1.0.1: {} + token-types@4.2.1: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + tr46@0.0.3: {} tree-dump@1.0.2(tslib@2.8.1): @@ -15696,6 +16452,8 @@ snapshots: universalify@0.1.2: {} + universalify@0.2.0: {} + universalify@2.0.1: {} unpipe@1.0.0: {} @@ -15734,6 +16492,11 @@ snapshots: dependencies: punycode: 2.3.1 + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + url@0.11.4: dependencies: punycode: 1.4.1 @@ -15960,8 +16723,6 @@ snapshots: dependencies: defaults: 1.0.4 - web-streams-polyfill@3.3.3: {} - web-streams-polyfill@4.0.0-beta.3: {} webidl-conversions@3.0.1: {} @@ -16083,11 +16844,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@6.0.0: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - ws@8.18.0: {} xtend@4.0.2: {} @@ -16096,8 +16852,6 @@ snapshots: yallist@3.1.1: {} - yallist@5.0.0: {} - yaml@2.5.1: {} yargs-parser@21.1.1: {} From a3f88805147ae9411ac5bcfb5fef847dccb60c94 Mon Sep 17 00:00:00 2001 From: "ryota.sasazawa" Date: Tue, 4 Mar 2025 16:33:28 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=F0=9F=94=A7=20Exclude=20migration-web=20?= =?UTF-8?q?from=20workspace=20packages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-workspace.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1dea90a33..3a913657c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,5 @@ packages: - "frontend/apps/*" - "frontend/packages/*" + # NOTE: ignore migration-web until it's ready to be deployed + - "!frontend/apps/migration-web" From ba3665ce65bafbb7f3679d3b8ce5e823225cef93 Mon Sep 17 00:00:00 2001 From: "ryota.sasazawa" Date: Tue, 4 Mar 2025 17:02:29 +0900 Subject: [PATCH 05/10] =?UTF-8?q?=F0=9F=94=A7=20Approve=20@browserbasehq/s?= =?UTF-8?q?dk=20package=20license?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/dependency_decisions.yml | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/config/dependency_decisions.yml b/config/dependency_decisions.yml index 765f08550..3344c69a4 100644 --- a/config/dependency_decisions.yml +++ b/config/dependency_decisions.yml @@ -56,18 +56,20 @@ - - :approve - argparse - :who: OSPO @masutaka - :why: Python 2.0 license is compatible with Apache-2.0. But License Finder does + :why: + Python 2.0 license is compatible with Apache-2.0. But License Finder does not support the name "Python-2.0". See https://github.com/pivotal/LicenseFinder/pull/1053 :versions: - - 2.0.1 + - 2.0.1 :when: 2024-11-28 08:54:56.971593000 Z - - :approve - jsonify - :who: OSPO @masutaka - :why: Public Domain is compatible with Apache-2.0. But it is not a software license. + :why: + Public Domain is compatible with Apache-2.0. But it is not a software license. See https://github.com/liam-hq/liam/issues/111 :versions: - - 0.0.1 + - 0.0.1 :when: 2024-11-29 03:35:11.884802000 Z - - :permit - LGPL-3.0-or-later @@ -84,10 +86,11 @@ - - :approve - spawndamnit - :who: OSPO @masutaka - :why: Its license is MIT, but it is mis-detected as a "SEE LICENSE IN LICENSE" + :why: + Its license is MIT, but it is mis-detected as a "SEE LICENSE IN LICENSE" license. See https://github.com/jamiebuilds/spawndamnit/pull/11 :versions: - - 3.0.1 + - 3.0.1 :when: 2024-11-29 09:06:33.106701000 Z - - :permit - Mozilla Public License 2.0 @@ -101,3 +104,9 @@ :why: Compatible with Apache-2.0 license. See https://opensource.org/license/epl-2-0 :versions: [] :when: 2024-12-09 09:29:53.604007000 Z +- - :approve + - "@browserbasehq/sdk" + - :who: OSPO @masutaka + :why: The license is Apache-2.0. License Finder failed to identify the license. + :versions: [] + :when: 2025-03-04 07:55:29.625648000 Z From ba2c5bcd76b42f672442ca1b233a51ba78f347a2 Mon Sep 17 00:00:00 2001 From: "ryota.sasazawa" Date: Tue, 4 Mar 2025 17:09:57 +0900 Subject: [PATCH 06/10] =?UTF-8?q?fixup!=20=E2=9C=A8=20Add=20URL=20content?= =?UTF-8?q?=20vectorization=20feature=20to=20migration=20web=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/apps/migration-web/lib/index.ts | 1 + frontend/apps/migration-web/lib/vectorStore.ts | 13 +++++++++++++ frontend/apps/migration-web/lib/vectorization.ts | 14 +------------- 3 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 frontend/apps/migration-web/lib/vectorStore.ts diff --git a/frontend/apps/migration-web/lib/index.ts b/frontend/apps/migration-web/lib/index.ts index 94e49f418..5a6eda328 100644 --- a/frontend/apps/migration-web/lib/index.ts +++ b/frontend/apps/migration-web/lib/index.ts @@ -1,3 +1,4 @@ export * from './langfuse' export * from './supabase' +export * from './vectorStore' export * from './vectorization' diff --git a/frontend/apps/migration-web/lib/vectorStore.ts b/frontend/apps/migration-web/lib/vectorStore.ts new file mode 100644 index 000000000..904f4b899 --- /dev/null +++ b/frontend/apps/migration-web/lib/vectorStore.ts @@ -0,0 +1,13 @@ +import { SupabaseVectorStore } from '@langchain/community/vectorstores/supabase' +import { OpenAIEmbeddings } from '@langchain/openai' +import { supabaseClient } from '.' + +const embeddings = new OpenAIEmbeddings({ + modelName: 'text-embedding-3-small', +}) + +export const vectorStore = new SupabaseVectorStore(embeddings, { + client: supabaseClient, + tableName: 'documents', + queryName: 'match_documents', +}) diff --git a/frontend/apps/migration-web/lib/vectorization.ts b/frontend/apps/migration-web/lib/vectorization.ts index f89f9d768..494eae550 100644 --- a/frontend/apps/migration-web/lib/vectorization.ts +++ b/frontend/apps/migration-web/lib/vectorization.ts @@ -1,19 +1,7 @@ import { CheerioWebBaseLoader } from '@langchain/community/document_loaders/web/cheerio' import { HtmlToTextTransformer } from '@langchain/community/document_transformers/html_to_text' -import { SupabaseVectorStore } from '@langchain/community/vectorstores/supabase' -import { OpenAIEmbeddings } from '@langchain/openai' import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter' -import { supabaseClient } from '.' - -const embeddings = new OpenAIEmbeddings({ - modelName: 'text-embedding-3-small', -}) - -const vectorStore = new SupabaseVectorStore(embeddings, { - client: supabaseClient, - tableName: 'documents', - queryName: 'match_documents', -}) +import { vectorStore } from '.' export type VectorizationResult = { documentId?: string From d7d4e683e657a64cbfe89df7f0a19009bea2bab5 Mon Sep 17 00:00:00 2001 From: "ryota.sasazawa" Date: Tue, 4 Mar 2025 17:56:08 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=E2=9C=A8=20Add=20knowledge=20retrieval?= =?UTF-8?q?=20feature=20for=20database=20schema=20advice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration-web/app/api/retrieve/route.ts | 85 ++++++++++ .../app/knowledge_retrieval/page.module.css | 15 ++ .../app/knowledge_retrieval/page.tsx | 14 ++ .../KnowledgeRetrievalWindow.module.css | 127 ++++++++++++++ .../components/KnowledgeRetrievalWindow.tsx | 160 ++++++++++++++++++ 5 files changed, 401 insertions(+) create mode 100644 frontend/apps/migration-web/app/api/retrieve/route.ts create mode 100644 frontend/apps/migration-web/app/knowledge_retrieval/page.module.css create mode 100644 frontend/apps/migration-web/app/knowledge_retrieval/page.tsx create mode 100644 frontend/apps/migration-web/components/KnowledgeRetrievalWindow.module.css create mode 100644 frontend/apps/migration-web/components/KnowledgeRetrievalWindow.tsx diff --git a/frontend/apps/migration-web/app/api/retrieve/route.ts b/frontend/apps/migration-web/app/api/retrieve/route.ts new file mode 100644 index 000000000..2922d528f --- /dev/null +++ b/frontend/apps/migration-web/app/api/retrieve/route.ts @@ -0,0 +1,85 @@ +import { langfuseLangchainHandler, vectorStore } from '@/lib' +import { PromptTemplate } from '@langchain/core/prompts' +import { ChatOpenAI } from '@langchain/openai' +import { HttpResponseOutputParser } from 'langchain/output_parsers' +import type { NextRequest } from 'next/server' + +export const runtime = 'edge' + +const RETRIEVAL_TEMPLATE = `You are a database design expert. A user is planning to make changes to their database schema and needs advice. + +I'll provide you with: +1. The user's query about a database schema change they're planning +2. Relevant context from previous database schema discussions and documentation + +Based on this information, please provide a detailed response that: +- Analyzes the proposed schema change +- Offers best practices and recommendations +- Highlights potential issues or considerations +- References specific examples from the context where relevant + +User Query: +""" +{query} +""" + +Relevant Context: +""" +{context} +""" + +Please format your response in Markdown and ensure it's practical, specific, and actionable.` + +export async function POST(req: NextRequest) { + try { + const { query } = await req.json() + + if (!query || typeof query !== 'string') { + return new Response( + JSON.stringify({ + error: 'Query is not provided or is in an invalid format', + }), + { status: 400 }, + ) + } + + const retriever = vectorStore.asRetriever({ + searchType: 'similarity', + k: 5, + }) + + const relevantDocs = await retriever.invoke(query) + const context = relevantDocs.map((doc) => doc.pageContent).join('\n\n') + + const prompt = PromptTemplate.fromTemplate(RETRIEVAL_TEMPLATE) + + const model = new ChatOpenAI({ + temperature: 0.7, + model: 'gpt-4o-mini', + }) + + const outputParser = new HttpResponseOutputParser() + + const chain = prompt.pipe(model).pipe(outputParser) + + const stream = await chain.stream( + { + query: query, + context: context, + }, + { + callbacks: [langfuseLangchainHandler], + }, + ) + + return new Response(stream) + } catch (error) { + console.error('Error in retrieve API:', error) + return new Response( + JSON.stringify({ + error: 'An error occurred while retrieving knowledge', + }), + { status: 500 }, + ) + } +} diff --git a/frontend/apps/migration-web/app/knowledge_retrieval/page.module.css b/frontend/apps/migration-web/app/knowledge_retrieval/page.module.css new file mode 100644 index 000000000..4a73ba323 --- /dev/null +++ b/frontend/apps/migration-web/app/knowledge_retrieval/page.module.css @@ -0,0 +1,15 @@ +.container { + display: flex; + flex-direction: column; + gap: 2rem; + padding: 2rem; + max-width: 1200px; + margin: 0 auto; +} + +.title { + font-size: 2rem; + font-weight: 600; + color: #333; + margin-bottom: 1rem; +} diff --git a/frontend/apps/migration-web/app/knowledge_retrieval/page.tsx b/frontend/apps/migration-web/app/knowledge_retrieval/page.tsx new file mode 100644 index 000000000..3bd2ac2fd --- /dev/null +++ b/frontend/apps/migration-web/app/knowledge_retrieval/page.tsx @@ -0,0 +1,14 @@ +import { KnowledgeRetrievalWindow } from '@/components/KnowledgeRetrievalWindow' +import styles from './page.module.css' + +export default function KnowledgeRetrievalPage() { + return ( +
+

Database Knowledge Retrieval

+ +
+ ) +} diff --git a/frontend/apps/migration-web/components/KnowledgeRetrievalWindow.module.css b/frontend/apps/migration-web/components/KnowledgeRetrievalWindow.module.css new file mode 100644 index 000000000..4e5645a02 --- /dev/null +++ b/frontend/apps/migration-web/components/KnowledgeRetrievalWindow.module.css @@ -0,0 +1,127 @@ +.retrievalWindow { + display: flex; + flex-direction: column; + gap: 1.5rem; + width: 100%; + border-radius: 8px; + background-color: #fff; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + padding: 1.5rem; +} + +.form { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.inputContainer { + width: 100%; +} + +.queryInput { + width: 100%; + min-height: 120px; + padding: 1rem; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 1rem; + line-height: 1.5; + resize: vertical; + transition: border-color 0.3s; +} + +.queryInput:focus { + outline: none; + border-color: #0070f3; + box-shadow: 0 0 0 2px rgba(0, 112, 243, 0.2); +} + +.controls { + display: flex; + gap: 1rem; +} + +.retrieveButton, +.resetButton { + padding: 0.75rem 1.5rem; + border: none; + border-radius: 4px; + font-size: 1rem; + font-weight: 500; + cursor: pointer; + transition: background-color 0.3s, transform 0.1s; +} + +.retrieveButton { + background-color: #0070f3; + color: white; +} + +.retrieveButton:hover:not(:disabled) { + background-color: #0060df; + transform: translateY(-1px); +} + +.retrieveButton:disabled { + background-color: #ccc; + cursor: not-allowed; +} + +.resetButton { + background-color: #f5f5f5; + color: #333; +} + +.resetButton:hover:not(:disabled) { + background-color: #e5e5e5; +} + +.error { + padding: 0.75rem; + background-color: #fff5f5; + color: #e53e3e; + border-radius: 4px; + border-left: 4px solid #e53e3e; +} + +.resultContainer { + margin-top: 1rem; + min-height: 200px; + max-height: 500px; + overflow-y: auto; + border-radius: 4px; + background-color: #1e1e1e; + color: #e0e0e0; +} + +.retrievalResult { + padding: 1.5rem; + font-size: 1rem; + line-height: 1.6; + white-space: pre-wrap; +} + +.loading { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 200px; + gap: 1rem; +} + +.spinner { + width: 40px; + height: 40px; + border: 4px solid rgba(0, 0, 0, 0.1); + border-radius: 50%; + border-top-color: #0070f3; + animation: spin 1s ease-in-out infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} diff --git a/frontend/apps/migration-web/components/KnowledgeRetrievalWindow.tsx b/frontend/apps/migration-web/components/KnowledgeRetrievalWindow.tsx new file mode 100644 index 000000000..3226de3d9 --- /dev/null +++ b/frontend/apps/migration-web/components/KnowledgeRetrievalWindow.tsx @@ -0,0 +1,160 @@ +'use client' + +import { + type ChangeEvent, + type FormEvent, + useEffect, + useRef, + useState, +} from 'react' +import styles from './KnowledgeRetrievalWindow.module.css' + +export type KnowledgeRetrievalWindowProps = { + endpoint: string + placeholder: string +} + +export const KnowledgeRetrievalWindow = ({ + endpoint, + placeholder, +}: KnowledgeRetrievalWindowProps) => { + const [query, setQuery] = useState('') + const [isLoading, setIsLoading] = useState(false) + const [error, setError] = useState(null) + const [retrievalResult, setRetrievalResult] = useState('') + const textareaRef = useRef(null) + const resultContainerRef = useRef(null) + + useEffect(() => { + if (textareaRef.current) { + textareaRef.current.style.height = 'auto' + textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px` + } + }, []) + + useEffect(() => { + if (resultContainerRef.current) { + resultContainerRef.current.scrollTop = + resultContainerRef.current.scrollHeight + } + }, []) + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault() + + if (!query.trim()) { + setError('Please enter a query') + return + } + + setIsLoading(true) + setError(null) + setRetrievalResult('') + + try { + const response = await fetch(`/${endpoint}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ query }), + }) + + if (!response.ok) { + throw new Error(`An error occurred: ${response.statusText}`) + } + + if (!response.body) { + throw new Error('Response body is empty') + } + + const reader = response.body.getReader() + const decoder = new TextDecoder() + + while (true) { + const { done, value } = await reader.read() + if (done) break + + const text = decoder.decode(value) + setRetrievalResult((prev) => prev + text) + } + } catch (err) { + console.error('Error during knowledge retrieval:', err) + setError( + err instanceof Error + ? err.message + : 'An error occurred during knowledge retrieval', + ) + } finally { + setIsLoading(false) + } + } + + const handleReset = () => { + setQuery('') + setRetrievalResult('') + setError(null) + } + + const handleTextareaChange = (e: ChangeEvent) => { + setQuery(e.target.value) + if (textareaRef.current) { + textareaRef.current.style.height = 'auto' + textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px` + } + } + + return ( +
+
+
+