fix(airi-plugin-vscode): sync with new server-sdk design

This commit is contained in:
Neko Ayaka
2025-12-27 03:40:55 +08:00
parent 60071be332
commit 3fe0e4c091
5 changed files with 129 additions and 66 deletions
+5 -1
View File
@@ -1,6 +1,6 @@
{
"publisher": "proj-airi",
"name": "airi-vscode",
"name": "@proj-airi/airi-plugin-vscode",
"displayName": "AIRI",
"version": "0.8.0-beta.7",
"private": true,
@@ -66,6 +66,10 @@
"publish": "tsx ./scripts/publish.ts",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"es-toolkit": "catalog:",
"injeca": "catalog:"
},
"devDependencies": {
"@guiiai/logg": "catalog:",
"@moeru/std": "catalog:",
+13 -5
View File
@@ -1,7 +1,9 @@
import type { WebSocketEventOptionalSource } from '@proj-airi/server-sdk'
import type { Events } from './types'
import { useLogger } from '@guiiai/logg'
import { Client as ServerClient } from '@proj-airi/server-sdk'
import { ContextUpdateStrategy, Client as ServerClient } from '@proj-airi/server-sdk'
export class Client {
private client: ServerClient<Events> | null = null
@@ -27,7 +29,7 @@ export class Client {
}
}
async sendEvent(event: Events): Promise<void> {
private async send(event: WebSocketEventOptionalSource<Events>): Promise<void> {
if (!this.client) {
useLogger().warn('Cannot send event: not connected to AIRI Server Channel')
return
@@ -35,15 +37,21 @@ export class Client {
try {
await this.client.connect()
this.client.send({ type: 'vscode:context', data: event })
useLogger().log(`Sent event to AIRI: ${event.type}`, event)
this.client.send(event)
}
catch (error) {
useLogger().errorWithError('Failed to send event to AIRI:', error)
}
}
async replaceContext(context: string): Promise<void> {
this.send({ type: 'context:update', data: { strategy: ContextUpdateStrategy.ReplaceSelf, text: context } })
}
async appendContext(context: string): Promise<void> {
this.send({ type: 'context:update', data: { strategy: ContextUpdateStrategy.AppendSelf, text: context } })
}
isConnected(): boolean {
return !!this.client
}
+66 -46
View File
@@ -1,15 +1,15 @@
import type { DependencyMap, ProvidedKey } from 'injeca'
import type * as vscode from 'vscode'
import { initLogger, LoggerFormat, LoggerLevel, useLogger } from '@guiiai/logg'
import { noop } from 'es-toolkit'
import { injeca } from 'injeca'
import { commands, window, workspace } from 'vscode'
import { Client } from './airi'
import { ContextCollector } from './context-collector'
let client: Client
let contextCollector: ContextCollector
let updateTimer: NodeJS.Timeout | null = null
let isEnabled = true
let eventListeners: vscode.Disposable[] = []
/**
@@ -22,17 +22,38 @@ export async function activate(context: vscode.ExtensionContext) {
// Get the configuration
const config = workspace.getConfiguration('airi-vscode')
isEnabled = config.get<boolean>('enabled', true)
const isEnabled = config.get<boolean>('enabled', true)
const contextLines = config.get<number>('contextLines', 5)
const sendInterval = config.get<number>('sendInterval', 3000)
// Initialize
client = new Client()
contextCollector = new ContextCollector(contextLines)
const vscodeContext = injeca.provide('vscode:context', () => context)
const client = injeca.provide('proj-airi:client', () => new Client())
const contextCollector = injeca.provide('self:context-collector', () => new ContextCollector(contextLines))
const extension = injeca.provide('extension', {
dependsOn: { client, vscodeContext, contextCollector },
build: ({ dependsOn }) => setup({ ...dependsOn, isEnabled, sendInterval }),
})
injeca.invoke({
dependsOn: { extension },
callback: noop,
})
await injeca.start()
}
async function setup(params: {
client: Client
vscodeContext: vscode.ExtensionContext
contextCollector: ContextCollector
isEnabled: boolean
sendInterval: number
}) {
// Connect to Airi Channel Server
if (isEnabled) {
const connected = await client.connect()
if (params.isEnabled) {
const connected = await params.client.connect()
if (connected) {
window.showInformationMessage('AIRI Server Channel connected!')
}
@@ -42,30 +63,30 @@ export async function activate(context: vscode.ExtensionContext) {
}
// Register commands
context.subscriptions.push(
params.vscodeContext.subscriptions.push(
commands.registerCommand('airi-vscode.enable', async () => {
isEnabled = true
await client.connect()
await registerListeners(sendInterval)
params.isEnabled = true
await params.client.connect()
await registerListeners({ sendInterval: params.sendInterval, contextCollector: params.contextCollector, client: params.client, isEnabled: params.isEnabled })
window.showInformationMessage('AIRI enabled!')
}),
commands.registerCommand('airi-vscode.disable', () => {
isEnabled = false
params.isEnabled = false
unregisterListeners()
client.disconnect()
params.client.disconnect()
window.showInformationMessage('AIRI disabled!')
}),
commands.registerCommand('airi-vscode.status', () => {
const status = isEnabled && client ? 'Connected' : 'Disconnected'
const status = params.isEnabled && params.client ? 'Connected' : 'Disconnected'
window.showInformationMessage(`AIRI Server Channel status: ${status}.`)
}),
)
// Register event listeners if enabled
if (isEnabled) {
await registerListeners(sendInterval)
if (params.isEnabled) {
await registerListeners({ sendInterval: params.sendInterval, contextCollector: params.contextCollector, client: params.client, isEnabled: params.isEnabled })
}
useLogger().log('AIRI activated successfully')
@@ -74,7 +95,7 @@ export async function activate(context: vscode.ExtensionContext) {
/**
* Register event listeners for file save and editor switch
*/
async function registerListeners(sendInterval: number) {
async function registerListeners(params: { contextCollector: ContextCollector, client: Client, isEnabled: boolean, sendInterval: number }) {
unregisterListeners()
// File save event
@@ -82,13 +103,11 @@ async function registerListeners(sendInterval: number) {
workspace.onDidSaveTextDocument(async (document) => {
const editor = window.activeTextEditor
if (editor && editor.document === document) {
const ctx = await contextCollector.collect(editor)
if (ctx) {
client.sendEvent({
type: 'coding:save',
data: ctx,
})
}
const ctx = await params.contextCollector.collect(editor)
if (!ctx)
return
params.client.replaceContext(JSON.stringify({ type: 'coding:save', data: ctx }))
}
}),
)
@@ -96,21 +115,22 @@ async function registerListeners(sendInterval: number) {
// Switch file event
eventListeners.push(
window.onDidChangeActiveTextEditor(async (editor) => {
if (editor) {
const ctx = await contextCollector.collect(editor)
if (ctx) {
client.sendEvent({
type: 'coding:switch-file',
data: ctx,
})
}
if (!editor) {
return
}
const ctx = await params.contextCollector.collect(editor)
if (!ctx) {
return
}
params.client.replaceContext(JSON.stringify({ type: 'coding:switch-file', data: ctx }))
}),
)
// Start periodic monitoring if interval is set
if (sendInterval > 0) {
startMonitoring(sendInterval)
if (params.sendInterval > 0) {
startMonitoring({ contextCollector: params.contextCollector, client: params.client, isEnabled: params.isEnabled, interval: params.sendInterval })
}
}
@@ -126,25 +146,23 @@ function unregisterListeners() {
/**
* Start monitoring the coding context
*/
function startMonitoring(interval: number) {
function startMonitoring(params: { contextCollector: ContextCollector, client: Client, isEnabled: boolean, interval: number }) {
stopMonitoring()
updateTimer = setInterval(async () => {
if (!isEnabled)
if (!params.isEnabled)
return
const editor = window.activeTextEditor
if (!editor)
return
const ctx = await contextCollector.collect(editor)
if (ctx) {
client.sendEvent({
type: 'coding:context',
data: ctx,
})
}
}, interval)
const ctx = await params.contextCollector.collect(editor)
if (!ctx)
return
params.client.replaceContext(JSON.stringify({ type: 'coding:context', data: ctx }))
}, params.interval)
}
/**
@@ -160,7 +178,9 @@ function stopMonitoring() {
/**
* Deactivate the plugin
*/
export function deactivate() {
export async function deactivate() {
const { client } = await injeca.resolve({ client: { key: 'proj-airi:client' } as ProvidedKey<'proj-airi:client', Client, DependencyMap | undefined> })
unregisterListeners()
client?.disconnect()
useLogger().log('AIRI deactivated!')
+41 -11
View File
@@ -46,10 +46,10 @@ catalogs:
specifier: ^0.4.0-beta.12
version: 0.4.0-beta.12
'@xsai/shared':
specifier: ^0.4.0-beta.12
specifier: 0.4.0-beta.12
version: 0.4.0-beta.12
'@xsai/shared-chat':
specifier: ^0.4.0-beta.12
specifier: 0.4.0-beta.12
version: 0.4.0-beta.12
'@xsai/stream-text':
specifier: ^0.4.0-beta.12
@@ -67,8 +67,11 @@ catalogs:
specifier: ^8.6.0
version: 8.6.0
es-toolkit:
specifier: ^1.43.0
specifier: 1.43.0
version: 1.43.0
injeca:
specifier: ^0.1.5
version: 0.1.5
posthog-js:
specifier: 1.306.1
version: 1.306.1
@@ -1114,7 +1117,7 @@ importers:
version: 11.2.2(vue@3.5.25(typescript@5.9.3))
vue-sonner:
specifier: ^2.0.9
version: 2.0.9(@nuxt/kit@4.0.3(magicast@0.5.1))(@nuxt/schema@4.0.3)(nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))
version: 2.0.9(@nuxt/kit@4.0.3(magicast@0.5.1))(@nuxt/schema@4.0.3)(nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2))
devDependencies:
'@iconify-json/lucide':
specifier: ^1.2.82
@@ -1331,7 +1334,14 @@ importers:
specifier: 'catalog:'
version: 0.1.0-beta.14
packages/server-shared: {}
packages/server-shared:
dependencies:
'@xsai/shared':
specifier: 'catalog:'
version: 0.4.0-beta.12
'@xsai/shared-chat':
specifier: 'catalog:'
version: 0.4.0-beta.12
packages/stage-pages:
dependencies:
@@ -1962,7 +1972,7 @@ importers:
version: rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
vite-plugin-vue-devtools:
specifier: ^8.0.5
version: 8.0.5(@nuxt/kit@4.0.3(magicast@0.5.1))(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
version: 8.0.5(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
vue-router:
specifier: ^4.6.4
version: 4.6.4(vue@3.5.25(typescript@5.9.3))
@@ -1996,7 +2006,7 @@ importers:
version: rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
vite-plugin-vue-devtools:
specifier: ^8.0.5
version: 8.0.5(@nuxt/kit@4.0.3(magicast@0.5.1))(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
version: 8.0.5(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
vue-router:
specifier: ^4.6.4
version: 4.6.4(vue@3.5.25(typescript@5.9.3))
@@ -2070,6 +2080,13 @@ importers:
version: 3.1.8(typescript@5.9.3)
plugins/airi-plugin-vscode:
dependencies:
es-toolkit:
specifier: 'catalog:'
version: 1.43.0
injeca:
specifier: 'catalog:'
version: 0.1.5(@guiiai/logg@1.2.11)(error-stack-parser@2.1.4)(nanoid@5.1.6)
devDependencies:
'@guiiai/logg':
specifier: 'catalog:'
@@ -29638,7 +29655,7 @@ snapshots:
- yaml
optional: true
nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2):
nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2):
dependencies:
'@nuxt/cli': 3.31.3(cac@6.7.14)(magicast@0.5.1)
'@nuxt/devalue': 2.0.2
@@ -33334,7 +33351,6 @@ snapshots:
'@nuxt/kit': 3.20.2(magicast@0.3.5)
transitivePeerDependencies:
- supports-color
optional: true
vite-plugin-inspect@11.3.3(@nuxt/kit@3.20.2(magicast@0.3.5))(vite@6.4.1(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
@@ -33413,6 +33429,20 @@ snapshots:
- supports-color
- vue
vite-plugin-vue-devtools@8.0.5(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)):
dependencies:
'@vue/devtools-core': 8.0.5(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
'@vue/devtools-kit': 8.0.5
'@vue/devtools-shared': 8.0.5
sirv: 3.0.2
vite: rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)
vite-plugin-inspect: 11.3.3(@nuxt/kit@3.20.2(magicast@0.3.5))(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
vite-plugin-vue-inspector: 5.3.2(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))
transitivePeerDependencies:
- '@nuxt/kit'
- supports-color
- vue
vite-plugin-vue-inspector@5.3.2(rolldown-vite@7.2.11(@types/node@24.10.4)(esbuild@0.25.12)(jiti@2.6.1)(less@4.5.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)):
dependencies:
'@babel/core': 7.28.5
@@ -33779,11 +33809,11 @@ snapshots:
'@nuxt/schema': 4.0.3
nuxt: 4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@6.4.1(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
vue-sonner@2.0.9(@nuxt/kit@4.0.3(magicast@0.5.1))(@nuxt/schema@4.0.3)(nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)):
vue-sonner@2.0.9(@nuxt/kit@4.0.3(magicast@0.5.1))(@nuxt/schema@4.0.3)(nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)):
optionalDependencies:
'@nuxt/kit': 4.0.3(magicast@0.5.1)
'@nuxt/schema': 4.0.3
nuxt: 4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
nuxt: 4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.10.4)(@vue/compiler-sfc@3.5.26)(bufferutil@4.0.9)(cac@6.7.14)(db0@0.3.4(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.45.1(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(less@4.5.1)(lightningcss@1.30.2)(magicast@0.5.1)(optionator@0.9.4)(rolldown@1.0.0-beta.53)(rollup@4.54.0)(terser@5.44.1)(tsx@4.21.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(xml2js@0.6.2)(yaml@2.8.2)
vue-tsc@3.1.8(typescript@5.9.3):
dependencies:
+4 -3
View File
@@ -35,14 +35,15 @@ catalog:
'@xsai/generate-text': ^0.4.0-beta.12
'@xsai/generate-transcription': ^0.4.0-beta.12
'@xsai/model': ^0.4.0-beta.12
'@xsai/shared': ^0.4.0-beta.12
'@xsai/shared-chat': ^0.4.0-beta.12
'@xsai/shared': 0.4.0-beta.12
'@xsai/shared-chat': 0.4.0-beta.12
'@xsai/stream-text': ^0.4.0-beta.12
'@xsai/tool': ^0.4.0-beta.12
'@xsai/utils-chat': 0.4.0-beta.5
builder-util-runtime: ^9.3.1
embla-carousel-vue: ^8.6.0
es-toolkit: ^1.43.0
es-toolkit: 1.43.0
injeca: ^0.1.5
posthog-js: 1.306.1
uncrypto: ^0.1.3
xsschema: ^0.4.0-beta.12