From 233c0f66c28bbcdf207d431aa7993e9a464fcd1e Mon Sep 17 00:00:00 2001 From: Cheslav Zhuravsky Date: Wed, 2 Oct 2024 19:49:36 +0700 Subject: [PATCH] feat(llms): first iteration, oracle search flow (#1311) --- package.json | 3 + .../containerGradient/saber/index.module.scss | 2 +- .../Search/LLMSpark/LLMSpark.module.scss | 35 +++ src/containers/Search/LLMSpark/LLMSpark.tsx | 126 ++++++++++ src/containers/Search/LLMSpark/index.ts | 4 + src/containers/Search/SearchResults.tsx | 36 ++- src/containers/ipfs/IPFS.module.scss | 2 +- .../components/AdviserMeta/AdviserMeta.tsx | 29 ++- .../SoulCompanion/SoulCompanion.module.scss | 28 +++ .../SoulCompanion/SoulCompanion.tsx | 23 +- .../SoulCompanion/soulCompanion.module.scss | 19 +- src/containers/ipfs/ipfs.tsx | 7 +- src/features/ipfs/hooks/useGetIPFSHash.ts | 18 ++ .../ActionBar/ActionBarLLM/ActionBarLLM.tsx | 30 +++ src/features/sense/ui/Sense.module.scss | 8 +- src/features/sense/ui/Sense.tsx | 9 +- .../sense/ui/SenseList/SenseList.module.scss | 16 +- src/features/sense/ui/SenseList/SenseList.tsx | 15 +- .../SenseListFilters/SenseListFilters.tsx | 4 + src/features/sense/ui/types.ts | 7 +- src/utils/dev.ts | 3 + yarn.lock | 223 +++++++++++++++--- 22 files changed, 550 insertions(+), 97 deletions(-) create mode 100644 src/containers/Search/LLMSpark/LLMSpark.module.scss create mode 100644 src/containers/Search/LLMSpark/LLMSpark.tsx create mode 100644 src/containers/Search/LLMSpark/index.ts create mode 100644 src/containers/ipfs/components/SoulCompanion/SoulCompanion.module.scss create mode 100644 src/features/ipfs/hooks/useGetIPFSHash.ts create mode 100644 src/features/sense/ui/ActionBar/ActionBarLLM/ActionBarLLM.tsx create mode 100644 src/utils/dev.ts diff --git a/package.json b/package.json index 549b4be36..a62e2486c 100644 --- a/package.json +++ b/package.json @@ -145,6 +145,7 @@ "workbox-webpack-plugin": "^7.1.0" }, "dependencies": { + "@ai-sdk/openai": "^0.0.63", "@apollo/client": "^3.9.4", "@chainsafe/libp2p-noise": "^13.0.1", "@chainsafe/libp2p-yamux": "^5.0.0", @@ -172,6 +173,7 @@ "@milkdown/theme-nord": "^7.5.0", "@multiformats/multiaddr": "^11.4.0", "@nftstorage/ipfs-cluster": "^5.0.1", + "@openrouter/ai-sdk-provider": "^0.0.5", "@reduxjs/toolkit": "^1.9.3", "@storybook/addon-designs": "^7.0.4", "@tableflip/react-inspector": "^2.3.0", @@ -186,6 +188,7 @@ "@types/react-router-dom": "^5.3.3", "@uniswap/sdk": "^3.0.3", "@xenova/transformers": "^2.17.0", + "ai": "^3.4.7", "apollo-boost": "^0.4.7", "bech32": "^1.1.3", "big.js": "^5.2.2", diff --git a/src/components/containerGradient/saber/index.module.scss b/src/components/containerGradient/saber/index.module.scss index eea593d38..923c17e69 100644 --- a/src/components/containerGradient/saber/index.module.scss +++ b/src/components/containerGradient/saber/index.module.scss @@ -70,7 +70,7 @@ $saber-border-width: 2px; @if ($borderColor == 'color') { border-#{$position}: $saber-border-width solid - rgb(var(--color-r), var(--color-g), var(--color-b)); + rgb(var(--color-r), var(--color-g), var(--color-b)) !important; } @else { border-#{$position}: $saber-border-width solid white; } diff --git a/src/containers/Search/LLMSpark/LLMSpark.module.scss b/src/containers/Search/LLMSpark/LLMSpark.module.scss new file mode 100644 index 000000000..389aefef0 --- /dev/null +++ b/src/containers/Search/LLMSpark/LLMSpark.module.scss @@ -0,0 +1,35 @@ +@import '../../../components/containerGradient/saber/index.module'; + +.wrapper { + position: relative; + + * { + color: white; + } + + > div:last-of-type { + @include saber('purple', left, 'color'); + @include saber('purple', right, 'color'); + } +} + +.left, +.right { + position: absolute; + z-index: 1; + padding: 10px; + top: calc(45% - (40px / 2)); +} + +.left { + right: 100%; + display: flex; + align-items: center; + gap: 7px 10px; + font-size: 14px; +} + +.right { + padding-top: 15px; + left: 100%; +} diff --git a/src/containers/Search/LLMSpark/LLMSpark.tsx b/src/containers/Search/LLMSpark/LLMSpark.tsx new file mode 100644 index 000000000..173025214 --- /dev/null +++ b/src/containers/Search/LLMSpark/LLMSpark.tsx @@ -0,0 +1,126 @@ +import { createOpenRouter } from '@openrouter/ai-sdk-provider'; +import { useQuery } from '@tanstack/react-query'; +import { generateText } from 'ai'; +import { Link, useNavigate, useSearchParams } from 'react-router-dom'; +import { Display } from 'src/components'; +import useAddToIPFS from 'src/features/ipfs/hooks/useAddToIPFS'; +import { routes } from 'src/routes'; +import TextMarkdown from 'src/components/TextMarkdown'; +import { useHover } from 'src/hooks/useHover'; +import Loader2 from 'src/components/ui/Loader2'; +import useGetIPFSHash from 'src/features/ipfs/hooks/useGetIPFSHash'; +import { isCID } from 'src/utils/ipfs/helpers'; +import { isDevEnv } from 'src/utils/dev'; +import { testVar } from '.'; +import styles from './LLMSpark.module.scss'; + +// WIP + +const provider = createOpenRouter({ + ['a' + 'piK' + 'ey']: `sk-or-v1-${atob(testVar)}`, +}); + +const modelName = isDevEnv() + ? 'meta-llama/llama-3-8b-instruct:free' + : 'openai/gpt-4o-mini'; + +const model = provider.chat(modelName); + +export async function llmRequest(prompt) { + const { text } = await generateText({ + model, + prompt, + }); + + return text; +} + +function useLLMResponse(text) { + const { data, isLoading, error } = useQuery( + ['llm', text], + async () => { + return llmRequest(`what is ${text}`); + }, + { + enabled: Boolean(text), + } + ); + + return { + data, + isLoading, + error, + }; +} + +export function useIsLLMPageParam() { + const [searchParams] = useSearchParams(); + + const isLLM = searchParams.get('llm') === 'true'; + + return isLLM; +} + +export function LLMAvatar() { + return ( +
+ + {model.modelId} +
+ ); +} + +function LLMSpark({ searchText }: { searchText: string }) { + const { data, isLoading } = useLLMResponse(searchText); + const { execute } = useAddToIPFS(data); + + const [ref, hovering] = useHover(); + + const cid = useGetIPFSHash(data); + + const navigate = useNavigate(); + + if (isCID(searchText)) { + return null; + } + + return ( + { + e.preventDefault(); + + const hash = await execute(); + + navigate(`${routes.oracle.ask.getLink(hash)}?llm=true`); + }} + > + {hovering && ( +
+ +
+ )} + + {isLoading && } + {data && {data}} + + + ); +} + +export default LLMSpark; diff --git a/src/containers/Search/LLMSpark/index.ts b/src/containers/Search/LLMSpark/index.ts new file mode 100644 index 000000000..db8d9f74c --- /dev/null +++ b/src/containers/Search/LLMSpark/index.ts @@ -0,0 +1,4 @@ +const var1 = 'NzFlZjJiOGVlZDRlNDYyOWNjZDY5YzQzZDljMjEwMzJhZGJhYmI5MGI1ZW'; +const var2 = 'ZiMzBlZmVjMmRhZDE5MjNiODFmNQ'; + +export const testVar = var1 + var2; diff --git a/src/containers/Search/SearchResults.tsx b/src/containers/Search/SearchResults.tsx index b13df778a..a866fbccd 100644 --- a/src/containers/Search/SearchResults.tsx +++ b/src/containers/Search/SearchResults.tsx @@ -1,7 +1,6 @@ import { matchPath, useLocation, - useNavigate, useParams, useSearchParams, } from 'react-router-dom'; @@ -15,15 +14,17 @@ import { useDevice } from 'src/contexts/device'; import { IpfsContentType } from 'src/services/ipfs/types'; import useIsOnline from 'src/hooks/useIsOnline'; +import { getSearchQuery } from 'src/utils/search/utils'; +import { routes } from 'src/routes'; +import { ActionBar, Button } from 'src/components'; import ActionBarContainer from './ActionBarContainer'; import Filters from './Filters/Filters'; import styles from './SearchResults.module.scss'; import FirstItems from './_FirstItems.refactor'; import { initialContentTypeFilterState } from './constants'; -import { getSearchQuery } from 'src/utils/search/utils'; import useSearchData from './hooks/useSearchData'; import { LinksTypeFilter, SortBy } from './types'; -import { routes } from 'src/routes'; +import LLMSpark, { useIsLLMPageParam } from './LLMSpark/LLMSpark'; const sortByLSKey = 'search-sort'; const NEURON_SEARCH_KEY = 'neuron'; @@ -44,6 +45,8 @@ function SearchResults({ const [searchParams, setSearchParams] = useSearchParams(); const [neuron, setNeuron] = useState(searchParams.get(NEURON_SEARCH_KEY)); + const isLLM = useIsLLMPageParam(); + const location = useLocation(); const query = propQuery || q || cid || ''; @@ -189,6 +192,7 @@ function SearchResults({ />
+ {!isLLM && } {isInitialLoading ? ( @@ -214,15 +218,23 @@ function SearchResults({ {!mobile && (
- { - refetch(); - setRankLink(null); - }} - rankLink={rankLink} - /> + {isLLM ? ( + + + + ) : ( + { + refetch(); + setRankLink(null); + }} + rankLink={rankLink} + /> + )}
)} diff --git a/src/containers/ipfs/IPFS.module.scss b/src/containers/ipfs/IPFS.module.scss index c257ca6ec..e4b6d1253 100644 --- a/src/containers/ipfs/IPFS.module.scss +++ b/src/containers/ipfs/IPFS.module.scss @@ -1,3 +1,3 @@ -.wrapper { +.particle { min-height: 200px; } diff --git a/src/containers/ipfs/components/AdviserMeta/AdviserMeta.tsx b/src/containers/ipfs/components/AdviserMeta/AdviserMeta.tsx index 8b3e12d71..2e20793d0 100644 --- a/src/containers/ipfs/components/AdviserMeta/AdviserMeta.tsx +++ b/src/containers/ipfs/components/AdviserMeta/AdviserMeta.tsx @@ -3,6 +3,10 @@ import { timeSince, formatCurrency } from 'src/utils/utils'; import useRank from 'src/features/cyberlinks/rank/useRank'; import { Link } from 'react-router-dom'; import { routes } from 'src/routes'; +import { + LLMAvatar, + useIsLLMPageParam, +} from 'src/containers/Search/LLMSpark/LLMSpark'; import useGetCreator from '../../hooks/useGetCreator'; import { PREFIXES } from '../metaInfo'; import styles from './AdviserMeta.module.scss'; @@ -17,6 +21,8 @@ function AdviserMeta({ cid, type, size }: Props) { const { creator } = useGetCreator(cid); const rank = useRank(cid); + const isLLM = useIsLLMPageParam(); + return (
@@ -38,14 +44,23 @@ function AdviserMeta({ cid, type, size }: Props) {
)}
- {creator && ( -
- - {timeSince(Date.now() - Date.parse(creator.timestamp))} ago - - -
+ + {isLLM ? ( + + ) : ( + // eslint-disable-next-line react/jsx-no-useless-fragment + <> + {creator && ( +
+ + {timeSince(Date.now() - Date.parse(creator.timestamp))} ago + + +
+ )} + )} +
🟥 {size ? formatCurrency(size, 'B', 0, PREFIXES) : 'unknown'} diff --git a/src/containers/ipfs/components/SoulCompanion/SoulCompanion.module.scss b/src/containers/ipfs/components/SoulCompanion/SoulCompanion.module.scss new file mode 100644 index 000000000..3ed6fccce --- /dev/null +++ b/src/containers/ipfs/components/SoulCompanion/SoulCompanion.module.scss @@ -0,0 +1,28 @@ +.wrapper { + max-width: 62%; + margin: 20px auto; +} + +.itemLinks { + display: flex; + list-style-type: none; + justify-content: center; + font-size: 16px; +} + +.itemText { + font-size: 14px; + display: block; +} + +.itemLink { + margin: 0 5px; + + // white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 140px; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; +} diff --git a/src/containers/ipfs/components/SoulCompanion/SoulCompanion.tsx b/src/containers/ipfs/components/SoulCompanion/SoulCompanion.tsx index b53d0eb59..c076aa1d7 100644 --- a/src/containers/ipfs/components/SoulCompanion/SoulCompanion.tsx +++ b/src/containers/ipfs/components/SoulCompanion/SoulCompanion.tsx @@ -1,16 +1,14 @@ import { Link } from 'react-router-dom'; -import { - ScriptingContextType, - useScripting, -} from 'src/contexts/scripting/scripting'; +import { useScripting } from 'src/contexts/scripting/scripting'; import type { ScriptMyCampanion } from 'src/services/scripting/types'; -import styles from './soulCompanion.module.scss'; import { shortenString } from 'src/utils/string'; import { ParticleCid } from 'src/types/base'; import { IPFSContentDetails } from 'src/services/ipfs/types'; import { Option } from 'src/types'; import { useEffect, useState } from 'react'; import { proxy } from 'comlink'; +import Loader2 from 'src/components/ui/Loader2'; +import styles from './SoulCompanion.module.scss'; type AskCompanionStatus = 'loading' | 'ready' | 'pending' | 'done' | 'error'; @@ -58,21 +56,20 @@ function SoulCompanion({ }, [cid]); if (status !== 'done' && metaItems) { - return ( -
{`soul companion status: ${status}`}
- ); + return ; } + + console.log('metaItems', metaItems); + return ( -
+
{metaItems.map((row, index) => (
    {(Array.isArray(row) ? row : [row]).map((item, index) => (
  • - {item.type === 'text' && ( + {/* {item.type === 'text' && (

    {item.text}

    - )} + )} */} {item.type === 'link' && ( {shortenString(item.title, 64)} diff --git a/src/containers/ipfs/components/SoulCompanion/soulCompanion.module.scss b/src/containers/ipfs/components/SoulCompanion/soulCompanion.module.scss index ba4d32dab..3ed6fccce 100644 --- a/src/containers/ipfs/components/SoulCompanion/soulCompanion.module.scss +++ b/src/containers/ipfs/components/SoulCompanion/soulCompanion.module.scss @@ -1,12 +1,13 @@ +.wrapper { + max-width: 62%; + margin: 20px auto; +} + .itemLinks { display: flex; - list-style-type: none; - font-size: 14px; -} - -.soulCompanion { - margin: -10px 0; + justify-content: center; + font-size: 16px; } .itemText { @@ -16,12 +17,12 @@ .itemLink { margin: 0 5px; - display: block; + // white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - max-width: 158px; + max-width: 140px; display: -webkit-box; - -webkit-line-clamp: 2; + -webkit-line-clamp: 1; -webkit-box-orient: vertical; } diff --git a/src/containers/ipfs/ipfs.tsx b/src/containers/ipfs/ipfs.tsx index 8d5d190ad..bbc8c914e 100644 --- a/src/containers/ipfs/ipfs.tsx +++ b/src/containers/ipfs/ipfs.tsx @@ -74,7 +74,7 @@ function Ipfs() { return ( -
    +
    {status === 'completed' && details ? ( ) : isText ? ( @@ -95,8 +95,11 @@ function Ipfs() { cid={cid} /> )} + + {details && ( + + )}
    - ); diff --git a/src/features/ipfs/hooks/useGetIPFSHash.ts b/src/features/ipfs/hooks/useGetIPFSHash.ts new file mode 100644 index 000000000..a5cafb723 --- /dev/null +++ b/src/features/ipfs/hooks/useGetIPFSHash.ts @@ -0,0 +1,18 @@ +import { useQuery } from '@tanstack/react-query'; +import { getIpfsHash } from 'src/utils/ipfs/helpers'; + +function useGetIPFSHash(content: any) { + const { data } = useQuery( + ['ipfsHash', content], + () => { + return getIpfsHash(content); + }, + { + enabled: Boolean(content), + } + ); + + return data; +} + +export default useGetIPFSHash; diff --git a/src/features/sense/ui/ActionBar/ActionBarLLM/ActionBarLLM.tsx b/src/features/sense/ui/ActionBar/ActionBarLLM/ActionBarLLM.tsx new file mode 100644 index 000000000..c57afe794 --- /dev/null +++ b/src/features/sense/ui/ActionBar/ActionBarLLM/ActionBarLLM.tsx @@ -0,0 +1,30 @@ +import { useState } from 'react'; +import { ActionBar, Button, Input } from 'src/components'; +import { llmRequest } from 'src/containers/Search/LLMSpark/LLMSpark'; + +function ActionBarLLM() { + const [text, setText] = useState(''); + + const content = ( + <> + setText(e.target.value)} + /> + + + + ); + return {content}; +} + +export default ActionBarLLM; diff --git a/src/features/sense/ui/Sense.module.scss b/src/features/sense/ui/Sense.module.scss index 15ee91d70..9a3b9bc0c 100644 --- a/src/features/sense/ui/Sense.module.scss +++ b/src/features/sense/ui/Sense.module.scss @@ -1,13 +1,11 @@ -@import '../../../layouts/variables.module.scss'; +@import '../../../layouts/variables.module'; .wrapper { display: flex; align-content: stretch; - height: 100%; - max-height: calc( - 100vh - $reservedTopHeight - $actionBarHeight - ); + min-height: 50vh; + max-height: calc(100vh - $reservedTopHeight - $actionBarHeight); &.NotOwner { max-height: calc( diff --git a/src/features/sense/ui/Sense.tsx b/src/features/sense/ui/Sense.tsx index b2061e2c9..c1c04a40a 100644 --- a/src/features/sense/ui/Sense.tsx +++ b/src/features/sense/ui/Sense.tsx @@ -14,6 +14,7 @@ import { convertTimestampToString } from 'src/utils/date'; import { useRobotContext } from 'src/pages/robot/robot.context'; import ActionBar from './ActionBar/ActionBar'; import styles from './Sense.module.scss'; +import ActionBarLLM from './ActionBar/ActionBarLLM/ActionBarLLM'; export type AdviserProps = { adviser: { @@ -48,6 +49,8 @@ function Sense({ urlSenseId }: { urlSenseId?: string }) { const [error, setError] = useState(); const [adviserText, setAdviserText] = useState(''); + const [isLLMFilter, setIsLLMFilter] = useState(false); + useEffect(() => { if (!selected || !senseApi) { return; @@ -137,12 +140,16 @@ function Sense({ urlSenseId }: { urlSenseId?: string }) { }} selected={selected} adviser={adviserProps} + setFilter={setIsLLMFilter} /> )}
    - + {!isLLMFilter && ( + + )} + {isLLMFilter && } ); } diff --git a/src/features/sense/ui/SenseList/SenseList.module.scss b/src/features/sense/ui/SenseList/SenseList.module.scss index 7894cd45a..c1a62f36c 100644 --- a/src/features/sense/ui/SenseList/SenseList.module.scss +++ b/src/features/sense/ui/SenseList/SenseList.module.scss @@ -4,20 +4,22 @@ width: 300px; .center { - margin: auto; + display: block; color: #616161; + text-align: center; + margin-top: 100%; } - > div { - display: flex; - flex-direction: column; - } + // > div { + // display: flex; + // flex-direction: column; + // } > ul { li { &, &:not(:last-child) { - border-bottom: 1px solid rgba(255, 255, 255, 0.11); + border-bottom: 1px solid rgb(255 255 255 / 11%); } } } @@ -41,7 +43,6 @@ height: 100%; left: 0; top: -$blur; - filter: blur($blur); } @@ -53,6 +54,7 @@ > * { width: 30px; + label { font-size: 20px; display: block; diff --git a/src/features/sense/ui/SenseList/SenseList.tsx b/src/features/sense/ui/SenseList/SenseList.tsx index fadb32f22..781375c5f 100644 --- a/src/features/sense/ui/SenseList/SenseList.tsx +++ b/src/features/sense/ui/SenseList/SenseList.tsx @@ -1,22 +1,22 @@ import { useState } from 'react'; import { useAppSelector } from 'src/redux/hooks'; -import styles from './SenseList.module.scss'; import Display from 'src/components/containerGradient/Display/Display'; import Loader2 from 'src/components/ui/Loader2'; import cx from 'classnames'; +import { isParticle } from 'src/features/particle/utils'; +import styles from './SenseList.module.scss'; import SenseListFilters from './SenseListFilters/SenseListFilters'; import { Filters } from '../types'; import { AdviserProps } from '../Sense'; import SenseListItemContainer from './SenseListItem/SenseListItem.container'; -import { isParticle } from 'src/features/particle/utils'; type Props = { select: (id: string) => void; selected?: string; } & AdviserProps; -function SenseList({ select, selected }: Props) { +function SenseList({ select, selected, setFilter: setFilterParent }: Props) { const [filter, setFilter] = useState(Filters.All); const senseList = useAppSelector((store) => store.sense.list); @@ -34,6 +34,10 @@ function SenseList({ select, selected }: Props) { }); } + if (filter === Filters.LLM) { + items = []; + } + function getFilterText(filter: Filters) { switch (filter) { case Filters.Neuron: @@ -53,7 +57,10 @@ function SenseList({ select, selected }: Props) {
    setFilter(filter)} + onChangeFilter={(filter: Filters) => { + setFilter(filter); + setFilterParent(filter === Filters.LLM); + }} />
    diff --git a/src/features/sense/ui/SenseList/SenseListFilters/SenseListFilters.tsx b/src/features/sense/ui/SenseList/SenseListFilters/SenseListFilters.tsx index 9f386dd29..9a46a4bc8 100644 --- a/src/features/sense/ui/SenseList/SenseListFilters/SenseListFilters.tsx +++ b/src/features/sense/ui/SenseList/SenseListFilters/SenseListFilters.tsx @@ -19,6 +19,10 @@ const config = { label: '@', tooltip: 'Neuron', }, + // [Filters.LLM]: { + // label: 'llm', + // tooltip: '', + // }, }; function SenseListFilters({ selected, onChangeFilter }: Props) { diff --git a/src/features/sense/ui/types.ts b/src/features/sense/ui/types.ts index 8e9d5bf44..e829e715e 100644 --- a/src/features/sense/ui/types.ts +++ b/src/features/sense/ui/types.ts @@ -2,10 +2,5 @@ export enum Filters { All, Particle, Neuron, -} - -export enum SupportedTypes { - // MsgCyberlink = 'cyber.graph.v1beta1.MsgCyberlink', - MsgSend = 'cosmos.bank.v1beta1.MsgSend', - MsgMultiSend = 'cosmos.bank.v1beta1.MsgMultiSend', + LLM, } diff --git a/src/utils/dev.ts b/src/utils/dev.ts new file mode 100644 index 000000000..c18c50e28 --- /dev/null +++ b/src/utils/dev.ts @@ -0,0 +1,3 @@ +export function isDevEnv() { + return process.env.NODE_ENV === 'development'; +} diff --git a/yarn.lock b/yarn.lock index 2a7b650e1..3aea7bdbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -98,6 +98,94 @@ uuid "^8.3.2" xml2js "^0.4.23" +"@ai-sdk/openai@^0.0.63": + version "0.0.63" + resolved "https://registry.yarnpkg.com/@ai-sdk/openai/-/openai-0.0.63.tgz#1e8345d254e5ad775446d7f77f0d21c127d4de5f" + integrity sha512-VX4yDfP1zoKIoKqkFuBJGPjQ7aYFxE2GgPW8hMAolCBolQyx3+0+mgID+JmU5Jaq3PAPWtxWuuiwasPqh+e8zQ== + dependencies: + "@ai-sdk/provider" "0.0.24" + "@ai-sdk/provider-utils" "1.0.20" + +"@ai-sdk/provider-utils@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-1.0.2.tgz#9ae1b277721b86985aec97a504c655993cce5980" + integrity sha512-57f6O4OFVNEpI8Z8o+K40tIB3YQiTw+VCql/qrAO9Utq7Ti1o6+X9tvm177DlZJL7ft0Rwzvgy48S9YhrEKgmA== + dependencies: + "@ai-sdk/provider" "0.0.12" + eventsource-parser "1.1.2" + nanoid "3.3.6" + secure-json-parse "2.7.0" + +"@ai-sdk/provider-utils@1.0.20": + version "1.0.20" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-1.0.20.tgz#46175945dc32ad2d76cb5447738bcac3ad59dbcb" + integrity sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow== + dependencies: + "@ai-sdk/provider" "0.0.24" + eventsource-parser "1.1.2" + nanoid "3.3.6" + secure-json-parse "2.7.0" + +"@ai-sdk/provider@0.0.12": + version "0.0.12" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-0.0.12.tgz#74d594c1bfd498ac6411610d37aacbf40adabba0" + integrity sha512-oOwPQD8i2Ynpn22cur4sk26FW3mSy6t6/X/K1Ay2yGBKYiSpRyLfObhOrZEGsXDx+3euKy4nEZ193R36NM+tpQ== + dependencies: + json-schema "0.4.0" + +"@ai-sdk/provider@0.0.24": + version "0.0.24" + resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-0.0.24.tgz#e794f4255a833c47aeffcd8f6808a79b2a6b1f06" + integrity sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ== + dependencies: + json-schema "0.4.0" + +"@ai-sdk/react@0.0.62": + version "0.0.62" + resolved "https://registry.yarnpkg.com/@ai-sdk/react/-/react-0.0.62.tgz#e8ca0eab63be9a4122f676e73749541dc607d53c" + integrity sha512-1asDpxgmeHWL0/EZPCLENxfOHT+0jce0z/zasRhascodm2S6f6/KZn5doLG9jdmarcb+GjMjFmmwyOVXz3W1xg== + dependencies: + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/ui-utils" "0.0.46" + swr "2.2.5" + +"@ai-sdk/solid@0.0.49": + version "0.0.49" + resolved "https://registry.yarnpkg.com/@ai-sdk/solid/-/solid-0.0.49.tgz#5ba1f2ffbfc6bf44443e6b439afc756958ea1222" + integrity sha512-KnfWTt640cS1hM2fFIba8KHSPLpOIWXtEm28pNCHTvqasVKlh2y/zMQANTwE18pF2nuXL9P9F5/dKWaPsaEzQw== + dependencies: + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/ui-utils" "0.0.46" + +"@ai-sdk/svelte@0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@ai-sdk/svelte/-/svelte-0.0.51.tgz#a78a1c6b4aafb9b36dd586d08b169166d23349e2" + integrity sha512-aIZJaIds+KpCt19yUDCRDWebzF/17GCY7gN9KkcA2QM6IKRO5UmMcqEYja0ZmwFQPm1kBZkF2njhr8VXis2mAw== + dependencies: + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/ui-utils" "0.0.46" + sswr "2.1.0" + +"@ai-sdk/ui-utils@0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@ai-sdk/ui-utils/-/ui-utils-0.0.46.tgz#72311a1917a370074089cc6dd8c982d272f6b836" + integrity sha512-ZG/wneyJG+6w5Nm/hy1AKMuRgjPQToAxBsTk61c9sVPUTaxo+NNjM2MhXQMtmsja2N5evs8NmHie+ExEgpL3cA== + dependencies: + "@ai-sdk/provider" "0.0.24" + "@ai-sdk/provider-utils" "1.0.20" + json-schema "0.4.0" + secure-json-parse "2.7.0" + zod-to-json-schema "3.23.2" + +"@ai-sdk/vue@0.0.53": + version "0.0.53" + resolved "https://registry.yarnpkg.com/@ai-sdk/vue/-/vue-0.0.53.tgz#1bf0fa2667243cc82bef4b540e0d0a4840666b66" + integrity sha512-FNScuIvM8N4Pj4Xto11blgI97c5cjjTelyk0M0MkyU+sLSbpQNDE78CRq5cW1oeVkJzzdv63+xh8jaFNe+2vnQ== + dependencies: + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/ui-utils" "0.0.46" + swrv "1.0.4" + "@ampproject/remapping@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" @@ -8332,6 +8420,19 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@openrouter/ai-sdk-provider@^0.0.5": + version "0.0.5" + resolved "https://registry.yarnpkg.com/@openrouter/ai-sdk-provider/-/ai-sdk-provider-0.0.5.tgz#d2d053d989695943191a6d3c6005ca783b1ffc0c" + integrity sha512-AfxXQhISpxQSeUjU/4jo9waM5GRNX6eIkfTFS9l7vHkD1TKDP81Y/dXrE0ttJeN/Kap3tPF3Jwh49me0gWwjSw== + dependencies: + "@ai-sdk/provider" "0.0.12" + "@ai-sdk/provider-utils" "1.0.2" + +"@opentelemetry/api@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" + integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== + "@peculiar/asn1-schema@^2.3.8": version "2.3.8" resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz#04b38832a814e25731232dd5be883460a156da3b" @@ -10423,6 +10524,11 @@ resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.2.tgz#8c06a975e472803b931ee73740aeebd0a2eb27ae" integrity sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g== +"@types/diff-match-patch@^1.0.36": + version "1.0.36" + resolved "https://registry.yarnpkg.com/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz#dcef10a69d357fe9d43ac4ff2eca6b85dbf466af" + integrity sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg== + "@types/dns-packet@*": version "5.2.4" resolved "https://registry.yarnpkg.com/@types/dns-packet/-/dns-packet-5.2.4.tgz#0de4ee48f900a62b014ce61a3c9ab5d33dc06b0d" @@ -11679,6 +11785,26 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ai@^3.4.7: + version "3.4.7" + resolved "https://registry.yarnpkg.com/ai/-/ai-3.4.7.tgz#39fb4f95ea1cdbd1df076daee756b3635a5335e4" + integrity sha512-SutkVjFE86+xNql7fJERJkSEwpILEuiQvCoogJef6ZX/PGHvu3yepwHwVwedgABXe9SudOIKN48EQESrXX/xCw== + dependencies: + "@ai-sdk/provider" "0.0.24" + "@ai-sdk/provider-utils" "1.0.20" + "@ai-sdk/react" "0.0.62" + "@ai-sdk/solid" "0.0.49" + "@ai-sdk/svelte" "0.0.51" + "@ai-sdk/ui-utils" "0.0.46" + "@ai-sdk/vue" "0.0.53" + "@opentelemetry/api" "1.9.0" + eventsource-parser "1.1.2" + json-schema "0.4.0" + jsondiffpatch "0.6.0" + nanoid "3.3.6" + secure-json-parse "2.7.0" + zod-to-json-schema "3.23.2" + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -13649,6 +13775,11 @@ chalk@^5.0.1: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== +chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + change-case-all@1.0.14: version "1.0.14" resolved "https://registry.yarnpkg.com/change-case-all/-/change-case-all-1.0.14.tgz#bac04da08ad143278d0ac3dda7eccd39280bfba1" @@ -13997,6 +14128,11 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +client-only@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + clipboardy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-3.0.0.tgz#f3876247404d334c9ed01b6f269c11d09a5e3092" @@ -16201,6 +16337,11 @@ dexie@^3.0.2: resolved "https://registry.yarnpkg.com/dexie/-/dexie-3.2.3.tgz#f35c91ca797599df8e771b998e9ae9669c877f8c" integrity sha512-iHayBd4UYryDCVUNa3PMsJMEnd8yjyh5p7a+RFeC8i8n476BC9wMhVvqiImq5zJZJf5Tuer+s4SSj+AA3x+ZbQ== +diff-match-patch@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" + integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== + diff-sequences@^29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" @@ -17728,6 +17869,11 @@ events@^3.0.0, events@^3.2.0, events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +eventsource-parser@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-1.1.2.tgz#ed6154a4e3dbe7cda9278e5e35d2ffc58b309f89" + integrity sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA== + evergreen-ui@^4.15.0: version "4.29.1" resolved "https://registry.yarnpkg.com/evergreen-ui/-/evergreen-ui-4.29.1.tgz#6b79d9b38504c75be5c68f4ed53ad50598650f43" @@ -23332,6 +23478,15 @@ json5@^2.1.1, json5@^2.1.2, json5@^2.2.0, json5@^2.2.2, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsondiffpatch@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz#daa6a25bedf0830974c81545568d5f671c82551f" + integrity sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ== + dependencies: + "@types/diff-match-patch" "^1.0.36" + chalk "^5.3.0" + diff-match-patch "^1.0.5" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -25821,7 +25976,7 @@ nano-json-stream-parser@^0.1.2: resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== -nanoid@^3.1.20, nanoid@^3.1.23, nanoid@^3.3.6: +nanoid@3.3.6, nanoid@^3.1.20, nanoid@^3.1.23, nanoid@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== @@ -30561,6 +30716,11 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" +secure-json-parse@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== + seedrandom@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" @@ -31348,6 +31508,13 @@ ssri@^8.0.1: dependencies: minipass "^3.1.1" +sswr@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sswr/-/sswr-2.1.0.tgz#1eb64cd647cc9e11f871e7f43554abd8c64e1103" + integrity sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ== + dependencies: + swrev "^4.0.0" + stable@^0.1.8, stable@~0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -31532,7 +31699,7 @@ string-to-arraybuffer@^1.0.0: atob-lite "^2.0.0" is-base64 "^0.1.0" -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -31558,15 +31725,6 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - 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" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -31699,7 +31857,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -31720,13 +31878,6 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" @@ -32141,11 +32292,29 @@ swc-loader@^0.2.3: resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.3.tgz#6792f1c2e4c9ae9bf9b933b3e010210e270c186d" integrity sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A== +swr@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.2.5.tgz#063eea0e9939f947227d5ca760cc53696f46446b" + integrity sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg== + dependencies: + client-only "^0.0.1" + use-sync-external-store "^1.2.0" + swr@^1.0.1: version "1.3.0" resolved "https://registry.yarnpkg.com/swr/-/swr-1.3.0.tgz#c6531866a35b4db37b38b72c45a63171faf9f4e8" integrity sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw== +swrev@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/swrev/-/swrev-4.0.0.tgz#83da6983c7ef9d71ac984a9b169fc197cbf18ff8" + integrity sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA== + +swrv@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/swrv/-/swrv-1.0.4.tgz#278b4811ed4acbb1ae46654972a482fd1847e480" + integrity sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g== + symbol-observable@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -34946,7 +35115,7 @@ world-calendars@^1.0.3: dependencies: object-assign "^4.1.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -34973,15 +35142,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -35341,6 +35501,11 @@ zero-crossings@^1.0.0: dependencies: cwise-compiler "^1.0.0" +zod-to-json-schema@3.23.2: + version "3.23.2" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.2.tgz#bc7e379c8050462538383e382964c03d8fe008f9" + integrity sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw== + zod@^3.21.4: version "3.22.4" resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff"