From bf41655dbb21e93c3286409eeb8fc47cd9eb2945 Mon Sep 17 00:00:00 2001 From: Nashchennc <59103980+NashChennc@users.noreply.github.com> Date: Thu, 16 Apr 2026 16:09:22 +0800 Subject: [PATCH] feat(core-agent): extract pure runtime logic from stage-ui into `core-agent` (#1524) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Depends on #1487 ## Summary - Introduce `packages/core-agent` — a new pure-runtime package that extracts zero-Vue/Pinia algorithmic logic from `@proj-airi/stage-ui`, following a "compatible facade + core sinking" strategy - Migrate shared chat types, LLM streaming types, chat hook registry, session message merge logic, context registry algorithm, and LLM service utilities into `core-agent` - `stage-ui` files are preserved as re-exports / thin wrappers — all external imports, store IDs, and public APIs remain unchanged ## Motivation `stage-ui` currently mixes pure agent runtime logic (algorithms, type definitions, stateless utilities) with Vue/Pinia state management and browser-specific adapters. This coupling makes it hard to: - Test agent logic in isolation - Reuse agent algorithms outside of Vue contexts (e.g., server-side, CLI, other frameworks) - Reason about the boundary between "what the agent does" vs "how the UI manages state" --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by-agent: Unknown --- packages/core-agent/package.json | 46 ++ .../core-agent/src/contracts/context-port.ts | 7 + .../core-agent/src/contracts/hook-types.ts | 55 ++ packages/core-agent/src/contracts/llm-port.ts | 8 + .../core-agent/src/contracts/session-port.ts | 8 + .../core-agent/src/contracts/stream-port.ts | 6 + packages/core-agent/src/index.ts | 40 ++ .../core-agent/src/runtime/agent-hooks.ts | 259 +++++++ .../src/runtime/context-registry.ts | 95 +++ .../core-agent/src/runtime/llm-service.ts | 145 ++++ .../session/merge-loaded-session-messages.ts | 59 ++ packages/core-agent/src/types/chat.ts | 70 ++ packages/core-agent/src/types/llm.ts | 30 + packages/core-agent/tsconfig.json | 14 + packages/core-agent/tsdown.config.ts | 8 + packages/stage-ui/package.json | 1 + packages/stage-ui/src/stores/chat/hooks.ts | 218 +----- .../src/stores/chat/session-message-merge.ts | 60 +- .../src/stores/exports.contract.test.ts | 2 + packages/stage-ui/src/stores/llm.ts | 203 +----- packages/stage-ui/src/types/chat.ts | 84 +-- pnpm-lock.yaml | 640 ++++++++++++++---- 22 files changed, 1399 insertions(+), 659 deletions(-) create mode 100644 packages/core-agent/package.json create mode 100644 packages/core-agent/src/contracts/context-port.ts create mode 100644 packages/core-agent/src/contracts/hook-types.ts create mode 100644 packages/core-agent/src/contracts/llm-port.ts create mode 100644 packages/core-agent/src/contracts/session-port.ts create mode 100644 packages/core-agent/src/contracts/stream-port.ts create mode 100644 packages/core-agent/src/index.ts create mode 100644 packages/core-agent/src/runtime/agent-hooks.ts create mode 100644 packages/core-agent/src/runtime/context-registry.ts create mode 100644 packages/core-agent/src/runtime/llm-service.ts create mode 100644 packages/core-agent/src/session/merge-loaded-session-messages.ts create mode 100644 packages/core-agent/src/types/chat.ts create mode 100644 packages/core-agent/src/types/llm.ts create mode 100644 packages/core-agent/tsconfig.json create mode 100644 packages/core-agent/tsdown.config.ts diff --git a/packages/core-agent/package.json b/packages/core-agent/package.json new file mode 100644 index 000000000..4c92a55e1 --- /dev/null +++ b/packages/core-agent/package.json @@ -0,0 +1,46 @@ +{ + "name": "@proj-airi/core-agent", + "type": "module", + "version": "0.9.0-alpha.35", + "private": true, + "description": "Core agent runtime orchestration for AIRI", + "author": { + "name": "Moeru AI Project AIRI Team", + "email": "airi@moeru.ai", + "url": "https://github.com/moeru-ai" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/moeru-ai/airi.git", + "directory": "packages/core-agent" + }, + "exports": { + ".": { + "types": "./dist/index.d.mts", + "default": "./dist/index.mjs" + } + }, + "main": "./dist/index.mjs", + "types": "./dist/index.d.mts", + "files": [ + "README.md", + "dist", + "package.json" + ], + "scripts": { + "build": "tsdown", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@proj-airi/server-shared": "workspace:^", + "@xsai-ext/providers": "catalog:", + "@xsai/model": "catalog:", + "@xsai/shared-chat": "catalog:", + "@xsai/stream-text": "catalog:" + }, + "devDependencies": { + "tsdown": "catalog:", + "typescript": "^5.9.2" + } +} diff --git a/packages/core-agent/src/contracts/context-port.ts b/packages/core-agent/src/contracts/context-port.ts new file mode 100644 index 000000000..0621c61ff --- /dev/null +++ b/packages/core-agent/src/contracts/context-port.ts @@ -0,0 +1,7 @@ +import type { ContextMessage } from '../types/chat' + +export interface AgentContextPort { + ingest: (envelope: ContextMessage) => void + snapshot: () => Record + reset: () => void +} diff --git a/packages/core-agent/src/contracts/hook-types.ts b/packages/core-agent/src/contracts/hook-types.ts new file mode 100644 index 000000000..07ac59b96 --- /dev/null +++ b/packages/core-agent/src/contracts/hook-types.ts @@ -0,0 +1,55 @@ +import type { ToolMessage } from '@xsai/shared-chat' + +import type { ChatStreamEventContext, StreamingAssistantMessage } from '../types/chat' + +export interface ChatHookRegistry { + onBeforeMessageComposed: (cb: (message: string, context: Omit) => Promise) => () => void + onAfterMessageComposed: (cb: (message: string, context: ChatStreamEventContext) => Promise) => () => void + onBeforeSend: (cb: (message: string, context: ChatStreamEventContext) => Promise) => () => void + onAfterSend: (cb: (message: string, context: ChatStreamEventContext) => Promise) => () => void + onTokenLiteral: (cb: (literal: string, context: ChatStreamEventContext) => Promise) => () => void + onTokenSpecial: (cb: (special: string, context: ChatStreamEventContext) => Promise) => () => void + onStreamEnd: (cb: (context: ChatStreamEventContext) => Promise) => () => void + onAssistantResponseEnd: (cb: (message: string, context: ChatStreamEventContext) => Promise) => () => void + onAssistantMessage: (cb: (message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) => Promise) => () => void + onChatTurnComplete: (cb: (chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) => Promise) => () => void + emitBeforeMessageComposedHooks: (message: string, context: Omit) => Promise + emitAfterMessageComposedHooks: (message: string, context: ChatStreamEventContext) => Promise + emitBeforeSendHooks: (message: string, context: ChatStreamEventContext) => Promise + emitAfterSendHooks: (message: string, context: ChatStreamEventContext) => Promise + emitTokenLiteralHooks: (literal: string, context: ChatStreamEventContext) => Promise + emitTokenSpecialHooks: (special: string, context: ChatStreamEventContext) => Promise + emitStreamEndHooks: (context: ChatStreamEventContext) => Promise + emitAssistantResponseEndHooks: (message: string, context: ChatStreamEventContext) => Promise + emitAssistantMessageHooks: (message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) => Promise + emitChatTurnCompleteHooks: (chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) => Promise + clearHooks: () => void +} +export interface HookUnsubscribe { + (): void +} + +export interface AgentHookRegistry { + onBeforeMessageComposed: (cb: (message: string, context: Omit) => Promise) => HookUnsubscribe + onAfterMessageComposed: (cb: (message: string, context: TContext) => Promise) => HookUnsubscribe + onBeforeSend: (cb: (message: string, context: TContext) => Promise) => HookUnsubscribe + onAfterSend: (cb: (message: string, context: TContext) => Promise) => HookUnsubscribe + onTokenLiteral: (cb: (literal: string, context: TContext) => Promise) => HookUnsubscribe + onTokenSpecial: (cb: (special: string, context: TContext) => Promise) => HookUnsubscribe + onStreamEnd: (cb: (context: TContext) => Promise) => HookUnsubscribe + onAssistantResponseEnd: (cb: (message: string, context: TContext) => Promise) => HookUnsubscribe + onAssistantMessage: (cb: (message: TAssistantMessage, messageText: string, context: TContext) => Promise) => HookUnsubscribe + onChatTurnComplete: (cb: (chat: { output: TAssistantMessage, outputText: string, toolCalls: TToolCall[] }, context: TContext) => Promise) => HookUnsubscribe + + emitBeforeMessageComposedHooks: (message: string, context: Omit) => Promise + emitAfterMessageComposedHooks: (message: string, context: TContext) => Promise + emitBeforeSendHooks: (message: string, context: TContext) => Promise + emitAfterSendHooks: (message: string, context: TContext) => Promise + emitTokenLiteralHooks: (literal: string, context: TContext) => Promise + emitTokenSpecialHooks: (special: string, context: TContext) => Promise + emitStreamEndHooks: (context: TContext) => Promise + emitAssistantResponseEndHooks: (message: string, context: TContext) => Promise + emitAssistantMessageHooks: (message: TAssistantMessage, messageText: string, context: TContext) => Promise + emitChatTurnCompleteHooks: (chat: { output: TAssistantMessage, outputText: string, toolCalls: TToolCall[] }, context: TContext) => Promise + clearHooks: () => void +} diff --git a/packages/core-agent/src/contracts/llm-port.ts b/packages/core-agent/src/contracts/llm-port.ts new file mode 100644 index 000000000..637418a9c --- /dev/null +++ b/packages/core-agent/src/contracts/llm-port.ts @@ -0,0 +1,8 @@ +import type { ChatProvider } from '@xsai-ext/providers/utils' +import type { Message } from '@xsai/shared-chat' + +import type { StreamOptions } from '../types/llm' + +export interface AgentLLMPort { + stream: (model: string, chatProvider: ChatProvider, messages: Message[], options?: StreamOptions) => Promise +} diff --git a/packages/core-agent/src/contracts/session-port.ts b/packages/core-agent/src/contracts/session-port.ts new file mode 100644 index 000000000..8ae395d7c --- /dev/null +++ b/packages/core-agent/src/contracts/session-port.ts @@ -0,0 +1,8 @@ +import type { ChatHistoryItem } from '../types/chat' + +export interface AgentSessionPort { + ensureSession: (sessionId: string) => void + getSessionMessages: (sessionId: string) => ChatHistoryItem[] + appendSessionMessage: (sessionId: string, message: ChatHistoryItem) => void + getSessionGeneration: (sessionId: string) => number +} diff --git a/packages/core-agent/src/contracts/stream-port.ts b/packages/core-agent/src/contracts/stream-port.ts new file mode 100644 index 000000000..e2592cc39 --- /dev/null +++ b/packages/core-agent/src/contracts/stream-port.ts @@ -0,0 +1,6 @@ +import type { StreamingAssistantMessage } from '../types/chat' + +export interface AgentForegroundStreamPort { + patch: (message: StreamingAssistantMessage) => void + reset: () => void +} diff --git a/packages/core-agent/src/index.ts b/packages/core-agent/src/index.ts new file mode 100644 index 000000000..5eb9cc10f --- /dev/null +++ b/packages/core-agent/src/index.ts @@ -0,0 +1,40 @@ +export type { AgentContextPort } from './contracts/context-port' + +export type { ChatHookRegistry } from './contracts/hook-types' + +export type { AgentLLMPort } from './contracts/llm-port' +export type { AgentSessionPort } from './contracts/session-port' +export type { AgentForegroundStreamPort } from './contracts/stream-port' +export { createChatHooks } from './runtime/agent-hooks' +export type { ContextHistoryEntry, ContextRegistry } from './runtime/context-registry' + +export { createContextRegistry } from './runtime/context-registry' +export { + isToolRelatedError, + modelKey, + sanitizeMessages, + streamFrom, + streamOptionsToolsCompatibilityOk, +} from './runtime/llm-service' +export { mergeLoadedSessionMessages } from './session/merge-loaded-session-messages' +export type { + ChatAssistantMessage, + ChatHistoryItem, + ChatMessage, + ChatSlices, + ChatSlicesText, + ChatSlicesToolCall, + ChatSlicesToolCallResult, + ChatStreamEvent, + ChatStreamEventContext, + ContextMessage, + ErrorMessage, + StreamingAssistantMessage, +} from './types/chat' + +export type { + BuiltinToolsResolver, + StreamEvent, + StreamFromOptions, + StreamOptions, +} from './types/llm' diff --git a/packages/core-agent/src/runtime/agent-hooks.ts b/packages/core-agent/src/runtime/agent-hooks.ts new file mode 100644 index 000000000..4264e2d29 --- /dev/null +++ b/packages/core-agent/src/runtime/agent-hooks.ts @@ -0,0 +1,259 @@ +import type { ToolMessage } from '@xsai/shared-chat' + +import type { AgentHookRegistry, ChatHookRegistry } from '../contracts/hook-types' +import type { ChatStreamEventContext, StreamingAssistantMessage } from '../types/chat' + +export function createChatHooks(): ChatHookRegistry { + const onBeforeMessageComposedHooks: Array<(message: string, context: Omit) => Promise> = [] + const onAfterMessageComposedHooks: Array<(message: string, context: ChatStreamEventContext) => Promise> = [] + const onBeforeSendHooks: Array<(message: string, context: ChatStreamEventContext) => Promise> = [] + const onAfterSendHooks: Array<(message: string, context: ChatStreamEventContext) => Promise> = [] + const onTokenLiteralHooks: Array<(literal: string, context: ChatStreamEventContext) => Promise> = [] + const onTokenSpecialHooks: Array<(special: string, context: ChatStreamEventContext) => Promise> = [] + const onStreamEndHooks: Array<(context: ChatStreamEventContext) => Promise> = [] + const onAssistantResponseEndHooks: Array<(message: string, context: ChatStreamEventContext) => Promise> = [] + const onAssistantMessageHooks: Array<(message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) => Promise> = [] + const onChatTurnCompleteHooks: Array<(chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) => Promise> = [] + + function onBeforeMessageComposed(cb: (message: string, context: Omit) => Promise) { + onBeforeMessageComposedHooks.push(cb) + return () => { + const index = onBeforeMessageComposedHooks.indexOf(cb) + if (index >= 0) + onBeforeMessageComposedHooks.splice(index, 1) + } + } + + function onAfterMessageComposed(cb: (message: string, context: ChatStreamEventContext) => Promise) { + onAfterMessageComposedHooks.push(cb) + return () => { + const index = onAfterMessageComposedHooks.indexOf(cb) + if (index >= 0) + onAfterMessageComposedHooks.splice(index, 1) + } + } + + function onBeforeSend(cb: (message: string, context: ChatStreamEventContext) => Promise) { + onBeforeSendHooks.push(cb) + return () => { + const index = onBeforeSendHooks.indexOf(cb) + if (index >= 0) + onBeforeSendHooks.splice(index, 1) + } + } + + function onAfterSend(cb: (message: string, context: ChatStreamEventContext) => Promise) { + onAfterSendHooks.push(cb) + return () => { + const index = onAfterSendHooks.indexOf(cb) + if (index >= 0) + onAfterSendHooks.splice(index, 1) + } + } + + function onTokenLiteral(cb: (literal: string, context: ChatStreamEventContext) => Promise) { + onTokenLiteralHooks.push(cb) + return () => { + const index = onTokenLiteralHooks.indexOf(cb) + if (index >= 0) + onTokenLiteralHooks.splice(index, 1) + } + } + + function onTokenSpecial(cb: (special: string, context: ChatStreamEventContext) => Promise) { + onTokenSpecialHooks.push(cb) + return () => { + const index = onTokenSpecialHooks.indexOf(cb) + if (index >= 0) + onTokenSpecialHooks.splice(index, 1) + } + } + + function onStreamEnd(cb: (context: ChatStreamEventContext) => Promise) { + onStreamEndHooks.push(cb) + return () => { + const index = onStreamEndHooks.indexOf(cb) + if (index >= 0) + onStreamEndHooks.splice(index, 1) + } + } + + function onAssistantResponseEnd(cb: (message: string, context: ChatStreamEventContext) => Promise) { + onAssistantResponseEndHooks.push(cb) + return () => { + const index = onAssistantResponseEndHooks.indexOf(cb) + if (index >= 0) + onAssistantResponseEndHooks.splice(index, 1) + } + } + + function onAssistantMessage(cb: (message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) => Promise) { + onAssistantMessageHooks.push(cb) + return () => { + const index = onAssistantMessageHooks.indexOf(cb) + if (index >= 0) + onAssistantMessageHooks.splice(index, 1) + } + } + + function onChatTurnComplete(cb: (chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) => Promise) { + onChatTurnCompleteHooks.push(cb) + return () => { + const index = onChatTurnCompleteHooks.indexOf(cb) + if (index >= 0) + onChatTurnCompleteHooks.splice(index, 1) + } + } + + function clearHooks() { + onBeforeMessageComposedHooks.length = 0 + onAfterMessageComposedHooks.length = 0 + onBeforeSendHooks.length = 0 + onAfterSendHooks.length = 0 + onTokenLiteralHooks.length = 0 + onTokenSpecialHooks.length = 0 + onStreamEndHooks.length = 0 + onAssistantResponseEndHooks.length = 0 + onAssistantMessageHooks.length = 0 + onChatTurnCompleteHooks.length = 0 + } + + async function emitBeforeMessageComposedHooks(message: string, context: Omit) { + for (const hook of onBeforeMessageComposedHooks) + await hook(message, context) + } + + async function emitAfterMessageComposedHooks(message: string, context: ChatStreamEventContext) { + for (const hook of onAfterMessageComposedHooks) + await hook(message, context) + } + + async function emitBeforeSendHooks(message: string, context: ChatStreamEventContext) { + for (const hook of onBeforeSendHooks) + await hook(message, context) + } + + async function emitAfterSendHooks(message: string, context: ChatStreamEventContext) { + for (const hook of onAfterSendHooks) + await hook(message, context) + } + + async function emitTokenLiteralHooks(literal: string, context: ChatStreamEventContext) { + for (const hook of onTokenLiteralHooks) + await hook(literal, context) + } + + async function emitTokenSpecialHooks(special: string, context: ChatStreamEventContext) { + for (const hook of onTokenSpecialHooks) + await hook(special, context) + } + + async function emitStreamEndHooks(context: ChatStreamEventContext) { + for (const hook of onStreamEndHooks) + await hook(context) + } + + async function emitAssistantResponseEndHooks(message: string, context: ChatStreamEventContext) { + for (const hook of onAssistantResponseEndHooks) + await hook(message, context) + } + + async function emitAssistantMessageHooks(message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) { + for (const hook of onAssistantMessageHooks) + await hook(message, messageText, context) + } + + async function emitChatTurnCompleteHooks(chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) { + for (const hook of onChatTurnCompleteHooks) + await hook(chat, context) + } + + return { + onBeforeMessageComposed, + onAfterMessageComposed, + onBeforeSend, + onAfterSend, + onTokenLiteral, + onTokenSpecial, + onStreamEnd, + onAssistantResponseEnd, + onAssistantMessage, + onChatTurnComplete, + emitBeforeMessageComposedHooks, + emitAfterMessageComposedHooks, + emitBeforeSendHooks, + emitAfterSendHooks, + emitTokenLiteralHooks, + emitTokenSpecialHooks, + emitStreamEndHooks, + emitAssistantResponseEndHooks, + emitAssistantMessageHooks, + emitChatTurnCompleteHooks, + clearHooks, + } +} + +export function createAgentHooks(): AgentHookRegistry { + const onBeforeMessageComposedHooks: Array<(message: string, context: Omit) => Promise> = [] + const onAfterMessageComposedHooks: Array<(message: string, context: TContext) => Promise> = [] + const onBeforeSendHooks: Array<(message: string, context: TContext) => Promise> = [] + const onAfterSendHooks: Array<(message: string, context: TContext) => Promise> = [] + const onTokenLiteralHooks: Array<(literal: string, context: TContext) => Promise> = [] + const onTokenSpecialHooks: Array<(special: string, context: TContext) => Promise> = [] + const onStreamEndHooks: Array<(context: TContext) => Promise> = [] + const onAssistantResponseEndHooks: Array<(message: string, context: TContext) => Promise> = [] + const onAssistantMessageHooks: Array<(message: TAssistantMessage, messageText: string, context: TContext) => Promise> = [] + const onChatTurnCompleteHooks: Array<(chat: { output: TAssistantMessage, outputText: string, toolCalls: TToolCall[] }, context: TContext) => Promise> = [] + + function createSubscribe(bucket: T[], cb: T) { + bucket.push(cb) + return () => { + const index = bucket.indexOf(cb) + if (index >= 0) + bucket.splice(index, 1) + } + } + + function clearHooks() { + onBeforeMessageComposedHooks.length = 0 + onAfterMessageComposedHooks.length = 0 + onBeforeSendHooks.length = 0 + onAfterSendHooks.length = 0 + onTokenLiteralHooks.length = 0 + onTokenSpecialHooks.length = 0 + onStreamEndHooks.length = 0 + onAssistantResponseEndHooks.length = 0 + onAssistantMessageHooks.length = 0 + onChatTurnCompleteHooks.length = 0 + } + + async function emitHooks(hooks: Array<(...args: T) => Promise>, ...args: T) { + for (const hook of hooks) + await hook(...args) + } + + return { + onBeforeMessageComposed: cb => createSubscribe(onBeforeMessageComposedHooks, cb), + onAfterMessageComposed: cb => createSubscribe(onAfterMessageComposedHooks, cb), + onBeforeSend: cb => createSubscribe(onBeforeSendHooks, cb), + onAfterSend: cb => createSubscribe(onAfterSendHooks, cb), + onTokenLiteral: cb => createSubscribe(onTokenLiteralHooks, cb), + onTokenSpecial: cb => createSubscribe(onTokenSpecialHooks, cb), + onStreamEnd: cb => createSubscribe(onStreamEndHooks, cb), + onAssistantResponseEnd: cb => createSubscribe(onAssistantResponseEndHooks, cb), + onAssistantMessage: cb => createSubscribe(onAssistantMessageHooks, cb), + onChatTurnComplete: cb => createSubscribe(onChatTurnCompleteHooks, cb), + + emitBeforeMessageComposedHooks: (message, context) => emitHooks(onBeforeMessageComposedHooks, message, context), + emitAfterMessageComposedHooks: (message, context) => emitHooks(onAfterMessageComposedHooks, message, context), + emitBeforeSendHooks: (message, context) => emitHooks(onBeforeSendHooks, message, context), + emitAfterSendHooks: (message, context) => emitHooks(onAfterSendHooks, message, context), + emitTokenLiteralHooks: (literal, context) => emitHooks(onTokenLiteralHooks, literal, context), + emitTokenSpecialHooks: (special, context) => emitHooks(onTokenSpecialHooks, special, context), + emitStreamEndHooks: context => emitHooks(onStreamEndHooks, context), + emitAssistantResponseEndHooks: (message, context) => emitHooks(onAssistantResponseEndHooks, message, context), + emitAssistantMessageHooks: (message, messageText, context) => emitHooks(onAssistantMessageHooks, message, messageText, context), + emitChatTurnCompleteHooks: (chat, context) => emitHooks(onChatTurnCompleteHooks, chat, context), + clearHooks, + } +} diff --git a/packages/core-agent/src/runtime/context-registry.ts b/packages/core-agent/src/runtime/context-registry.ts new file mode 100644 index 000000000..b35573a30 --- /dev/null +++ b/packages/core-agent/src/runtime/context-registry.ts @@ -0,0 +1,95 @@ +import type { MetadataEventSource } from '@proj-airi/server-shared/types' + +import type { ContextMessage } from '../types/chat' + +const CONTEXT_UPDATE_REPLACE_SELF = 'replace-self' +const CONTEXT_UPDATE_APPEND_SELF = 'append-self' + +interface EventSourcePayload { + source?: string + metadata?: { source?: MetadataEventSource } +} + +export interface ContextHistoryEntry extends ContextMessage { + sourceKey: string +} + +export interface ContextRegistry { + ingest: (envelope: ContextMessage) => void + reset: () => void + snapshot: () => Record + activeContexts: () => Record + contextHistory: () => ContextHistoryEntry[] +} + +interface CreateContextRegistryOptions { + historyLimit?: number + getSourceKey?: (event: EventSourcePayload, fallback?: string) => string +} + +function formatMetadataSource(source?: MetadataEventSource) { + if (!source?.plugin) + return undefined + + const pluginId = source.plugin.id + const instanceId = source.id + + return instanceId ? `${pluginId}:${instanceId}` : pluginId +} + +function defaultGetSourceKey(event: EventSourcePayload, fallback = 'unknown') { + return ( + formatMetadataSource(event.metadata?.source) + ?? event.source + ?? fallback + ) +} + +export function createContextRegistry(options: CreateContextRegistryOptions = {}): ContextRegistry { + const historyLimit = options.historyLimit ?? 400 + const getSourceKey = options.getSourceKey ?? defaultGetSourceKey + + let currentActiveContexts: Record = {} + let currentContextHistory: ContextHistoryEntry[] = [] + + function ingest(envelope: ContextMessage) { + const sourceKey = getSourceKey(envelope) + if (!currentActiveContexts[sourceKey]) { + currentActiveContexts[sourceKey] = [] + } + + const safeEnvelopeToStore = structuredClone(envelope) + + if (envelope.strategy === CONTEXT_UPDATE_REPLACE_SELF) { + currentActiveContexts[sourceKey] = [safeEnvelopeToStore] + } + else if (envelope.strategy === CONTEXT_UPDATE_APPEND_SELF) { + currentActiveContexts[sourceKey].push(safeEnvelopeToStore) + } + + currentContextHistory = [ + ...currentContextHistory, + { + ...safeEnvelopeToStore, + sourceKey, + }, + ].slice(-historyLimit) + } + + function reset() { + currentActiveContexts = {} + currentContextHistory = [] + } + + function snapshot() { + return structuredClone(currentActiveContexts) + } + + return { + ingest, + reset, + snapshot, + activeContexts: () => structuredClone(currentActiveContexts), + contextHistory: () => [...currentContextHistory], + } +} diff --git a/packages/core-agent/src/runtime/llm-service.ts b/packages/core-agent/src/runtime/llm-service.ts new file mode 100644 index 000000000..444c9ca53 --- /dev/null +++ b/packages/core-agent/src/runtime/llm-service.ts @@ -0,0 +1,145 @@ +import type { ChatProvider } from '@xsai-ext/providers/utils' +import type { Message } from '@xsai/shared-chat' + +import type { StreamFromOptions, StreamOptions } from '../types/llm' + +import { stepCountAtLeast } from '@xsai/shared-chat' +import { streamText } from '@xsai/stream-text' + +export function sanitizeMessages(messages: unknown[]): Message[] { + return messages.map((message: any) => { + if (message && message.role === 'error') { + return { + role: 'user', + content: `User encountered error: ${String(message.content ?? '')}`, + } as Message + } + + // NOTICE: Flatten array content for providers (e.g. DeepSeek) that expect string, + // not content-part arrays. Skipped when image_url parts are present. + if (message && Array.isArray(message.content)) { + const contentParts = message.content as { type?: string, text?: string }[] + if (!contentParts.some(part => part?.type === 'image_url')) { + return { ...message, content: contentParts.map(part => part?.text ?? '').join('') } as Message + } + } + + return message as Message + }) +} + +export function modelKey(model: string, chatProvider: ChatProvider): string { + return `${chatProvider.chat(model).baseURL}-${model}` +} + +export function streamOptionsToolsCompatibilityOk(model: string, chatProvider: ChatProvider, options?: StreamOptions): boolean { + if (options?.supportsTools) + return true + const key = modelKey(model, chatProvider) + return options?.toolsCompatibility?.get(key) !== false +} + +async function resolveTools(options?: StreamOptions) { + const tools = typeof options?.tools === 'function' + ? await options.tools() + : options?.tools + return tools ?? [] +} + +export async function streamFrom({ + model, + chatProvider, + messages, + options, + builtinToolsResolver, +}: StreamFromOptions) { + const chatConfig = chatProvider.chat(model) + const sanitized = sanitizeMessages(messages as unknown[]) + + const supportedTools = streamOptionsToolsCompatibilityOk(model, chatProvider, options) + const builtinTools = supportedTools + ? await (builtinToolsResolver?.(model, chatProvider) ?? Promise.resolve([])) + : [] + const customTools = supportedTools ? await resolveTools(options) : [] + const mergedTools = supportedTools ? [...builtinTools, ...customTools] : [] + const tools = mergedTools.length > 0 ? mergedTools : undefined + + return new Promise((resolve, reject) => { + let settled = false + const resolveOnce = () => { + if (settled) + return + settled = true + resolve() + } + const rejectOnce = (error: unknown) => { + if (settled) + return + settled = true + reject(error) + } + + const onEvent = async (event: unknown) => { + try { + await options?.onStreamEvent?.(event as any) + if (event && (event as any).type === 'finish') { + const finishReason = (event as any).finishReason + const waitingForToolRound = finishReason === 'tool_calls' || finishReason === 'tool-calls' + if (!waitingForToolRound || !options?.waitForTools) + resolveOnce() + } + else if (event && (event as any).type === 'error') { + rejectOnce((event as any).error ?? new Error('Stream error')) + } + } + catch (error) { + rejectOnce(error) + } + } + + try { + const streamResult = streamText({ + ...chatConfig, + abortSignal: options?.abortSignal, + messages: sanitized, + headers: options?.headers, + stopWhen: stepCountAtLeast(10), + tools, + captureToolErrors: true, + onEvent, + }) + + // NOTICE: Consume underlying promises to prevent unhandled rejections from + // @xsai/stream-text's SSE parser surfacing as faulted app state. + void streamResult.steps.catch((error) => { + rejectOnce(error) + console.error('Stream steps error:', error) + }) + void streamResult.messages.catch(error => console.error('Stream messages error:', error)) + void streamResult.usage.catch(error => console.error('Stream usage error:', error)) + void streamResult.totalUsage.catch(error => console.error('Stream totalUsage error:', error)) + } + catch (error) { + rejectOnce(error) + } + }) +} + +// Runtime auto-degrade: patterns that indicate the model/provider does not support tool calling. +const TOOLS_RELATED_ERROR_PATTERNS: RegExp[] = [ + /does not support tools/i, // Ollama + /no endpoints found that support tool use/i, // OpenRouter + /invalid schema for function/i, // OpenAI-compatible + /invalid.?function.?parameters/i, // OpenAI-compatible + /functions are not supported/i, // Azure AI Foundry + /unrecognized request argument.+tools/i, // Azure AI Foundry + /tool use with function calling is unsupported/i, // Google Generative AI + /tool_use_failed/i, // Groq + /does not support function.?calling/i, // Anthropic + /tools?\s+(is|are)\s+not\s+supported/i, // Cloudflare Workers AI +] + +export function isToolRelatedError(error: unknown): boolean { + const message = String(error) + return TOOLS_RELATED_ERROR_PATTERNS.some(pattern => pattern.test(message)) +} diff --git a/packages/core-agent/src/session/merge-loaded-session-messages.ts b/packages/core-agent/src/session/merge-loaded-session-messages.ts new file mode 100644 index 000000000..9dac6853e --- /dev/null +++ b/packages/core-agent/src/session/merge-loaded-session-messages.ts @@ -0,0 +1,59 @@ +import type { ChatHistoryItem } from '../types/chat' + +function extractMessageContent(message: ChatHistoryItem) { + if (typeof message.content === 'string') + return message.content + + if (Array.isArray(message.content)) { + return message.content.map((part) => { + if (typeof part === 'string') + return part + if (part && typeof part === 'object' && 'text' in part) + return String(part.text ?? '') + return '' + }).join('') + } + + return '' +} + +function getMessageFingerprint(message: ChatHistoryItem) { + return [ + message.id ?? '', + message.role, + message.createdAt ?? '', + extractMessageContent(message), + ].join('\u001F') +} + +export function mergeLoadedSessionMessages(storedMessages: ChatHistoryItem[], currentMessages: ChatHistoryItem[]) { + if (currentMessages.length === 0) + return storedMessages + + const currentNonSystemMessages = currentMessages.filter((message, index) => index !== 0 || message.role !== 'system') + if (currentNonSystemMessages.length === 0) + return storedMessages + + const seen = new Set(storedMessages.map(getMessageFingerprint)) + const extraMessages = currentNonSystemMessages.filter((message) => { + const fingerprint = getMessageFingerprint(message) + if (seen.has(fingerprint)) + return false + seen.add(fingerprint) + return true + }) + + if (extraMessages.length === 0) + return storedMessages + + const systemMessage = storedMessages[0]?.role === 'system' + ? storedMessages[0] + : currentMessages[0]?.role === 'system' + ? currentMessages[0] + : undefined + + if (storedMessages.length === 0 && systemMessage) + return [systemMessage, ...extraMessages] + + return [...storedMessages, ...extraMessages] +} diff --git a/packages/core-agent/src/types/chat.ts b/packages/core-agent/src/types/chat.ts new file mode 100644 index 000000000..7db4e24f2 --- /dev/null +++ b/packages/core-agent/src/types/chat.ts @@ -0,0 +1,70 @@ +import type { ContextUpdate, MetadataEventSource, WebSocketEventInputs } from '@proj-airi/server-shared/types' +import type { AssistantMessage, CommonContentPart, CompletionToolCall, Message, SystemMessage, ToolMessage, UserMessage } from '@xsai/shared-chat' + +export interface ChatSlicesText { + type: 'text' + text: string +} + +export interface ChatSlicesToolCall { + type: 'tool-call' + toolCall: CompletionToolCall +} + +export interface ChatSlicesToolCallResult { + type: 'tool-call-result' + id: string + isError?: boolean + result?: string | CommonContentPart[] +} + +export type ChatSlices = ChatSlicesText | ChatSlicesToolCall | ChatSlicesToolCallResult + +export interface ChatAssistantMessage extends AssistantMessage { + slices: ChatSlices[] + tool_results: { + id: string + isError?: boolean + result?: string | CommonContentPart[] + }[] + categorization?: { + speech: string + reasoning: string + } +} + +export type ChatMessage = ChatAssistantMessage | SystemMessage | ToolMessage | UserMessage + +export interface ErrorMessage { + role: 'error' + content: string +} + +export interface ContextMessage extends ContextUpdate, unknown> { + metadata?: { + source: MetadataEventSource + } + createdAt: number +} + +export type ChatHistoryItem = (ChatMessage | ErrorMessage) & { context?: ContextMessage } & { createdAt?: number, id?: string } + +export interface ChatStreamEventContext { + message: ChatHistoryItem + contexts: Record + composedMessage: Array + input?: WebSocketEventInputs +} + +export type ChatStreamEvent + = | { type: 'before-compose', message: string, sessionId: string, context: Omit } + | { type: 'after-compose', message: string, sessionId: string, context: ChatStreamEventContext } + | { type: 'before-send', message: string, sessionId: string, context: ChatStreamEventContext } + | { type: 'after-send', message: string, sessionId: string, context: ChatStreamEventContext } + | { type: 'token-literal', literal: string, sessionId: string, context: ChatStreamEventContext } + | { type: 'token-special', special: string, sessionId: string, context: ChatStreamEventContext } + | { type: 'stream-end', sessionId: string, context: ChatStreamEventContext } + | { type: 'assistant-end', message: string, sessionId: string, context: ChatStreamEventContext } + | { type: 'assistant-message', message: ChatAssistantMessage, sessionId: string, messageText: string, context: ChatStreamEventContext } + +export type StreamingAssistantMessage = ChatAssistantMessage & { context?: ContextMessage } & { createdAt?: number, id?: string } diff --git a/packages/core-agent/src/types/llm.ts b/packages/core-agent/src/types/llm.ts new file mode 100644 index 000000000..0df07eb5f --- /dev/null +++ b/packages/core-agent/src/types/llm.ts @@ -0,0 +1,30 @@ +import type { ChatProvider } from '@xsai-ext/providers/utils' +import type { CommonContentPart, CompletionToolCall, CompletionToolResult, Message, Tool } from '@xsai/shared-chat' + +export type StreamEvent + = | { type: 'text-delta', text: string } + | ({ type: 'finish' } & any) + | ({ type: 'tool-call' } & CompletionToolCall) + | (CompletionToolResult & { type: 'tool-error' }) + | { type: 'tool-result', toolCallId: string, result?: string | CommonContentPart[] } + | { type: 'error', error: any } + +export interface StreamOptions { + abortSignal?: AbortSignal + headers?: Record + onStreamEvent?: (event: StreamEvent) => void | Promise + toolsCompatibility?: Map + supportsTools?: boolean + waitForTools?: boolean + tools?: Tool[] | (() => Promise) +} + +export type BuiltinToolsResolver = (model: string, chatProvider: ChatProvider) => Promise + +export interface StreamFromOptions { + model: string + chatProvider: ChatProvider + messages: Message[] + options?: StreamOptions + builtinToolsResolver?: BuiltinToolsResolver +} diff --git a/packages/core-agent/tsconfig.json b/packages/core-agent/tsconfig.json new file mode 100644 index 000000000..dd42464f1 --- /dev/null +++ b/packages/core-agent/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["ESNext", "DOM"], + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/core-agent/tsdown.config.ts b/packages/core-agent/tsdown.config.ts new file mode 100644 index 000000000..6671ca3a4 --- /dev/null +++ b/packages/core-agent/tsdown.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'tsdown' + +export default defineConfig({ + entry: [ + 'src/index.ts', + ], + dts: true, +}) diff --git a/packages/stage-ui/package.json b/packages/stage-ui/package.json index 2f612a4ba..f36cc2eb0 100644 --- a/packages/stage-ui/package.json +++ b/packages/stage-ui/package.json @@ -69,6 +69,7 @@ "@proj-airi/audio": "workspace:^", "@proj-airi/ccc": "workspace:^", "@proj-airi/chromatic": "^1.1.1", + "@proj-airi/core-agent": "workspace:^", "@proj-airi/core-character": "workspace:^", "@proj-airi/drizzle-duckdb-wasm": "catalog:", "@proj-airi/font-chillroundm": "workspace:^", diff --git a/packages/stage-ui/src/stores/chat/hooks.ts b/packages/stage-ui/src/stores/chat/hooks.ts index cb4f78c17..26e9fd6b8 100644 --- a/packages/stage-ui/src/stores/chat/hooks.ts +++ b/packages/stage-ui/src/stores/chat/hooks.ts @@ -1,217 +1 @@ -import type { ToolMessage } from '@xsai/shared-chat' - -import type { ChatStreamEventContext, StreamingAssistantMessage } from '../../types/chat' - -export interface ChatHookRegistry { - onBeforeMessageComposed: (cb: (message: string, context: Omit) => Promise) => () => void - onAfterMessageComposed: (cb: (message: string, context: ChatStreamEventContext) => Promise) => () => void - onBeforeSend: (cb: (message: string, context: ChatStreamEventContext) => Promise) => () => void - onAfterSend: (cb: (message: string, context: ChatStreamEventContext) => Promise) => () => void - onTokenLiteral: (cb: (literal: string, context: ChatStreamEventContext) => Promise) => () => void - onTokenSpecial: (cb: (special: string, context: ChatStreamEventContext) => Promise) => () => void - onStreamEnd: (cb: (context: ChatStreamEventContext) => Promise) => () => void - onAssistantResponseEnd: (cb: (message: string, context: ChatStreamEventContext) => Promise) => () => void - onAssistantMessage: (cb: (message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) => Promise) => () => void - onChatTurnComplete: (cb: (chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) => Promise) => () => void - emitBeforeMessageComposedHooks: (message: string, context: Omit) => Promise - emitAfterMessageComposedHooks: (message: string, context: ChatStreamEventContext) => Promise - emitBeforeSendHooks: (message: string, context: ChatStreamEventContext) => Promise - emitAfterSendHooks: (message: string, context: ChatStreamEventContext) => Promise - emitTokenLiteralHooks: (literal: string, context: ChatStreamEventContext) => Promise - emitTokenSpecialHooks: (special: string, context: ChatStreamEventContext) => Promise - emitStreamEndHooks: (context: ChatStreamEventContext) => Promise - emitAssistantResponseEndHooks: (message: string, context: ChatStreamEventContext) => Promise - emitAssistantMessageHooks: (message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) => Promise - emitChatTurnCompleteHooks: (chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) => Promise - clearHooks: () => void -} - -export function createChatHooks(): ChatHookRegistry { - const onBeforeMessageComposedHooks: Array<(message: string, context: Omit) => Promise> = [] - const onAfterMessageComposedHooks: Array<(message: string, context: ChatStreamEventContext) => Promise> = [] - const onBeforeSendHooks: Array<(message: string, context: ChatStreamEventContext) => Promise> = [] - const onAfterSendHooks: Array<(message: string, context: ChatStreamEventContext) => Promise> = [] - const onTokenLiteralHooks: Array<(literal: string, context: ChatStreamEventContext) => Promise> = [] - const onTokenSpecialHooks: Array<(special: string, context: ChatStreamEventContext) => Promise> = [] - const onStreamEndHooks: Array<(context: ChatStreamEventContext) => Promise> = [] - const onAssistantResponseEndHooks: Array<(message: string, context: ChatStreamEventContext) => Promise> = [] - const onAssistantMessageHooks: Array<(message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) => Promise> = [] - const onChatTurnCompleteHooks: Array<(chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) => Promise> = [] - - function onBeforeMessageComposed(cb: (message: string, context: Omit) => Promise) { - onBeforeMessageComposedHooks.push(cb) - return () => { - const index = onBeforeMessageComposedHooks.indexOf(cb) - if (index >= 0) - onBeforeMessageComposedHooks.splice(index, 1) - } - } - - function onAfterMessageComposed(cb: (message: string, context: ChatStreamEventContext) => Promise) { - onAfterMessageComposedHooks.push(cb) - return () => { - const index = onAfterMessageComposedHooks.indexOf(cb) - if (index >= 0) - onAfterMessageComposedHooks.splice(index, 1) - } - } - - function onBeforeSend(cb: (message: string, context: ChatStreamEventContext) => Promise) { - onBeforeSendHooks.push(cb) - return () => { - const index = onBeforeSendHooks.indexOf(cb) - if (index >= 0) - onBeforeSendHooks.splice(index, 1) - } - } - - function onAfterSend(cb: (message: string, context: ChatStreamEventContext) => Promise) { - onAfterSendHooks.push(cb) - return () => { - const index = onAfterSendHooks.indexOf(cb) - if (index >= 0) - onAfterSendHooks.splice(index, 1) - } - } - - function onTokenLiteral(cb: (literal: string, context: ChatStreamEventContext) => Promise) { - onTokenLiteralHooks.push(cb) - return () => { - const index = onTokenLiteralHooks.indexOf(cb) - if (index >= 0) - onTokenLiteralHooks.splice(index, 1) - } - } - - function onTokenSpecial(cb: (special: string, context: ChatStreamEventContext) => Promise) { - onTokenSpecialHooks.push(cb) - return () => { - const index = onTokenSpecialHooks.indexOf(cb) - if (index >= 0) - onTokenSpecialHooks.splice(index, 1) - } - } - - function onStreamEnd(cb: (context: ChatStreamEventContext) => Promise) { - onStreamEndHooks.push(cb) - return () => { - const index = onStreamEndHooks.indexOf(cb) - if (index >= 0) - onStreamEndHooks.splice(index, 1) - } - } - - function onAssistantResponseEnd(cb: (message: string, context: ChatStreamEventContext) => Promise) { - onAssistantResponseEndHooks.push(cb) - return () => { - const index = onAssistantResponseEndHooks.indexOf(cb) - if (index >= 0) - onAssistantResponseEndHooks.splice(index, 1) - } - } - - function onAssistantMessage(cb: (message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) => Promise) { - onAssistantMessageHooks.push(cb) - return () => { - const index = onAssistantMessageHooks.indexOf(cb) - if (index >= 0) - onAssistantMessageHooks.splice(index, 1) - } - } - - function onChatTurnComplete(cb: (chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) => Promise) { - onChatTurnCompleteHooks.push(cb) - return () => { - const index = onChatTurnCompleteHooks.indexOf(cb) - if (index >= 0) - onChatTurnCompleteHooks.splice(index, 1) - } - } - - function clearHooks() { - onBeforeMessageComposedHooks.length = 0 - onAfterMessageComposedHooks.length = 0 - onBeforeSendHooks.length = 0 - onAfterSendHooks.length = 0 - onTokenLiteralHooks.length = 0 - onTokenSpecialHooks.length = 0 - onStreamEndHooks.length = 0 - onAssistantResponseEndHooks.length = 0 - onAssistantMessageHooks.length = 0 - onChatTurnCompleteHooks.length = 0 - } - - async function emitBeforeMessageComposedHooks(message: string, context: Omit) { - for (const hook of onBeforeMessageComposedHooks) - await hook(message, context) - } - - async function emitAfterMessageComposedHooks(message: string, context: ChatStreamEventContext) { - for (const hook of onAfterMessageComposedHooks) - await hook(message, context) - } - - async function emitBeforeSendHooks(message: string, context: ChatStreamEventContext) { - for (const hook of onBeforeSendHooks) - await hook(message, context) - } - - async function emitAfterSendHooks(message: string, context: ChatStreamEventContext) { - for (const hook of onAfterSendHooks) - await hook(message, context) - } - - async function emitTokenLiteralHooks(literal: string, context: ChatStreamEventContext) { - for (const hook of onTokenLiteralHooks) - await hook(literal, context) - } - - async function emitTokenSpecialHooks(special: string, context: ChatStreamEventContext) { - for (const hook of onTokenSpecialHooks) - await hook(special, context) - } - - async function emitStreamEndHooks(context: ChatStreamEventContext) { - for (const hook of onStreamEndHooks) - await hook(context) - } - - async function emitAssistantResponseEndHooks(message: string, context: ChatStreamEventContext) { - for (const hook of onAssistantResponseEndHooks) - await hook(message, context) - } - - async function emitAssistantMessageHooks(message: StreamingAssistantMessage, messageText: string, context: ChatStreamEventContext) { - for (const hook of onAssistantMessageHooks) - await hook(message, messageText, context) - } - - async function emitChatTurnCompleteHooks(chat: { output: StreamingAssistantMessage, outputText: string, toolCalls: ToolMessage[] }, context: ChatStreamEventContext) { - for (const hook of onChatTurnCompleteHooks) - await hook(chat, context) - } - - return { - onBeforeMessageComposed, - onAfterMessageComposed, - onBeforeSend, - onAfterSend, - onTokenLiteral, - onTokenSpecial, - onStreamEnd, - onAssistantResponseEnd, - onAssistantMessage, - onChatTurnComplete, - emitBeforeMessageComposedHooks, - emitAfterMessageComposedHooks, - emitBeforeSendHooks, - emitAfterSendHooks, - emitTokenLiteralHooks, - emitTokenSpecialHooks, - emitStreamEndHooks, - emitAssistantResponseEndHooks, - emitAssistantMessageHooks, - emitChatTurnCompleteHooks, - clearHooks, - } -} +export { type ChatHookRegistry, createChatHooks } from '@proj-airi/core-agent' diff --git a/packages/stage-ui/src/stores/chat/session-message-merge.ts b/packages/stage-ui/src/stores/chat/session-message-merge.ts index cce28fab3..c87ee2ff1 100644 --- a/packages/stage-ui/src/stores/chat/session-message-merge.ts +++ b/packages/stage-ui/src/stores/chat/session-message-merge.ts @@ -1,59 +1 @@ -import type { ChatHistoryItem } from '../../types/chat' - -function extractMessageContent(message: ChatHistoryItem) { - if (typeof message.content === 'string') - return message.content - - if (Array.isArray(message.content)) { - return message.content.map((part) => { - if (typeof part === 'string') - return part - if (part && typeof part === 'object' && 'text' in part) - return String(part.text ?? '') - return '' - }).join('') - } - - return '' -} - -function getMessageFingerprint(message: ChatHistoryItem) { - return [ - message.id ?? '', - message.role, - message.createdAt ?? '', - extractMessageContent(message), - ].join('\u001F') -} - -export function mergeLoadedSessionMessages(storedMessages: ChatHistoryItem[], currentMessages: ChatHistoryItem[]) { - if (currentMessages.length === 0) - return storedMessages - - const currentNonSystemMessages = currentMessages.filter((message, index) => index !== 0 || message.role !== 'system') - if (currentNonSystemMessages.length === 0) - return storedMessages - - const seen = new Set(storedMessages.map(getMessageFingerprint)) - const extraMessages = currentNonSystemMessages.filter((message) => { - const fingerprint = getMessageFingerprint(message) - if (seen.has(fingerprint)) - return false - seen.add(fingerprint) - return true - }) - - if (extraMessages.length === 0) - return storedMessages - - const systemMessage = storedMessages[0]?.role === 'system' - ? storedMessages[0] - : currentMessages[0]?.role === 'system' - ? currentMessages[0] - : undefined - - if (storedMessages.length === 0 && systemMessage) - return [systemMessage, ...extraMessages] - - return [...storedMessages, ...extraMessages] -} +export { mergeLoadedSessionMessages } from '@proj-airi/core-agent' diff --git a/packages/stage-ui/src/stores/exports.contract.test.ts b/packages/stage-ui/src/stores/exports.contract.test.ts index e84ee0910..20b9b3062 100644 --- a/packages/stage-ui/src/stores/exports.contract.test.ts +++ b/packages/stage-ui/src/stores/exports.contract.test.ts @@ -31,6 +31,8 @@ describe('stage-ui exports contract', () => { './constants/*', './libs', './libs/*', + './libs/inference', + './libs/inference/adapters/*', './stores', './stores/*', './stores/analytics', diff --git a/packages/stage-ui/src/stores/llm.ts b/packages/stage-ui/src/stores/llm.ts index ee67b7473..ba157acf5 100644 --- a/packages/stage-ui/src/stores/llm.ts +++ b/packages/stage-ui/src/stores/llm.ts @@ -1,198 +1,53 @@ +import type { StreamOptions } from '@proj-airi/core-agent' import type { WebSocketEvents } from '@proj-airi/server-sdk' import type { ChatProvider } from '@xsai-ext/providers/utils' -import type { CommonContentPart, CompletionToolCall, CompletionToolResult, Message, Tool } from '@xsai/shared-chat' +import type { Message } from '@xsai/shared-chat' +import { streamFrom as coreStreamFrom, isToolRelatedError, modelKey } from '@proj-airi/core-agent' import { listModels } from '@xsai/model' -import { - - stepCountAtLeast, - -} from '@xsai/shared-chat' -import { streamText } from '@xsai/stream-text' import { defineStore } from 'pinia' import { ref } from 'vue' import { createSparkCommandTool, debug, mcp } from '../tools' import { useModsServerChannelStore } from './mods/api/channel-server' -export type StreamEvent - = | { type: 'text-delta', text: string } - | ({ type: 'finish' } & any) - | ({ type: 'tool-call' } & CompletionToolCall) - | (CompletionToolResult & { type: 'tool-error' }) - | { type: 'tool-result', toolCallId: string, result?: string | CommonContentPart[] } - | { type: 'error', error: any } - -export interface StreamOptions { - abortSignal?: AbortSignal - headers?: Record - onStreamEvent?: (event: StreamEvent) => void | Promise - toolsCompatibility?: Map - supportsTools?: boolean - waitForTools?: boolean - tools?: Tool[] | (() => Promise) -} - -function sanitizeMessages(messages: unknown[]): Message[] { - return messages.map((m: any) => { - if (m && m.role === 'error') { - return { - role: 'user', - content: `User encountered error: ${String(m.content ?? '')}`, - } as Message - } - // NOTICE: Flatten array content for providers (e.g. DeepSeek) that expect string, - // not content-part arrays. Skipped when image_url parts are present. - if (m && Array.isArray(m.content)) { - const contentParts = m.content as { type?: string, text?: string }[] - if (!contentParts.some(p => p?.type === 'image_url')) { - return { ...m, content: contentParts.map(p => p?.text ?? '').join('') } as Message - } - } - return m as Message - }) -} - -function streamOptionsToolsCompatibilityOk(model: string, chatProvider: ChatProvider, _: Message[], options?: StreamOptions): boolean { - if (options?.supportsTools) - return true - const key = `${chatProvider.chat(model).baseURL}-${model}` - return options?.toolsCompatibility?.get(key) !== false -} - -async function streamFrom(model: string, chatProvider: ChatProvider, messages: Message[], sendSparkCommand: (command: WebSocketEvents['spark:command']) => void, options?: StreamOptions) { - const chatConfig = chatProvider.chat(model) - const sanitized = sanitizeMessages(messages as unknown[]) - - const resolveTools = async () => { - const tools = typeof options?.tools === 'function' - ? await options.tools() - : options?.tools - return tools ?? [] - } - - const supportedTools = streamOptionsToolsCompatibilityOk(model, chatProvider, messages, options) - const tools = supportedTools - ? [ - ...await mcp(), - ...await debug(), - ...await resolveTools(), - await createSparkCommandTool({ sendSparkCommand }), - ] - : undefined - - return new Promise((resolve, reject) => { - let settled = false - const resolveOnce = () => { - if (settled) - return - settled = true - resolve() - } - const rejectOnce = (err: unknown) => { - if (settled) - return - settled = true - reject(err) - } - - const onEvent = async (event: unknown) => { - try { - await options?.onStreamEvent?.(event as StreamEvent) - if (event && (event as StreamEvent).type === 'finish') { - const finishReason = (event as any).finishReason - const waitingForToolRound = finishReason === 'tool_calls' || finishReason === 'tool-calls' - if (!waitingForToolRound || !options?.waitForTools) - resolveOnce() - } - else if (event && (event as StreamEvent).type === 'error') { - rejectOnce((event as any).error ?? new Error('Stream error')) - } - } - catch (err) { - rejectOnce(err) - } - } - - try { - const streamResult = streamText({ - ...chatConfig, - abortSignal: options?.abortSignal, - messages: sanitized, - headers: options?.headers, - stopWhen: stepCountAtLeast(10), - tools, - captureToolErrors: true, - onEvent, - }) - - // NOTICE: Consume underlying promises to prevent unhandled rejections from - // @xsai/stream-text's SSE parser surfacing as faulted app state. - void streamResult.steps.catch((err) => { - rejectOnce(err) - console.error('Stream steps error:', err) - }) - void streamResult.messages.catch(err => console.error('Stream messages error:', err)) - void streamResult.usage.catch(err => console.error('Stream usage error:', err)) - void streamResult.totalUsage.catch(err => console.error('Stream totalUsage error:', err)) - } - catch (err) { - rejectOnce(err) - } - }) -} - -// Runtime auto-degrade: patterns that indicate the model/provider does not support tool calling. -const TOOLS_RELATED_ERROR_PATTERNS: RegExp[] = [ - /does not support tools/i, // Ollama - /no endpoints found that support tool use/i, // OpenRouter - /invalid schema for function/i, // OpenAI-compatible - /invalid.?function.?parameters/i, // OpenAI-compatible - /functions are not supported/i, // Azure AI Foundry - /unrecognized request argument.+tools/i, // Azure AI Foundry - /tool use with function calling is unsupported/i, // Google Generative AI - /tool_use_failed/i, // Groq - /does not support function.?calling/i, // Anthropic - /tools?\s+(is|are)\s+not\s+supported/i, // Cloudflare Workers AI -] - -export function isToolRelatedError(err: unknown): boolean { - const msg = String(err) - return TOOLS_RELATED_ERROR_PATTERNS.some(p => p.test(msg)) -} +export type { StreamEvent, StreamOptions } from '@proj-airi/core-agent' +export { isToolRelatedError } from '@proj-airi/core-agent' export const useLLM = defineStore('llm', () => { const toolsCompatibility = ref>(new Map()) const modsServerChannelStore = useModsServerChannelStore() - function modelKey(model: string, chatProvider: ChatProvider): string { - return `${chatProvider.chat(model).baseURL}-${model}` - } - async function stream(model: string, chatProvider: ChatProvider, messages: Message[], options?: StreamOptions) { const key = modelKey(model, chatProvider) try { - await streamFrom( + // TODO(@nekomeowww,@shinohara-rin): we should not register the command callback on every stream anyway... + const sendSparkCommand = (command: WebSocketEvents['spark:command']) => { + // TODO(@nekomeowww): instruct the LLM to understand what destination is. + // Currently without skill like prompt injection, many issues occur. + // destination mostly are wrong or hallucinated, we need to find a way to make it more reliable. + // + // For now, since destinations as array will always broadcast to all connected modules/agents, we can set it to + // empty array to avoid wrong routing. + command.destinations = [] + + modsServerChannelStore.send({ + type: 'spark:command', + data: command, + }) + } + + await coreStreamFrom({ model, chatProvider, messages, - // TODO(@nekomeowww,@shinohara-rin): we should not register the command callback on every stream anyway... - (command) => { - // TODO(@nekomeowww): instruct the LLM to understand what destination is. - // Currently without skill like prompt injection, many issues occur. - // destination mostly are wrong or hallucinated, we need to find a way to make it more reliable. - // - // For now, since destinations as array will always broadcast to all connected modules/agents, we can set it to - // empty array to avoid wrong routing. - command.destinations = [] - - modsServerChannelStore.send({ - type: 'spark:command', - data: command, - }) - }, - { ...options, toolsCompatibility: toolsCompatibility.value }, - ) + options: { ...options, toolsCompatibility: toolsCompatibility.value }, + builtinToolsResolver: async () => [ + ...await mcp(), + ...await debug(), + await createSparkCommandTool({ sendSparkCommand }), + ], + }) } catch (err) { if (isToolRelatedError(err)) { diff --git a/packages/stage-ui/src/types/chat.ts b/packages/stage-ui/src/types/chat.ts index b722b31f4..76a5d5163 100644 --- a/packages/stage-ui/src/types/chat.ts +++ b/packages/stage-ui/src/types/chat.ts @@ -1,70 +1,14 @@ -import type { ContextUpdate, MetadataEventSource, WebSocketEventInputs } from '@proj-airi/server-sdk' -import type { AssistantMessage, CommonContentPart, CompletionToolCall, Message, SystemMessage, ToolMessage, UserMessage } from '@xsai/shared-chat' - -export interface ChatSlicesText { - type: 'text' - text: string -} - -export interface ChatSlicesToolCall { - type: 'tool-call' - toolCall: CompletionToolCall -} - -export interface ChatSlicesToolCallResult { - type: 'tool-call-result' - id: string - isError?: boolean - result?: string | CommonContentPart[] -} - -export type ChatSlices = ChatSlicesText | ChatSlicesToolCall | ChatSlicesToolCallResult - -export interface ChatAssistantMessage extends AssistantMessage { - slices: ChatSlices[] - tool_results: { - id: string - isError?: boolean - result?: string | CommonContentPart[] - }[] - categorization?: { - speech: string - reasoning: string - } -} - -export type ChatMessage = ChatAssistantMessage | SystemMessage | ToolMessage | UserMessage - -export interface ErrorMessage { - role: 'error' - content: string -} - -export interface ContextMessage extends ContextUpdate, unknown> { - metadata?: { - source: MetadataEventSource - } - createdAt: number -} - -export type ChatHistoryItem = (ChatMessage | ErrorMessage) & { context?: ContextMessage } & { createdAt?: number, id?: string } - -export interface ChatStreamEventContext { - message: ChatHistoryItem - contexts: Record - composedMessage: Array - input?: WebSocketEventInputs -} - -export type ChatStreamEvent - = | { type: 'before-compose', message: string, sessionId: string, context: Omit } - | { type: 'after-compose', message: string, sessionId: string, context: ChatStreamEventContext } - | { type: 'before-send', message: string, sessionId: string, context: ChatStreamEventContext } - | { type: 'after-send', message: string, sessionId: string, context: ChatStreamEventContext } - | { type: 'token-literal', literal: string, sessionId: string, context: ChatStreamEventContext } - | { type: 'token-special', special: string, sessionId: string, context: ChatStreamEventContext } - | { type: 'stream-end', sessionId: string, context: ChatStreamEventContext } - | { type: 'assistant-end', message: string, sessionId: string, context: ChatStreamEventContext } - | { type: 'assistant-message', message: ChatAssistantMessage, sessionId: string, messageText: string, context: ChatStreamEventContext } - -export type StreamingAssistantMessage = ChatAssistantMessage & { context?: ContextMessage } & { createdAt?: number, id?: string } +export type { + ChatAssistantMessage, + ChatHistoryItem, + ChatMessage, + ChatSlices, + ChatSlicesText, + ChatSlicesToolCall, + ChatSlicesToolCallResult, + ChatStreamEvent, + ChatStreamEventContext, + ContextMessage, + ErrorMessage, + StreamingAssistantMessage, +} from '@proj-airi/core-agent' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cee0ea3f0..52c0e1d49 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -550,10 +550,10 @@ importers: version: 66.6.8 '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vite: specifier: 'catalog:' - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue-router: specifier: ^5.0.4 version: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) @@ -679,7 +679,7 @@ importers: version: 8.20.0 stripe: specifier: ^22.0.1 - version: 22.0.1(@types/node@24.12.2) + version: 22.0.1(@types/node@25.6.0) valibot: specifier: 'catalog:' version: 1.2.0(typescript@5.9.3) @@ -987,7 +987,7 @@ importers: version: 1.2.45 '@intlify/unplugin-vue-i18n': specifier: ^11.0.7 - version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) '@proj-airi/cap-vite': specifier: workspace:* version: link:../../packages/cap-vite @@ -999,10 +999,10 @@ importers: version: 1.0.18 '@proj-airi/unplugin-fetch': specifier: 'catalog:' - version: 0.2.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.2.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@proj-airi/unplugin-live2d-sdk': specifier: ^0.1.6 - version: 0.1.6(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 0.1.6(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@proj-airi/vite-plugin-warpdrive': specifier: workspace:* version: link:../../packages/vite-plugin-warpdrive @@ -1032,7 +1032,7 @@ importers: version: 66.6.8 '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) '@vue-macros/volar': specifier: ^3.1.2 version: 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) @@ -1050,31 +1050,31 @@ importers: version: 4.6.4 unplugin-info: specifier: ^1.3.2 - version: 1.3.2(esbuild@0.27.2)(rollup@2.80.0)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.2)(rollup@2.80.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-yaml: specifier: ^4.1.0 - version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: 'catalog:' - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-bundle-visualizer: specifier: ^1.2.1 version: 1.2.1(rolldown@1.0.0-rc.15)(rollup@2.80.0) vite-plugin-mkcert: specifier: 'catalog:' - version: 2.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite-plugin-pwa: specifier: ^1.2.0 - version: 1.2.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0)(workbox-window@7.4.0) + version: 1.2.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0)(workbox-window@7.4.0) vite-plugin-vue-devtools: specifier: ^8.1.1 - version: 8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vite-plugin-vue-layouts: specifier: ^0.11.0 - version: 0.11.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) vue-macros: specifier: ^3.1.2 - version: 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) + version: 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@5.9.3) @@ -1534,7 +1534,7 @@ importers: version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-yaml: specifier: ^4.1.0 - version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: 'catalog:' version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) @@ -1850,7 +1850,7 @@ importers: version: 1.2.45 '@intlify/unplugin-vue-i18n': specifier: ^11.0.7 - version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) '@proj-airi/iconify-meteocons': specifier: 'catalog:' version: 0.1.4 @@ -1859,10 +1859,10 @@ importers: version: 1.0.18 '@proj-airi/unplugin-fetch': specifier: 'catalog:' - version: 0.2.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.2.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@proj-airi/unplugin-live2d-sdk': specifier: ^0.1.6 - version: 0.1.6(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 0.1.6(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@proj-airi/vite-plugin-warpdrive': specifier: workspace:* version: link:../../packages/vite-plugin-warpdrive @@ -1892,7 +1892,7 @@ importers: version: 66.6.8 '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) '@vue-macros/volar': specifier: ^3.1.2 version: 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) @@ -1910,31 +1910,31 @@ importers: version: 4.6.4 unplugin-info: specifier: ^1.3.2 - version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-yaml: specifier: ^4.1.0 - version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: 'catalog:' - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-bundle-visualizer: specifier: ^1.2.1 version: 1.2.1(rolldown@1.0.0-rc.15)(rollup@4.60.1) vite-plugin-mkcert: specifier: 'catalog:' - version: 2.0.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite-plugin-pwa: specifier: ^1.2.0 - version: 1.2.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0)(workbox-window@7.4.0) + version: 1.2.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0)(workbox-window@7.4.0) vite-plugin-vue-devtools: specifier: ^8.1.1 - version: 8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vite-plugin-vue-layouts: specifier: ^0.11.0 - version: 0.11.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) vue-macros: specifier: ^3.1.2 - version: 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) + version: 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@5.9.3) @@ -2067,7 +2067,7 @@ importers: version: 1.2.45 '@intlify/unplugin-vue-i18n': specifier: ^11.0.7 - version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) '@proj-airi/iconify-meteocons': specifier: 'catalog:' version: 0.1.4 @@ -2091,7 +2091,7 @@ importers: version: 66.6.8 '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) '@vue-macros/volar': specifier: ^3.1.2 version: 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) @@ -2100,22 +2100,22 @@ importers: version: 3.0.3(magicast@0.5.2)(vue@3.5.32(typescript@5.9.3)) unplugin-info: specifier: ^1.3.2 - version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-yaml: specifier: ^4.1.0 - version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: 'catalog:' - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-vue-devtools: specifier: ^8.1.1 - version: 8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vite-plugin-vue-layouts: specifier: ^0.11.0 - version: 0.11.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) vue-macros: specifier: ^3.1.2 - version: 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) + version: 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@5.9.3) @@ -2197,7 +2197,7 @@ importers: version: 5.0.0(vue@3.5.32(typescript@5.9.3)) '@intlify/unplugin-vue-i18n': specifier: ^11.0.7 - version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + version: 11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) '@mdit/plugin-footnote': specifier: ^0.23.2 version: 0.23.2(markdown-it@14.1.1) @@ -2260,10 +2260,10 @@ importers: version: 0.1.3 unplugin-yaml: specifier: ^4.1.0 - version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vitepress: specifier: 2.0.0-alpha.17 - version: 2.0.0-alpha.17(change-case@5.4.4)(fuse.js@7.1.0)(idb-keyval@6.2.2)(nprogress@0.2.0)(oxc-minify@0.125.0)(postcss@8.5.9)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 2.0.0-alpha.17(change-case@5.4.4)(fuse.js@7.1.0)(idb-keyval@6.2.2)(nprogress@0.2.0)(oxc-minify@0.125.0)(postcss@8.5.9)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@5.9.3) @@ -2331,10 +2331,10 @@ importers: devDependencies: '@vitest/browser-playwright': specifier: catalog:vitest - version: 4.1.4(bufferutil@4.1.0)(playwright@1.59.1)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4) + version: 4.1.4(bufferutil@4.1.0)(playwright@1.59.1)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4) vitest: specifier: catalog:vitest - version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) packages/cap-vite: dependencies: @@ -2349,7 +2349,7 @@ importers: version: 1.1.1 vite: specifier: ^7.0.0 || ^8.0.0-beta.0 - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) packages/ccc: dependencies: @@ -2357,6 +2357,31 @@ importers: specifier: ^1.0.6 version: 1.0.6 + packages/core-agent: + dependencies: + '@proj-airi/server-shared': + specifier: workspace:^ + version: link:../server-shared + '@xsai-ext/providers': + specifier: 'catalog:' + version: 0.5.0-beta.2 + '@xsai/model': + specifier: 'catalog:' + version: 0.5.0-beta.2 + '@xsai/shared-chat': + specifier: 'catalog:' + version: 0.5.0-beta.2(patch_hash=26f2819b987245ec85f216b821ddf73aeb28fd7e611238a2d37250e42f838a01) + '@xsai/stream-text': + specifier: 'catalog:' + version: 0.5.0-beta.2(patch_hash=90dfe10d02f5946658508ec019937eab600745c93446ce7b2fdb1a0ed70e3e49) + devDependencies: + tsdown: + specifier: 'catalog:' + version: 0.21.8(@arethetypeswrong/core@0.18.2)(oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))(publint@0.3.18)(synckit@0.11.12)(typescript@5.9.3)(unplugin-unused@0.5.7)(vue-tsc@3.2.6(typescript@5.9.3)) + typescript: + specifier: ^5.9.2 + version: 5.9.3 + packages/core-character: dependencies: '@moeru/std': @@ -2413,7 +2438,7 @@ importers: version: 5.1.6 vite: specifier: 'catalog:' - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) packages/electron-vueuse: dependencies: @@ -2455,7 +2480,7 @@ importers: devDependencies: unplugin-yaml: specifier: ^4.1.0 - version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) packages/memory-pgvector: dependencies: @@ -2599,7 +2624,7 @@ importers: version: 66.6.8 '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) unplugin-vue-router: specifier: ^0.19.2 version: 0.19.2(@vue/compiler-sfc@3.5.32)(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) @@ -2647,7 +2672,7 @@ importers: devDependencies: '@proj-airi/unplugin-drizzle-orm-migrations': specifier: 'catalog:' - version: 0.1.6(magicast@0.5.2)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.1.6(magicast@0.5.2)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) packages/server-sdk: dependencies: @@ -2774,7 +2799,7 @@ importers: version: 0.183.1 unplugin-info: specifier: 'catalog:' - version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@5.9.3) @@ -2895,7 +2920,7 @@ importers: version: 0.183.1 unplugin-info: specifier: 'catalog:' - version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@5.9.3) @@ -2969,6 +2994,9 @@ importers: '@proj-airi/chromatic': specifier: ^1.1.1 version: 1.1.1 + '@proj-airi/core-agent': + specifier: workspace:^ + version: link:../core-agent '@proj-airi/core-character': specifier: workspace:^ version: link:../core-character @@ -3239,7 +3267,7 @@ importers: version: 5.2.10 '@histoire/plugin-vue': specifier: 'catalog:' - version: 1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.12.2)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3))(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@25.6.0)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3))(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) '@iconify-json/carbon': specifier: ^1.2.20 version: 1.2.20 @@ -3302,7 +3330,7 @@ importers: version: 66.6.8 '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) clustr: specifier: ^1.0.2 version: 1.0.2 @@ -3311,22 +3339,22 @@ importers: version: 3.2.3 histoire: specifier: 'catalog:' - version: 1.0.0-beta.1(@types/node@24.12.2)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + version: 1.0.0-beta.1(@types/node@25.6.0)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) is-network-error: specifier: 'catalog:' version: 1.3.1 unocss: specifier: ^66.6.8 - version: 66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-info: specifier: 'catalog:' - version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-yaml: specifier: ^4.1.0 - version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: ^6.4.2 - version: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: specifier: 'catalog:' version: 3.5.32(typescript@5.9.3) @@ -3548,13 +3576,13 @@ importers: version: 66.6.8 '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vite: specifier: 'catalog:' - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-vue-devtools: specifier: ^8.1.1 - version: 8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vue-router: specifier: ^5.0.4 version: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) @@ -3579,13 +3607,13 @@ importers: version: 66.6.8 '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vite: specifier: 'catalog:' - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-vue-devtools: specifier: ^8.1.1 - version: 8.1.1(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vue-router: specifier: ^5.0.4 version: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) @@ -3655,7 +3683,7 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: ^6.0.6 - version: 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + version: 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@5.9.3) @@ -3670,7 +3698,7 @@ importers: version: 0.9.4 vite: specifier: ^5.0.0 || ^6.0.0 - version: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) devDependencies: '@moeru/std': specifier: 'catalog:' @@ -3756,7 +3784,7 @@ importers: version: 14.1.0(vue@3.5.32(typescript@5.9.3)) '@wxt-dev/module-vue': specifier: ^1.0.3 - version: 1.0.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))(wxt@0.20.22(@types/node@24.12.2)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.0.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))(wxt@0.20.22(@types/node@25.6.0)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) nanoid: specifier: ^5.1.7 version: 5.1.7 @@ -3768,7 +3796,7 @@ importers: version: 3.2.6(typescript@5.9.3) wxt: specifier: ^0.20.22 - version: 0.20.22(@types/node@24.12.2)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 0.20.22(@types/node@25.6.0)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) services/computer-use-mcp: dependencies: @@ -9259,6 +9287,9 @@ packages: '@types/node@24.12.2': resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} + '@types/node@25.6.0': + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -16566,6 +16597,9 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.19.2: + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici@6.24.1: resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} engines: {node: '>=18.17'} @@ -16675,16 +16709,16 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin-combine@2.1.3: - resolution: {integrity: sha512-a0wlKPNaHsR5FBTmuB/s26GxRFplCLlH7CId0RD4D+fx8oq1uASghPwTfwI+seD33CqoFteE7R/zTO0Ago2rnQ==} + unplugin-combine@2.3.0: + resolution: {integrity: sha512-0aZjv0JqOCPY+yujTatSwlCbsK6bMcBUZDlpMHTlc7KDc2gq8XL5cPgEOeS2GZ767BHAonkEqhC+NlOvzzm5FA==} engines: {node: '>=20.19.0'} peerDependencies: - '@rspack/core': '*' + '@rspack/core': ^1.0.0 esbuild: '>=0.13' rolldown: '*' rollup: ^3.2.0 || ^4.0.0 - unplugin: ^1.0.0 || ^2.0.0 - vite: ^2.3.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + unplugin: ^1.0.0 || ^2.0.0 || ^3.0.0 + vite: ^2.3.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 webpack: 4 || 5 peerDependenciesMeta: '@rspack/core': @@ -17125,8 +17159,8 @@ packages: yaml: optional: true - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.2: + resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -19722,17 +19756,17 @@ snapshots: '@henrygd/queue@1.2.0': {} - '@histoire/app@1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@histoire/app@1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@histoire/controls': 1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@histoire/shared': 1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@histoire/controls': 1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@histoire/shared': 1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@histoire/vendors': 1.0.0-beta.1 fuse.js: 7.1.0 shiki: 3.23.0 transitivePeerDependencies: - vite - '@histoire/controls@1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@histoire/controls@1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@codemirror/commands': 6.10.1 '@codemirror/lang-json': 6.0.2 @@ -19741,26 +19775,26 @@ snapshots: '@codemirror/state': 6.5.3 '@codemirror/theme-one-dark': 6.1.3 '@codemirror/view': 6.39.7 - '@histoire/shared': 1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@histoire/shared': 1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@histoire/vendors': 1.0.0-beta.1 transitivePeerDependencies: - vite - '@histoire/plugin-vue@1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@24.12.2)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3))(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': + '@histoire/plugin-vue@1.0.0-beta.1(histoire@1.0.0-beta.1(@types/node@25.6.0)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3))(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': dependencies: - '@histoire/controls': 1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@histoire/shared': 1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@histoire/controls': 1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@histoire/shared': 1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@histoire/vendors': 1.0.0-beta.1 change-case: 5.4.4 globby: 14.1.0 - histoire: 1.0.0-beta.1(@types/node@24.12.2)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) + histoire: 1.0.0-beta.1(@types/node@25.6.0)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3) launch-editor: 2.12.0 pathe: 1.1.2 vue: 3.5.32(typescript@5.9.3) transitivePeerDependencies: - vite - '@histoire/shared@1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@histoire/shared@1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@histoire/vendors': 1.0.0-beta.1 '@types/fs-extra': 11.0.4 @@ -19768,7 +19802,7 @@ snapshots: chokidar: 4.0.3 pathe: 1.1.2 picocolors: 1.1.1 - vite: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@histoire/vendors@1.0.0-beta.1': {} @@ -20025,7 +20059,7 @@ snapshots: '@intlify/shared@11.3.2': {} - '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))': + '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) '@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3))) @@ -20039,7 +20073,7 @@ snapshots: pathe: 2.0.3 picocolors: 1.1.1 unplugin: 2.3.11 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.32(typescript@5.9.3) optionalDependencies: vue-i18n: 11.3.2(vue@3.5.32(typescript@5.9.3)) @@ -20075,6 +20109,31 @@ snapshots: - supports-color - typescript + '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.32)(eslint@10.2.0(jiti@2.6.1))(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3))) + '@intlify/shared': 11.3.2 + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.2)(@vue/compiler-dom@3.5.32)(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + '@typescript-eslint/scope-manager': 8.58.1 + '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) + debug: 4.4.3(supports-color@10.2.2) + fast-glob: 3.3.3 + pathe: 2.0.3 + picocolors: 1.1.1 + unplugin: 2.3.11 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.32(typescript@5.9.3) + optionalDependencies: + vue-i18n: 11.3.2(vue@3.5.32(typescript@5.9.3)) + transitivePeerDependencies: + - '@vue/compiler-dom' + - eslint + - rollup + - supports-color + - typescript + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.3.2)(@vue/compiler-dom@3.5.32)(vue-i18n@11.3.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3))': dependencies: '@babel/parser': 7.29.2 @@ -22015,13 +22074,13 @@ snapshots: '@proj-airi/unocss-preset-chromatic@1.1.1': {} - '@proj-airi/unplugin-drizzle-orm-migrations@0.1.6(magicast@0.5.2)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@proj-airi/unplugin-drizzle-orm-migrations@0.1.6(magicast@0.5.2)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: c12: 3.3.3(magicast@0.5.2) uncrypto: 0.1.3 unplugin: 2.3.11 optionalDependencies: - vite: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - magicast @@ -22030,10 +22089,33 @@ snapshots: ofetch: 1.5.1 vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@proj-airi/unplugin-fetch@0.2.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + ofetch: 1.5.1 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@proj-airi/unplugin-live2d-sdk@0.1.6(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)': dependencies: ofetch: 1.5.1 - vite: 7.3.1(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + yauzl: 3.3.0 + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + + '@proj-airi/unplugin-live2d-sdk@0.1.6(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)': + dependencies: + ofetch: 1.5.1 + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) yauzl: 3.3.0 transitivePeerDependencies: - '@types/node' @@ -22922,6 +23004,11 @@ snapshots: dependencies: undici-types: 7.16.0 + '@types/node@25.6.0': + dependencies: + undici-types: 7.19.2 + optional: true + '@types/nprogress@0.2.3': {} '@types/offscreencanvas@2019.7.3': {} @@ -23422,7 +23509,7 @@ snapshots: dependencies: '@unocss/core': 66.6.8 - '@unocss/vite@66.6.8(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@unocss/vite@66.6.8(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.6.8 @@ -23433,7 +23520,7 @@ snapshots: pathe: 2.0.3 tinyglobby: 0.2.16 unplugin-utils: 0.3.1 - vite: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@unocss/vite@66.6.8(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: @@ -23565,10 +23652,10 @@ snapshots: transitivePeerDependencies: - typescript - '@vitejs/plugin-vue@6.0.6(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.6(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.13 - vite: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.32(typescript@5.9.3) '@vitejs/plugin-vue@6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': @@ -23577,6 +23664,12 @@ snapshots: vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.32(typescript@5.9.3) + '@vitejs/plugin-vue@6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.13 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.32(typescript@5.9.3) + '@vitest/browser-playwright@4.1.4(bufferutil@4.1.0)(playwright@1.59.1)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4)': dependencies: '@vitest/browser': 4.1.4(bufferutil@4.1.0)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4) @@ -23589,6 +23682,20 @@ snapshots: - msw - utf-8-validate - vite + optional: true + + '@vitest/browser-playwright@4.1.4(bufferutil@4.1.0)(playwright@1.59.1)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4)': + dependencies: + '@vitest/browser': 4.1.4(bufferutil@4.1.0)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + playwright: 1.59.1 + tinyrainbow: 3.1.0 + vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite '@vitest/browser@4.1.4(bufferutil@4.1.0)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4)': dependencies: @@ -23606,6 +23713,24 @@ snapshots: - msw - utf-8-validate - vite + optional: true + + '@vitest/browser@4.1.4(bufferutil@4.1.0)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4)': + dependencies: + '@blazediff/core': 1.9.1 + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/utils': 4.1.4 + magic-string: 0.30.21 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.1.0 + vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite '@vitest/coverage-v8@4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4)': dependencies: @@ -23652,6 +23777,14 @@ snapshots: optionalDependencies: vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + '@vitest/spy': 4.1.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@vitest/pretty-format@4.1.4': dependencies: tinyrainbow: 3.1.0 @@ -23842,6 +23975,15 @@ snapshots: transitivePeerDependencies: - typescript + '@vue-macros/devtools@3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + sirv: 3.0.2 + vue: 3.5.32(typescript@5.9.3) + optionalDependencies: + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - typescript + '@vue-macros/export-expose@3.1.2(vue@3.5.32(typescript@5.9.3))': dependencies: '@vue-macros/common': 3.1.2(vue@3.5.32(typescript@5.9.3)) @@ -24268,10 +24410,10 @@ snapshots: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 - '@wxt-dev/module-vue@1.0.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))(wxt@0.20.22(@types/node@24.12.2)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@wxt-dev/module-vue@1.0.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3))(wxt@0.20.22(@types/node@25.6.0)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@vitejs/plugin-vue': 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) - wxt: 0.20.22(@types/node@24.12.2)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + '@vitejs/plugin-vue': 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + wxt: 0.20.22(@types/node@25.6.0)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - vite - vue @@ -24783,7 +24925,7 @@ snapshots: drizzle-orm: 0.41.0(@electric-sql/pglite@0.4.4)(@opentelemetry/api@1.9.1)(@prisma/client@5.22.0)(@types/pg@8.20.0)(better-sqlite3@12.5.0)(kysely@0.28.14)(pg@8.20.0)(postgres@3.4.9) pg: 8.20.0 react: 19.2.3 - vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vue: 3.5.32(typescript@5.9.3) better-auth@1.6.3(@opentelemetry/api@1.9.1)(@prisma/client@5.22.0)(better-sqlite3@12.5.0)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.4)(@opentelemetry/api@1.9.1)(@prisma/client@5.22.0)(@types/pg@8.20.0)(better-sqlite3@12.5.0)(kysely@0.28.14)(pg@8.20.0)(postgres@3.4.9))(pg@8.20.0)(react@19.2.3)(vitest@4.1.4)(vue@3.5.32(typescript@5.9.3)): @@ -24812,7 +24954,7 @@ snapshots: drizzle-orm: 0.45.2(@electric-sql/pglite@0.4.4)(@opentelemetry/api@1.9.1)(@prisma/client@5.22.0)(@types/pg@8.20.0)(better-sqlite3@12.5.0)(kysely@0.28.14)(pg@8.20.0)(postgres@3.4.9) pg: 8.20.0 react: 19.2.3 - vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) vue: 3.5.32(typescript@5.9.3) transitivePeerDependencies: - '@cloudflare/workers-types' @@ -27514,12 +27656,12 @@ snapshots: gray-matter: 4.0.3 unplugin: 2.3.11 - histoire@1.0.0-beta.1(@types/node@24.12.2)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3): + histoire@1.0.0-beta.1(@types/node@25.6.0)(bufferutil@4.1.0)(canvas@3.2.3)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(utf-8-validate@5.0.10)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3): dependencies: '@akryum/tinypool': 0.3.1 - '@histoire/app': 1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@histoire/controls': 1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@histoire/shared': 1.0.0-beta.1(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@histoire/app': 1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@histoire/controls': 1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@histoire/shared': 1.0.0-beta.1(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@histoire/vendors': 1.0.0-beta.1 '@types/markdown-it': 14.1.2 birpc: 0.2.19 @@ -27544,8 +27686,8 @@ snapshots: sade: 1.8.1 shiki: 3.23.0 sirv: 3.0.2 - vite: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-node: 3.2.4(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@exodus/crypto' - '@types/node' @@ -31293,9 +31435,9 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - stripe@22.0.1(@types/node@24.12.2): + stripe@22.0.1(@types/node@25.6.0): optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 25.6.0 strtok3@6.3.0: dependencies: @@ -31782,6 +31924,9 @@ snapshots: undici-types@7.16.0: {} + undici-types@7.19.2: + optional: true + undici@6.24.1: {} undici@8.1.0: {} @@ -31890,7 +32035,7 @@ snapshots: '@unocss/preset-mini': 66.6.8 unocss: 66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - unocss@66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + unocss@66.6.8(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@unocss/cli': 66.6.8 '@unocss/core': 66.6.8 @@ -31908,7 +32053,7 @@ snapshots: '@unocss/transformer-compile-class': 66.6.8 '@unocss/transformer-directives': 66.6.8 '@unocss/transformer-variant-group': 66.6.8 - '@unocss/vite': 66.6.8(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@unocss/vite': 66.6.8(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -31942,15 +32087,15 @@ snapshots: unpipe@1.0.0: {} - unplugin-combine@2.1.3(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + unplugin-combine@2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(unplugin@2.3.11)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: esbuild: 0.27.2 rolldown: 1.0.0-rc.15 rollup: 2.80.0 unplugin: 2.3.11 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - unplugin-combine@2.1.3(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + unplugin-combine@2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): optionalDependencies: esbuild: 0.27.2 rolldown: 1.0.0-rc.15 @@ -31958,7 +32103,15 @@ snapshots: unplugin: 2.3.11 vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - unplugin-info@1.3.2(esbuild@0.27.2)(rollup@2.80.0)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + unplugin-combine@2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + optionalDependencies: + esbuild: 0.27.2 + rolldown: 1.0.0-rc.15 + rollup: 4.60.1 + unplugin: 2.3.11 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + + unplugin-info@1.3.2(esbuild@0.27.2)(rollup@2.80.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: ci-info: 4.4.0 git-url-parse: 16.1.0 @@ -31967,11 +32120,11 @@ snapshots: optionalDependencies: esbuild: 0.27.2 rollup: 2.80.0 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color - unplugin-info@1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + unplugin-info@1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: ci-info: 4.4.0 git-url-parse: 16.1.0 @@ -31980,7 +32133,7 @@ snapshots: optionalDependencies: esbuild: 0.27.2 rollup: 4.60.1 - vite: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - supports-color @@ -31997,6 +32150,19 @@ snapshots: transitivePeerDependencies: - supports-color + unplugin-info@1.3.2(esbuild@0.27.2)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + ci-info: 4.4.0 + git-url-parse: 16.1.0 + simple-git: 3.36.0 + unplugin: 2.3.11 + optionalDependencies: + esbuild: 0.27.2 + rollup: 4.60.1 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - supports-color + unplugin-lightningcss@0.4.5: dependencies: lightningcss: 1.32.0 @@ -32059,7 +32225,7 @@ snapshots: transitivePeerDependencies: - vue - unplugin-yaml@4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + unplugin-yaml@4.1.0(@nuxt/kit@3.20.2(magicast@0.5.2))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.60.1) unplugin: 3.0.0 @@ -32069,9 +32235,9 @@ snapshots: esbuild: 0.27.2 rolldown: 1.0.0-rc.15 rollup: 4.60.1 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@rollup/pluginutils': 5.3.0(rollup@2.80.0) unplugin: 3.0.0 @@ -32080,9 +32246,9 @@ snapshots: esbuild: 0.27.2 rolldown: 1.0.0-rc.15 rollup: 2.80.0 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.60.1) unplugin: 3.0.0 @@ -32091,7 +32257,18 @@ snapshots: esbuild: 0.27.2 rolldown: 1.0.0-rc.15 rollup: 4.60.1 - vite: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + + unplugin-yaml@4.1.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.60.1) + unplugin: 3.0.0 + yaml: 2.8.3 + optionalDependencies: + esbuild: 0.27.2 + rolldown: 1.0.0-rc.15 + rollup: 4.60.1 + vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) unplugin@2.3.11: dependencies: @@ -32283,17 +32460,27 @@ snapshots: vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vite-hot-client: 2.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-dev-rpc@1.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + birpc: 2.9.0 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-hot-client@2.1.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-node@3.2.4(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite-hot-client@2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + + vite-node@3.2.4(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@10.2.2) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -32308,13 +32495,13 @@ snapshots: - tsx - yaml - vite-node@5.2.0(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite-node@5.2.0(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: cac: 6.7.14 es-module-lexer: 1.7.0 obug: 2.1.1 pathe: 2.0.3 - vite: 7.3.1(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - '@types/node' - jiti @@ -32343,6 +32530,21 @@ snapshots: transitivePeerDependencies: - supports-color + vite-plugin-inspect@11.3.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + ansis: 4.2.0 + debug: 4.4.3(supports-color@10.2.2) + error-stack-parser-es: 1.0.5 + ohash: 2.0.11 + open: 10.2.0 + perfect-debounce: 2.1.0 + sirv: 3.0.2 + unplugin-utils: 0.3.1 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + transitivePeerDependencies: + - supports-color + vite-plugin-inspect@12.0.0-beta.1(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: '@vitejs/devtools-kit': 0.1.13(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) @@ -32366,12 +32568,19 @@ snapshots: undici: 8.1.0 vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-pwa@1.2.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0)(workbox-window@7.4.0): + vite-plugin-mkcert@2.0.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + supports-color: 10.2.2 + undici: 8.1.0 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + + vite-plugin-pwa@1.2.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(workbox-build@7.4.0)(workbox-window@7.4.0): dependencies: debug: 4.4.3(supports-color@10.2.2) pretty-bytes: 6.1.1 tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) workbox-build: 7.4.0 workbox-window: 7.4.0 transitivePeerDependencies: @@ -32391,6 +32600,20 @@ snapshots: - supports-color - vue + vite-plugin-vue-devtools@8.1.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)): + dependencies: + '@vue/devtools-core': 8.1.1(vue@3.5.32(typescript@5.9.3)) + '@vue/devtools-kit': 8.1.1 + '@vue/devtools-shared': 8.1.1 + sirv: 3.0.2 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-inspect: 11.3.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-plugin-vue-inspector: 5.3.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + transitivePeerDependencies: + - '@nuxt/kit' + - supports-color + - vue + vite-plugin-vue-inspector@5.3.2(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@babel/core': 7.29.0 @@ -32406,6 +32629,21 @@ snapshots: transitivePeerDependencies: - supports-color + vite-plugin-vue-inspector@5.3.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.29.0) + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.0) + '@vue/compiler-dom': 3.5.32 + kolorist: 1.8.0 + magic-string: 0.30.21 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - supports-color + vite-plugin-vue-layouts@0.11.0(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)): dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -32416,7 +32654,17 @@ snapshots: transitivePeerDependencies: - supports-color - vite@6.4.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite-plugin-vue-layouts@0.11.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)): + dependencies: + debug: 4.4.3(supports-color@10.2.2) + fast-glob: 3.3.3 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.32(typescript@5.9.3) + vue-router: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + transitivePeerDependencies: + - supports-color + + vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -32424,6 +32672,24 @@ snapshots: postcss: 8.5.9 rollup: 4.60.1 tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 25.6.0 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.6.4 + lightningcss: 1.32.0 + terser: 5.46.1 + tsx: 4.21.0 + yaml: 2.8.3 + + vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.9 + rollup: 4.60.1 + tinyglobby: 0.2.16 optionalDependencies: '@types/node': 24.12.2 fsevents: 2.3.3 @@ -32434,7 +32700,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vite@7.3.1(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.4) @@ -32443,7 +32709,7 @@ snapshots: rollup: 4.60.1 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 25.6.0 fsevents: 2.3.3 jiti: 2.6.1 less: 4.6.4 @@ -32469,7 +32735,24 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitepress@2.0.0-alpha.17(change-case@5.4.4)(fuse.js@7.1.0)(idb-keyval@6.2.2)(nprogress@0.2.0)(oxc-minify@0.125.0)(postcss@8.5.9)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)): + vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.9 + rolldown: 1.0.0-rc.15 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 25.6.0 + esbuild: 0.27.2 + fsevents: 2.3.3 + jiti: 2.6.1 + less: 4.6.4 + terser: 5.46.1 + tsx: 4.21.0 + yaml: 2.8.3 + + vitepress@2.0.0-alpha.17(change-case@5.4.4)(fuse.js@7.1.0)(idb-keyval@6.2.2)(nprogress@0.2.0)(oxc-minify@0.125.0)(postcss@8.5.9)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)): dependencies: '@docsearch/css': 4.6.0 '@docsearch/js': 4.6.0 @@ -32479,7 +32762,7 @@ snapshots: '@shikijs/transformers': 3.23.0 '@shikijs/types': 3.23.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 6.0.6(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) + '@vitejs/plugin-vue': 6.0.6(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.32(typescript@5.9.3)) '@vue/devtools-api': 8.1.0 '@vue/shared': 3.5.32 '@vueuse/core': 14.2.1(vue@3.5.32(typescript@5.9.3)) @@ -32488,7 +32771,7 @@ snapshots: mark.js: 8.11.1 minisearch: 7.2.0 shiki: 3.23.0 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.32(typescript@5.9.3) optionalDependencies: oxc-minify: 0.125.0 @@ -32537,6 +32820,37 @@ snapshots: transitivePeerDependencies: - msw + vitest@4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/browser-playwright@4.1.4)(@vitest/coverage-v8@4.1.4)(jsdom@27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@vitest/expect': 4.1.4 + '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.4 + '@vitest/runner': 4.1.4 + '@vitest/snapshot': 4.1.4 + '@vitest/spy': 4.1.4 + '@vitest/utils': 4.1.4 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.1.1 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@types/node': 25.6.0 + '@vitest/browser-playwright': 4.1.4(bufferutil@4.1.0)(playwright@1.59.1)(utf-8-validate@5.0.10)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.4) + '@vitest/coverage-v8': 4.1.4(@vitest/browser@4.1.4)(vitest@4.1.4) + jsdom: 27.4.0(bufferutil@4.1.0)(canvas@3.2.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - msw + vscode-ext-gen@1.6.0: dependencies: cac: 6.7.14 @@ -32568,7 +32882,7 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.32(typescript@5.9.3) - vue-macros@3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)): + vue-macros@3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)): dependencies: '@vue-macros/better-define': 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vue@3.5.32(typescript@5.9.3)) '@vue-macros/boolean-prop': 3.1.2(vue@3.5.32(typescript@5.9.3)) @@ -32583,7 +32897,7 @@ snapshots: '@vue-macros/define-render': 3.1.2(vue@3.5.32(typescript@5.9.3)) '@vue-macros/define-slots': 3.1.2(vue@3.5.32(typescript@5.9.3)) '@vue-macros/define-stylex': 3.1.2(vue@3.5.32(typescript@5.9.3)) - '@vue-macros/devtools': 3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vue-macros/devtools': 3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vue-macros/export-expose': 3.1.2(vue@3.5.32(typescript@5.9.3)) '@vue-macros/export-props': 3.1.2(vue@3.5.32(typescript@5.9.3)) '@vue-macros/export-render': 3.1.2(vue@3.5.32(typescript@5.9.3)) @@ -32600,7 +32914,7 @@ snapshots: '@vue-macros/short-vmodel': 3.1.2(vue@3.5.32(typescript@5.9.3)) '@vue-macros/volar': 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) unplugin: 2.3.11 - unplugin-combine: 2.1.3(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + unplugin-combine: 2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@2.80.0)(unplugin@2.3.11)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-vue-define-options: 3.1.2(vue@3.5.32(typescript@5.9.3)) vue: 3.5.32(typescript@5.9.3) transitivePeerDependencies: @@ -32648,7 +32962,55 @@ snapshots: '@vue-macros/short-vmodel': 3.1.2(vue@3.5.32(typescript@5.9.3)) '@vue-macros/volar': 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) unplugin: 2.3.11 - unplugin-combine: 2.1.3(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + unplugin-combine: 2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + unplugin-vue-define-options: 3.1.2(vue@3.5.32(typescript@5.9.3)) + vue: 3.5.32(typescript@5.9.3) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - '@rspack/core' + - '@vueuse/core' + - esbuild + - rolldown + - rollup + - typescript + - vite + - vue-tsc + - webpack + + vue-macros@3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)): + dependencies: + '@vue-macros/better-define': 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/boolean-prop': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/chain-call': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/common': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/config': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/define-emit': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/define-models': 3.1.2(@vueuse/core@14.2.1(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/define-prop': 3.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/define-props': 3.1.2(@vue-macros/reactivity-transform@3.1.2(vue@3.5.32(typescript@5.9.3)))(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/define-props-refs': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/define-render': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/define-slots': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/define-stylex': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/devtools': 3.1.2(typescript@5.9.3)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vue-macros/export-expose': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/export-props': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/export-render': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/hoist-static': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/jsx-directive': 3.1.2(typescript@5.9.3) + '@vue-macros/named-template': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/reactivity-transform': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/script-lang': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/setup-block': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/setup-component': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/setup-sfc': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/short-bind': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/short-emits': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/short-vmodel': 3.1.2(vue@3.5.32(typescript@5.9.3)) + '@vue-macros/volar': 3.1.2(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.32(typescript@5.9.3)) + unplugin: 2.3.11 + unplugin-combine: 2.3.0(esbuild@0.27.2)(rolldown@1.0.0-rc.15)(rollup@4.60.1)(unplugin@2.3.11)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) unplugin-vue-define-options: 3.1.2(vue@3.5.32(typescript@5.9.3)) vue: 3.5.32(typescript@5.9.3) transitivePeerDependencies: @@ -33016,7 +33378,7 @@ snapshots: is-wsl: 3.1.1 powershell-utils: 0.1.0 - wxt@0.20.22(@types/node@24.12.2)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + wxt@0.20.22(@types/node@25.6.0)(canvas@3.2.3)(eslint@10.2.0(jiti@2.6.1))(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@1natsu/wait-element': 4.1.2 '@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.60.1) @@ -33057,8 +33419,8 @@ snapshots: scule: 1.3.0 tinyglobby: 0.2.16 unimport: 5.6.0 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - vite-node: 5.2.0(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.2)(jiti@2.6.1)(less@4.6.4)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 5.2.0(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) web-ext-run: 0.2.4 optionalDependencies: eslint: 10.2.0(jiti@2.6.1)