From f3b93ab465c4d30c4550a82e582dbba4420a9688 Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Fri, 21 Mar 2025 01:49:32 +0800 Subject: [PATCH] feat(stage-web|stage-tamagotchi|server-sdk|server-runtime|server-shared|stage-ui): added new events for ui:configure, and module:configure, and added basic implementation of the memory-pgvector process holding, also adjusted the border style of radio set of card --- .../src/renderer/locales/en.yml | 2 + .../src/renderer/locales/zh-CN.yml | 3 + .../src/renderer/src/pages/settings/index.vue | 2 +- .../src/pages/settings/models/index.vue | 2 +- .../pages/settings/modules/consciousness.vue | 2 +- .../src/pages/settings/modules/index.vue | 2 +- .../src/pages/settings/providers/index.vue | 2 +- .../src/pages/settings/themes/index.vue | 2 +- apps/stage-web/locales/en.yml | 2 + apps/stage-web/locales/zh-CN.yml | 3 + apps/stage-web/package.json | 9 +- apps/stage-web/src/pages/settings/index.vue | 13 ++- .../src/pages/settings/memory/index.vue | 30 +++++ .../src/pages/settings/models/index.vue | 2 +- .../pages/settings/modules/consciousness.vue | 2 +- .../src/pages/settings/modules/index.vue | 6 +- .../settings/modules/memory-long-term.vue | 33 ++++++ .../settings/modules/memory-short-term.vue | 33 ++++++ .../src/pages/settings/providers/index.vue | 2 +- .../src/pages/settings/themes/index.vue | 2 +- packages/memory-pgvector/package.json | 21 ++++ packages/memory-pgvector/src/index.ts | 15 +++ packages/memory-pgvector/src/utils/process.ts | 30 +++++ packages/memory-pgvector/tsconfig.json | 18 +++ packages/server-runtime/src/index.ts | 25 ++++- packages/server-runtime/src/types/conn.ts | 7 +- packages/server-sdk/src/client.ts | 62 ++++++++--- .../src/types/websocket/events.ts | 18 ++- packages/stage-ui/package.json | 1 + .../src/components/Form/Radio/Radio.vue | 2 +- .../components/Form/Radio/RadioCardDetail.vue | 2 +- .../components/Form/Radio/RadioCardSimple.vue | 2 +- .../src/components/Form/VoiceCard.vue | 2 +- .../Providers/ProviderSettingsLayout.vue | 2 +- .../Providers/ProviderSettingsLayout2.vue | 2 +- packages/stage-ui/src/stores/index.ts | 1 + packages/stage-ui/src/stores/server.ts | 27 +++++ pnpm-lock.yaml | 104 ++++++++++++------ 38 files changed, 408 insertions(+), 87 deletions(-) create mode 100644 apps/stage-web/src/pages/settings/memory/index.vue create mode 100644 apps/stage-web/src/pages/settings/modules/memory-long-term.vue create mode 100644 apps/stage-web/src/pages/settings/modules/memory-short-term.vue create mode 100644 packages/memory-pgvector/package.json create mode 100644 packages/memory-pgvector/src/index.ts create mode 100644 packages/memory-pgvector/src/utils/process.ts create mode 100644 packages/memory-pgvector/tsconfig.json create mode 100644 packages/stage-ui/src/stores/server.ts diff --git a/apps/stage-tamagotchi/src/renderer/locales/en.yml b/apps/stage-tamagotchi/src/renderer/locales/en.yml index 6e431264e..53474f506 100644 --- a/apps/stage-tamagotchi/src/renderer/locales/en.yml +++ b/apps/stage-tamagotchi/src/renderer/locales/en.yml @@ -67,6 +67,8 @@ settings: models: description: Live2D, VRM, etc. title: Models + memory: + description: Where memories got stored, and organized modules: consciousness: description: Personality, desired model, etc. diff --git a/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml b/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml index 8e8ff8277..ca9b1e5ba 100644 --- a/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml +++ b/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml @@ -50,6 +50,9 @@ settings: microphone: 麦克风 models: 模型 pages: + memory: + description: 存放记忆的地方,以及策略 + title: 记忆体 models: description: 切换角色的 Live2D,VRM 模型 title: 角色模型 diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue index 6537cd65c..81619a4b5 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue @@ -207,7 +207,7 @@ function handleLanguageChange(event: Event) { -
+
diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue index 5ad418260..947420c5f 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue @@ -67,7 +67,7 @@ async function extractColorsFromModel() {
-
+
diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/consciousness.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/consciousness.vue index fc43ef65a..e9c4df044 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/consciousness.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/consciousness.vue @@ -214,7 +214,7 @@ function updateCustomModelName(value: string) {
-
+
diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue index 21c46b197..e300c265e 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue @@ -142,7 +142,7 @@ const modulesList = computed(() => [ :configured="module.configured" />
-
+
diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/index.vue index 6dad4b874..7ed841d8f 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/index.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/index.vue @@ -50,7 +50,7 @@ const { allProvidersMetadata } = storeToRefs(providersStore) :configured="provider.configured" />
-
+
diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/themes/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/themes/index.vue index 76683f174..dfa6f2851 100644 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/themes/index.vue +++ b/apps/stage-tamagotchi/src/renderer/src/pages/settings/themes/index.vue @@ -368,7 +368,7 @@ function isColorSelected(hexColor: string): boolean {
-
+
diff --git a/apps/stage-web/locales/en.yml b/apps/stage-web/locales/en.yml index 1acf1ba64..ef0f96fc8 100644 --- a/apps/stage-web/locales/en.yml +++ b/apps/stage-web/locales/en.yml @@ -67,6 +67,8 @@ settings: microphone: Microphone models: Model pages: + memory: + description: Where memories got stored, and organized models: description: Live2D, VRM, etc. title: Models diff --git a/apps/stage-web/locales/zh-CN.yml b/apps/stage-web/locales/zh-CN.yml index b087388fd..94517681b 100644 --- a/apps/stage-web/locales/zh-CN.yml +++ b/apps/stage-web/locales/zh-CN.yml @@ -53,6 +53,9 @@ settings: microphone: 麦克风 models: 模型 pages: + memory: + description: 存放记忆的地方,以及策略 + title: 记忆体 models: description: 切换角色的 Live2D,VRM 模型 title: 角色模型 diff --git a/apps/stage-web/package.json b/apps/stage-web/package.json index 8e1759e82..1abc37bfe 100644 --- a/apps/stage-web/package.json +++ b/apps/stage-web/package.json @@ -36,7 +36,12 @@ "@pixiv/three-vrm": "^3.3.6", "@pixiv/three-vrm-animation": "^3.3.6", "@pixiv/three-vrm-core": "^3.3.6", + "@proj-airi/drizzle-duckdb-wasm": "workspace:^", + "@proj-airi/elevenlabs": "workspace:^", + "@proj-airi/provider-transformers": "workspace:^", + "@proj-airi/server-sdk": "workspace:^", "@proj-airi/stage-ui": "workspace:^", + "@proj-airi/ui-transitions": "workspace:^", "@ricky0123/vad-web": "^0.0.22", "@standard-schema/spec": "^1.0.0", "@tresjs/cientos": "^4.2.0", @@ -97,11 +102,7 @@ "@iconify-json/vscode-icons": "^1.2.16", "@iconify/utils": "^2.3.0", "@intlify/unplugin-vue-i18n": "^6.0.5", - "@proj-airi/drizzle-duckdb-wasm": "workspace:^", - "@proj-airi/elevenlabs": "workspace:^", "@proj-airi/lobe-icons": "^1.0.4", - "@proj-airi/provider-transformers": "workspace:^", - "@proj-airi/ui-transitions": "workspace:^", "@proj-airi/unplugin-fetch": "^0.1.4", "@proj-airi/unplugin-live2d-sdk": "^0.1.2", "@shikijs/markdown-it": "^3.2.1", diff --git a/apps/stage-web/src/pages/settings/index.vue b/apps/stage-web/src/pages/settings/index.vue index 6537cd65c..28182effe 100644 --- a/apps/stage-web/src/pages/settings/index.vue +++ b/apps/stage-web/src/pages/settings/index.vue @@ -56,6 +56,17 @@ function handleLanguageChange(event: Event) { icon="i-lucide:person-standing" to="/settings/models" /> +
-
+
diff --git a/apps/stage-web/src/pages/settings/memory/index.vue b/apps/stage-web/src/pages/settings/memory/index.vue new file mode 100644 index 000000000..f49297e8c --- /dev/null +++ b/apps/stage-web/src/pages/settings/memory/index.vue @@ -0,0 +1,30 @@ + + + diff --git a/apps/stage-web/src/pages/settings/models/index.vue b/apps/stage-web/src/pages/settings/models/index.vue index 8dbfa31f7..ab8e7eb21 100644 --- a/apps/stage-web/src/pages/settings/models/index.vue +++ b/apps/stage-web/src/pages/settings/models/index.vue @@ -68,7 +68,7 @@ async function extractColorsFromModel() {
-
+
diff --git a/apps/stage-web/src/pages/settings/modules/consciousness.vue b/apps/stage-web/src/pages/settings/modules/consciousness.vue index fc43ef65a..e9c4df044 100644 --- a/apps/stage-web/src/pages/settings/modules/consciousness.vue +++ b/apps/stage-web/src/pages/settings/modules/consciousness.vue @@ -214,7 +214,7 @@ function updateCustomModelName(value: string) {
-
+
diff --git a/apps/stage-web/src/pages/settings/modules/index.vue b/apps/stage-web/src/pages/settings/modules/index.vue index d09746411..165a939d2 100644 --- a/apps/stage-web/src/pages/settings/modules/index.vue +++ b/apps/stage-web/src/pages/settings/modules/index.vue @@ -57,7 +57,7 @@ const modulesList = computed(() => [ name: t('settings.pages.modules.memory-short-term.title'), description: t('settings.pages.modules.memory-short-term.description'), icon: 'i-lucide:book', - to: '', + to: '/settings/modules/memory-short-term', configured: false, }, { @@ -65,7 +65,7 @@ const modulesList = computed(() => [ name: t('settings.pages.modules.memory-long-term.title'), description: t('settings.pages.modules.memory-long-term.description'), icon: 'i-lucide:book-copy', - to: '', + to: '/settings/modules/memory-long-term', configured: false, }, { @@ -142,7 +142,7 @@ const modulesList = computed(() => [ :configured="module.configured" />
-
+
diff --git a/apps/stage-web/src/pages/settings/modules/memory-long-term.vue b/apps/stage-web/src/pages/settings/modules/memory-long-term.vue new file mode 100644 index 000000000..0ccec0404 --- /dev/null +++ b/apps/stage-web/src/pages/settings/modules/memory-long-term.vue @@ -0,0 +1,33 @@ + + + diff --git a/apps/stage-web/src/pages/settings/modules/memory-short-term.vue b/apps/stage-web/src/pages/settings/modules/memory-short-term.vue new file mode 100644 index 000000000..0aa8cc944 --- /dev/null +++ b/apps/stage-web/src/pages/settings/modules/memory-short-term.vue @@ -0,0 +1,33 @@ + + + diff --git a/apps/stage-web/src/pages/settings/providers/index.vue b/apps/stage-web/src/pages/settings/providers/index.vue index 6dad4b874..7ed841d8f 100644 --- a/apps/stage-web/src/pages/settings/providers/index.vue +++ b/apps/stage-web/src/pages/settings/providers/index.vue @@ -50,7 +50,7 @@ const { allProvidersMetadata } = storeToRefs(providersStore) :configured="provider.configured" />
-
+
diff --git a/apps/stage-web/src/pages/settings/themes/index.vue b/apps/stage-web/src/pages/settings/themes/index.vue index 76683f174..dfa6f2851 100644 --- a/apps/stage-web/src/pages/settings/themes/index.vue +++ b/apps/stage-web/src/pages/settings/themes/index.vue @@ -368,7 +368,7 @@ function isColorSelected(hexColor: string): boolean {
-
+
diff --git a/packages/memory-pgvector/package.json b/packages/memory-pgvector/package.json new file mode 100644 index 000000000..354382202 --- /dev/null +++ b/packages/memory-pgvector/package.json @@ -0,0 +1,21 @@ +{ + "name": "@proj-airi/memory-pgvector", + "type": "module", + "version": "1.0.0", + "description": "", + "author": "", + "license": "MIT", + "keywords": [], + "scripts": { + "dev": "tsx src/index.ts" + }, + "dependencies": { + "@guiiai/logg": "^1.0.7", + "@proj-airi/server-sdk": "workspace:^", + "drizzle-orm": "^0.40.1", + "postgres": "^3.4.5" + }, + "devDependencies": { + "tsx": "^4.19.3" + } +} diff --git a/packages/memory-pgvector/src/index.ts b/packages/memory-pgvector/src/index.ts new file mode 100644 index 000000000..77c22f0eb --- /dev/null +++ b/packages/memory-pgvector/src/index.ts @@ -0,0 +1,15 @@ +import { Format, LogLevel, setGlobalFormat, setGlobalLogLevel } from '@guiiai/logg' +import { Client } from '@proj-airi/server-sdk' + +import { runUntilSignal } from './utils/process' + +setGlobalFormat(Format.Pretty) +setGlobalLogLevel(LogLevel.Log) + +async function main() { + const _client = new Client<{ connectionString: string }>({ name: 'memory-pgvector' }) + + runUntilSignal() +} + +main() diff --git a/packages/memory-pgvector/src/utils/process.ts b/packages/memory-pgvector/src/utils/process.ts new file mode 100644 index 000000000..f33e4956f --- /dev/null +++ b/packages/memory-pgvector/src/utils/process.ts @@ -0,0 +1,30 @@ +import process from 'node:process' +import { useLogg } from '@guiiai/logg' + +const logger = useLogg('process').useGlobalConfig() + +let running = true + +function killProcess() { + running = false +} + +process.on('SIGTERM', () => { + logger.log('SIGTERM received') + killProcess() +}) +process.on('SIGINT', () => { + logger.log('SIGINT received') + killProcess() +}) +process.on('uncaughtException', (e) => { + logger.withError(e).error('uncaught exception') + killProcess() +}) + +export function runUntilSignal() { + setTimeout(() => { + if (running) + runUntilSignal() + }, 10) +} diff --git a/packages/memory-pgvector/tsconfig.json b/packages/memory-pgvector/tsconfig.json new file mode 100644 index 000000000..00dcfd807 --- /dev/null +++ b/packages/memory-pgvector/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": [ + "ESNext" + ], + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "skipLibCheck": true + }, + "include": [ + "src/**/*.ts" + ] +} diff --git a/packages/server-runtime/src/index.ts b/packages/server-runtime/src/index.ts index e20291531..d5d70d465 100644 --- a/packages/server-runtime/src/index.ts +++ b/packages/server-runtime/src/index.ts @@ -30,11 +30,11 @@ function main() { open: (peer) => { const token = env.AUTHENTICATION_TOKEN || '' if (token) { - peers.set(peer.id, { peer, authenticated: false }) + peers.set(peer.id, { peer, authenticated: false, name: '' }) } else { send(peer, { type: 'module:authenticated', data: { authenticated: true } }) - peers.set(peer.id, { peer, authenticated: true }) + peers.set(peer.id, { peer, authenticated: true, name: '' }) } websocketLogger.withFields({ peer: peer.id, activePeers: peers.size }).log('connected') @@ -52,7 +52,26 @@ function main() { } send(peer, { type: 'module:authenticated', data: { authenticated: true } }) - peers.set(peer.id, { peer, authenticated: true }) + peers.set(peer.id, { peer, authenticated: true, name: '' }) + return + case 'module:announce': + peers.set(peer.id, { peer, authenticated: true, name: event.data.name }) + return + case 'ui:configure': + peers.forEach((p) => { + if (p.name === '') { + return + } + if ((typeof p.index !== 'undefined' && typeof event.data.moduleIndex !== 'undefined' && p.name === event.data.moduleName && p.index === event.data.moduleIndex)) { + return + } + if (p.name !== event.data.moduleName) { + return + } + + p.peer.send(JSON.stringify({ type: 'module:configure', data: { config: event.data.config } } as WebSocketEvent)) + }) + return } if (!peers.get(peer.id)?.authenticated) { diff --git a/packages/server-runtime/src/types/conn.ts b/packages/server-runtime/src/types/conn.ts index 2e1cd3e93..654aa59ee 100644 --- a/packages/server-runtime/src/types/conn.ts +++ b/packages/server-runtime/src/types/conn.ts @@ -1,6 +1,11 @@ import type { Peer } from 'crossws' -export interface AuthenticatedPeer { +export interface NamedPeer { + name: string + index?: number peer: Peer +} + +export interface AuthenticatedPeer extends NamedPeer { authenticated: boolean } diff --git a/packages/server-sdk/src/client.ts b/packages/server-sdk/src/client.ts index 92877b79d..89feabf61 100644 --- a/packages/server-sdk/src/client.ts +++ b/packages/server-sdk/src/client.ts @@ -6,32 +6,47 @@ import { defu } from 'defu' import { sleep } from './utils' -export interface ClientOptions { +export interface ClientOptions { url?: string name: string - possibleEvents?: Array<(keyof WebSocketEvents)> + possibleEvents?: Array<(keyof WebSocketEvents)> token?: string + onError?: (error: unknown) => void + onClose?: () => void + autoConnect?: boolean + autoReconnect?: boolean } -export class Client { - private opts: Required +export class Client { + private connected = false + private opts: Required> private websocket: WebSocket - private eventListeners: Map< - keyof WebSocketEvents, - Array<(data: WebSocketBaseEvent< - keyof WebSocketEvents, - WebSocketEvents[keyof WebSocketEvents] - >) => void | Promise> - > = new Map() + private eventListeners: Map, WebSocketEvents[keyof WebSocketEvents]>) => void | Promise>> = new Map() private authenticateAttempts = 0 - constructor(options: ClientOptions) { - this.opts = defu, Required>[]>( + constructor(options: ClientOptions) { + this.opts = defu>, Required, 'name' | 'token'>>[]>( options, - { url: 'ws://localhost:6121/ws', possibleEvents: [] }, + { + url: 'ws://localhost:6121/ws', + possibleEvents: [], + onError: () => { }, + onClose: () => { }, + autoConnect: true, + autoReconnect: true, + }, ) + if (this.opts.autoConnect) { + this.connect() + } + } + + connect() { + if (this.connected) + return + this.websocket = new WebSocket(this.opts.url) this.onEvent('module:authenticated', async (event) => { @@ -46,6 +61,10 @@ export class Client { } }) + this.websocket.onerror = (event) => { + this.opts.onError?.(event) + } + this.websocket.onmessage = this.handleMessage.bind(this) this.websocket.onopen = () => { @@ -55,10 +74,17 @@ export class Client { else { this.tryAnnounce() } + + this.connected = true } this.websocket.onclose = () => { + this.connected = false this.authenticateAttempts = 0 + this.opts.onClose?.() + if (this.opts.autoReconnect) { + this.connect() + } } } @@ -79,7 +105,7 @@ export class Client { } private async handleMessage(event: any) { - const data = JSON.parse(event.data) as WebSocketEvent + const data = JSON.parse(event.data) as WebSocketEvent const listeners = this.eventListeners.get(data.type) if (!listeners) return @@ -88,9 +114,9 @@ export class Client { await listener(data) } - onEvent( + onEvent>( event: E, - callback: (data: WebSocketBaseEvent) => void | Promise, + callback: (data: WebSocketBaseEvent[E]>) => void | Promise, ): void { if (!this.eventListeners.get(event)) { this.eventListeners.set(event, []) @@ -101,7 +127,7 @@ export class Client { this.eventListeners.set(event, listeners) } - send(data: WebSocketEvent): void { + send(data: WebSocketEvent): void { this.websocket.send(JSON.stringify(data)) } diff --git a/packages/server-shared/src/types/websocket/events.ts b/packages/server-shared/src/types/websocket/events.ts index 1f82cb7ce..f0ff0e5eb 100644 --- a/packages/server-shared/src/types/websocket/events.ts +++ b/packages/server-shared/src/types/websocket/events.ts @@ -28,7 +28,7 @@ export type WithInputSource = { // // A little hack for creating extensible discriminated unions : r/typescript // https://www.reddit.com/r/typescript/comments/1064ibt/a_little_hack_for_creating_extensible/ -export interface WebSocketEvents { +export interface WebSocketEvents { 'error': { message: string } @@ -40,7 +40,15 @@ export interface WebSocketEvents { } 'module:announce': { name: string - possibleEvents: Array<(keyof WebSocketEvents)> + possibleEvents: Array<(keyof WebSocketEvents)> + } + 'module:configure': { + config: C + } + 'ui:configure': { + moduleName: string + moduleIndex?: number + config: C | Record } 'input:text': { text: string @@ -53,6 +61,6 @@ export interface WebSocketEvents { } & Partial> } -export type WebSocketEvent = { - [K in keyof WebSocketEvents]: WebSocketBaseEvent; -}[keyof WebSocketEvents] +export type WebSocketEvent = { + [K in keyof WebSocketEvents]: WebSocketBaseEvent[K]>; +}[keyof WebSocketEvents] diff --git a/packages/stage-ui/package.json b/packages/stage-ui/package.json index d6a5d20f7..482e6e12b 100644 --- a/packages/stage-ui/package.json +++ b/packages/stage-ui/package.json @@ -57,6 +57,7 @@ }, "dependencies": { "@formkit/auto-animate": "^0.8.2", + "@proj-airi/server-sdk": "workspace:^", "@vueuse/motion": "^3.0.3", "reka-ui": "^2.1.0", "unist-builder": "^4.0.0", diff --git a/packages/stage-ui/src/components/Form/Radio/Radio.vue b/packages/stage-ui/src/components/Form/Radio/Radio.vue index a5816baa9..aae5a83a5 100644 --- a/packages/stage-ui/src/components/Form/Radio/Radio.vue +++ b/packages/stage-ui/src/components/Form/Radio/Radio.vue @@ -21,7 +21,7 @@ const modelValue = defineModel({ required: true }) :class="[ modelValue === value ? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900 hover:border-primary-500/30 dark:hover:border-primary-400/30' - : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-700 hover:border-primary-500/30 dark:hover:border-primary-400/30', + : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-900 hover:border-primary-500/30 dark:hover:border-primary-400/30', modelValue === value ? 'form_radio-active' : '', diff --git a/packages/stage-ui/src/components/Form/Radio/RadioCardDetail.vue b/packages/stage-ui/src/components/Form/Radio/RadioCardDetail.vue index 3912cedac..54532c900 100644 --- a/packages/stage-ui/src/components/Form/Radio/RadioCardDetail.vue +++ b/packages/stage-ui/src/components/Form/Radio/RadioCardDetail.vue @@ -45,7 +45,7 @@ function toggleExpansion() { :class="[ modelValue === value ? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900 hover:border-primary-500/30 dark:hover:border-primary-400/30' - : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-700 hover:border-primary-500/30 dark:hover:border-primary-400/30', + : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-900 hover:border-primary-500/30 dark:hover:border-primary-400/30', modelValue === value ? 'form_radio-card-detail-active' : '', diff --git a/packages/stage-ui/src/components/Form/Radio/RadioCardSimple.vue b/packages/stage-ui/src/components/Form/Radio/RadioCardSimple.vue index 1fc83fc18..54b68ce95 100644 --- a/packages/stage-ui/src/components/Form/Radio/RadioCardSimple.vue +++ b/packages/stage-ui/src/components/Form/Radio/RadioCardSimple.vue @@ -19,7 +19,7 @@ const modelValue = defineModel({ required: true }) :class="[ modelValue === value ? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900 hover:border-primary-500/30 dark:hover:border-primary-400/30' - : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-700 hover:border-primary-500/30 dark:hover:border-primary-400/30', + : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-900 hover:border-primary-500/30 dark:hover:border-primary-400/30', modelValue === value ? 'form_radio-card-simple-active' : '', diff --git a/packages/stage-ui/src/components/Form/VoiceCard.vue b/packages/stage-ui/src/components/Form/VoiceCard.vue index fd752d9ad..568897941 100644 --- a/packages/stage-ui/src/components/Form/VoiceCard.vue +++ b/packages/stage-ui/src/components/Form/VoiceCard.vue @@ -95,7 +95,7 @@ function togglePlayback() { :class="[ voiceId === props.voice.id ? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900 hover:border-primary-500/30 dark:hover:border-primary-400/30' - : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-700 hover:border-primary-500/30 dark:hover:border-primary-400/30', + : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-900 hover:border-primary-500/30 dark:hover:border-primary-400/30', voiceId === props.voice.id ? 'form_voice-card-active' : '', diff --git a/packages/stage-ui/src/components/Providers/ProviderSettingsLayout.vue b/packages/stage-ui/src/components/Providers/ProviderSettingsLayout.vue index 11a5f9f31..24a7556e4 100644 --- a/packages/stage-ui/src/components/Providers/ProviderSettingsLayout.vue +++ b/packages/stage-ui/src/components/Providers/ProviderSettingsLayout.vue @@ -29,7 +29,7 @@ defineProps<{
-
+
diff --git a/packages/stage-ui/src/components/Providers/ProviderSettingsLayout2.vue b/packages/stage-ui/src/components/Providers/ProviderSettingsLayout2.vue index a905eb1ce..422ee608f 100644 --- a/packages/stage-ui/src/components/Providers/ProviderSettingsLayout2.vue +++ b/packages/stage-ui/src/components/Providers/ProviderSettingsLayout2.vue @@ -120,7 +120,7 @@ function handleBackClick() { -
+
diff --git a/packages/stage-ui/src/stores/index.ts b/packages/stage-ui/src/stores/index.ts index a5f8f0c0c..97e46e461 100644 --- a/packages/stage-ui/src/stores/index.ts +++ b/packages/stage-ui/src/stores/index.ts @@ -3,4 +3,5 @@ export * from './chat' export * from './llm' export * from './modules' export * from './providers' +export * from './server' export * from './settings' diff --git a/packages/stage-ui/src/stores/server.ts b/packages/stage-ui/src/stores/server.ts new file mode 100644 index 000000000..d6408002e --- /dev/null +++ b/packages/stage-ui/src/stores/server.ts @@ -0,0 +1,27 @@ +import { Client } from '@proj-airi/server-sdk' +import { defineStore } from 'pinia' +import { onMounted, ref } from 'vue' + +export const useServerStore = defineStore('server', () => { + const server = ref() + + onMounted(() => { + server.value = new Client({ + name: 'stage-web', + autoConnect: false, + autoReconnect: true, + onError: (error) => { + console.error(error) + }, + }) + }) + + function connect() { + server.value?.connect() + } + + return { + server, + connect, + } +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3c2989bee..a61b62e7a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -309,7 +309,7 @@ importers: version: 0.30.5 drizzle-orm: specifier: ^0.40.1 - version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1) + version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1)(postgres@3.4.5) jszip: specifier: ^3.10.1 version: 3.10.1 @@ -418,7 +418,7 @@ importers: version: 2.3.0 '@intlify/unplugin-vue-i18n': specifier: ^6.0.5 - version: 6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.22.0(jiti@2.4.2))(rollup@2.79.1)(typescript@5.8.2)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) + version: 6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.22.0(jiti@2.4.2))(rollup@4.36.0)(typescript@5.8.2)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) '@proj-airi/drizzle-duckdb-wasm': specifier: workspace:^ version: link:../../packages/drizzle-duckdb-wasm @@ -469,7 +469,7 @@ importers: version: 3.0.0-beta.5(typescript@5.8.2)(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)) '@vueuse/motion': specifier: ^3.0.3 - version: 3.0.3(magicast@0.3.5)(rollup@2.79.1)(vue@3.5.13(typescript@5.8.2)) + version: 3.0.3(magicast@0.3.5)(rollup@4.36.0)(vue@3.5.13(typescript@5.8.2)) electron: specifier: ^34.3.3 version: 34.3.3 @@ -490,13 +490,13 @@ importers: version: 3.2.0(unocss@66.1.0-beta.6(postcss@8.5.3)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))) unplugin-auto-import: specifier: ^19.1.1 - version: 19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2))) + version: 19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.36.0))(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2))) unplugin-vue-components: specifier: ^28.4.1 - version: 28.4.1(@babel/parser@7.26.10)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(vue@3.5.13(typescript@5.8.2)) + version: 28.4.1(@babel/parser@7.26.10)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.36.0))(vue@3.5.13(typescript@5.8.2)) unplugin-vue-macros: specifier: ^2.14.5 - version: 2.14.5(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2)))(esbuild@0.25.0)(rollup@2.79.1)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)) + version: 2.14.5(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2)))(esbuild@0.25.0)(rollup@4.36.0)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)) unplugin-vue-markdown: specifier: ^28.3.1 version: 28.3.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)) @@ -505,13 +505,13 @@ importers: version: 0.12.0(vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) vite-bundle-visualizer: specifier: ^1.2.1 - version: 1.2.1(rollup@2.79.1) + version: 1.2.1(rollup@4.36.0) vite-plugin-pwa: specifier: ^0.21.1 version: 0.21.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) vite-plugin-vue-devtools: specifier: ^7.7.2 - version: 7.7.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(rollup@2.79.1)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + version: 7.7.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.36.0))(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) vite-plugin-vue-layouts: specifier: ^0.11.0 version: 0.11.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) @@ -578,9 +578,24 @@ importers: '@pixiv/three-vrm-core': specifier: ^3.3.6 version: 3.3.6(three@0.174.0) + '@proj-airi/drizzle-duckdb-wasm': + specifier: workspace:^ + version: link:../../packages/drizzle-duckdb-wasm + '@proj-airi/elevenlabs': + specifier: workspace:^ + version: link:../../packages/elevenlabs + '@proj-airi/provider-transformers': + specifier: workspace:^ + version: link:../../packages/provider-transformers + '@proj-airi/server-sdk': + specifier: workspace:^ + version: link:../../packages/server-sdk '@proj-airi/stage-ui': specifier: workspace:^ version: link:../../packages/stage-ui + '@proj-airi/ui-transitions': + specifier: workspace:^ + version: link:../../packages/ui-transitions '@ricky0123/vad-web': specifier: ^0.0.22 version: 0.0.22 @@ -646,7 +661,7 @@ importers: version: 0.30.5 drizzle-orm: specifier: ^0.40.1 - version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1) + version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1)(postgres@3.4.5) jszip: specifier: ^3.10.1 version: 3.10.1 @@ -755,22 +770,10 @@ importers: version: 2.3.0 '@intlify/unplugin-vue-i18n': specifier: ^6.0.5 - version: 6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.22.0(jiti@2.4.2))(rollup@4.36.0)(typescript@5.8.2)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) - '@proj-airi/drizzle-duckdb-wasm': - specifier: workspace:^ - version: link:../../packages/drizzle-duckdb-wasm - '@proj-airi/elevenlabs': - specifier: workspace:^ - version: link:../../packages/elevenlabs + version: 6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.22.0(jiti@2.4.2))(rollup@2.79.1)(typescript@5.8.2)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) '@proj-airi/lobe-icons': specifier: ^1.0.4 version: 1.0.4 - '@proj-airi/provider-transformers': - specifier: workspace:^ - version: link:../../packages/provider-transformers - '@proj-airi/ui-transitions': - specifier: workspace:^ - version: link:../../packages/ui-transitions '@proj-airi/unplugin-fetch': specifier: ^0.1.4 version: 0.1.4(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0) @@ -806,7 +809,7 @@ importers: version: 3.0.0-beta.5(typescript@5.8.2)(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)) '@vueuse/motion': specifier: ^3.0.3 - version: 3.0.3(magicast@0.3.5)(rollup@4.36.0)(vue@3.5.13(typescript@5.8.2)) + version: 3.0.3(magicast@0.3.5)(rollup@2.79.1)(vue@3.5.13(typescript@5.8.2)) hfup: specifier: workspace:^ version: link:../../packages/hfup @@ -818,13 +821,13 @@ importers: version: 4.0.1 unplugin-auto-import: specifier: ^19.1.1 - version: 19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.36.0))(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2))) + version: 19.1.1(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2))) unplugin-vue-components: specifier: ^28.4.1 - version: 28.4.1(@babel/parser@7.26.10)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.36.0))(vue@3.5.13(typescript@5.8.2)) + version: 28.4.1(@babel/parser@7.26.10)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(vue@3.5.13(typescript@5.8.2)) unplugin-vue-macros: specifier: ^2.14.5 - version: 2.14.5(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2)))(esbuild@0.25.0)(rollup@4.36.0)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)) + version: 2.14.5(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2)))(esbuild@0.19.12)(rollup@2.79.1)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)) unplugin-vue-markdown: specifier: ^28.3.1 version: 28.3.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)) @@ -833,13 +836,13 @@ importers: version: 0.12.0(vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) vite-bundle-visualizer: specifier: ^1.2.1 - version: 1.2.1(rollup@4.36.0) + version: 1.2.1(rollup@2.79.1) vite-plugin-pwa: specifier: ^0.21.1 version: 0.21.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) vite-plugin-vue-devtools: specifier: ^7.7.2 - version: 7.7.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.36.0))(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + version: 7.7.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@2.79.1))(rollup@2.79.1)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) vite-plugin-vue-layouts: specifier: ^0.11.0 version: 0.11.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2)) @@ -884,7 +887,7 @@ importers: version: 6.1.4 drizzle-orm: specifier: ^0.40.1 - version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1) + version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1)(postgres@3.4.5) es-toolkit: specifier: ^1.33.0 version: 1.33.0 @@ -963,7 +966,7 @@ importers: version: 6.1.4 drizzle-orm: specifier: ^0.40.1 - version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1) + version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1)(postgres@3.4.5) es-toolkit: specifier: ^1.33.0 version: 1.33.0 @@ -1006,6 +1009,25 @@ importers: specifier: ^6.2.2 version: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0) + packages/memory-pgvector: + dependencies: + '@guiiai/logg': + specifier: ^1.0.7 + version: 1.0.7 + '@proj-airi/server-sdk': + specifier: workspace:^ + version: link:../server-sdk + drizzle-orm: + specifier: ^0.40.1 + version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1)(postgres@3.4.5) + postgres: + specifier: ^3.4.5 + version: 3.4.5 + devDependencies: + tsx: + specifier: ^4.19.3 + version: 4.19.3 + packages/provider-transformers: dependencies: '@huggingface/transformers': @@ -1108,6 +1130,9 @@ importers: '@formkit/auto-animate': specifier: ^0.8.2 version: 0.8.2 + '@proj-airi/server-sdk': + specifier: workspace:^ + version: link:../server-sdk '@vueuse/motion': specifier: ^3.0.3 version: 3.0.3(magicast@0.3.5)(rollup@4.36.0)(vue@3.5.13(typescript@5.8.2)) @@ -1357,7 +1382,7 @@ importers: version: 16.4.7 drizzle-orm: specifier: ^0.40.1 - version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1) + version: 0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1)(postgres@3.4.5) es-toolkit: specifier: ^1.33.0 version: 1.33.0 @@ -9809,6 +9834,10 @@ packages: postgres-range@1.1.4: resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + postgres@3.4.5: + resolution: {integrity: sha512-cDWgoah1Gez9rN3H4165peY9qfpEo+SA61oQv65O3cRUE1pOEoJWwddwcqKE8XZYjbblOJlYDlLV4h67HrEVDg==} + engines: {node: '>=12'} + potpack@1.0.2: resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} @@ -18209,11 +18238,12 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1): + drizzle-orm@0.40.1(@types/pg@8.11.11)(gel@2.0.0)(pg@8.14.1)(postgres@3.4.5): optionalDependencies: '@types/pg': 8.11.11 gel: 2.0.0 pg: 8.14.1 + postgres: 3.4.5 dset@3.1.4: {} @@ -22185,6 +22215,8 @@ snapshots: postgres-range@1.1.4: {} + postgres@3.4.5: {} + potpack@1.0.2: {} prelude-ls@1.2.1: {} @@ -24001,9 +24033,9 @@ snapshots: '@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.36.0) '@vueuse/core': 13.0.0(vue@3.5.13(typescript@5.8.2)) - unplugin-combine@1.2.1(esbuild@0.25.0)(rollup@2.79.1)(unplugin@1.16.1)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)): + unplugin-combine@1.2.1(esbuild@0.19.12)(rollup@2.79.1)(unplugin@1.16.1)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)): optionalDependencies: - esbuild: 0.25.0 + esbuild: 0.19.12 rollup: 2.79.1 unplugin: 1.16.1 vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0) @@ -24062,7 +24094,7 @@ snapshots: transitivePeerDependencies: - vue - unplugin-vue-macros@2.14.5(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2)))(esbuild@0.25.0)(rollup@2.79.1)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)): + unplugin-vue-macros@2.14.5(@vueuse/core@13.0.0(vue@3.5.13(typescript@5.8.2)))(esbuild@0.19.12)(rollup@2.79.1)(typescript@5.8.2)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)): dependencies: '@vue-macros/better-define': 1.11.4(vue@3.5.13(typescript@5.8.2)) '@vue-macros/boolean-prop': 0.5.5(vue@3.5.13(typescript@5.8.2)) @@ -24094,7 +24126,7 @@ snapshots: '@vue-macros/short-vmodel': 1.5.5(vue@3.5.13(typescript@5.8.2)) '@vue-macros/volar': 0.30.15(typescript@5.8.2)(vue-tsc@3.0.0-alpha.2(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)) unplugin: 1.16.1 - unplugin-combine: 1.2.1(esbuild@0.25.0)(rollup@2.79.1)(unplugin@1.16.1)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)) + unplugin-combine: 1.2.1(esbuild@0.19.12)(rollup@2.79.1)(unplugin@1.16.1)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(less@4.2.2)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)) unplugin-vue-define-options: 1.5.5(vue@3.5.13(typescript@5.8.2)) vue: 3.5.13(typescript@5.8.2) transitivePeerDependencies: