Bladeren bron

Merge branch 'main' of https://git.shalu.com/Shalu/shalu-agent-workflow

jiaxing.liao 6 dagen geleden
bovenliggende
commit
ba502c1c99

+ 1 - 1
apps/web/src/components/RunWork.vue

@@ -45,4 +45,4 @@ const emit = defineEmits<{
 .pt-0 {
     padding-top: 0px;
 }
-</style>
+</style>

+ 1 - 1
apps/web/src/components/SearchDialog/index.vue

@@ -38,7 +38,7 @@
 				<div class="search-items">
 					<div class="search-item action-item" @click="handleCreateWorkflow">
 						<span class="item-icon">+</span>
-						<span class="item-text">在个人环境中创建工作流程</span>
+						<span class="item-text">创建工作流程</span>
 					</div>
 				</div>
 			</div>

+ 1 - 51
apps/web/src/layouts/MainLayout.vue

@@ -5,64 +5,14 @@
 		</el-aside>
 
 		<el-container>
-			<el-header
-				v-if="!isWorkflowPage"
-				style="
-					height: 64px;
-					display: flex;
-					align-items: center;
-					padding: 0 16px;
-					justify-content: space-between;
-				"
-			>
-				<div style="display: flex; align-items: center; gap: 12px">
-					<div style="font-weight: 700; font-size: 18px">AI Agent</div>
-					<div style="color: #888; font-size: 13px">概述</div>
-				</div>
-
-				<div style="display: flex; align-items: center; gap: 12px">
-					<el-dropdown style="background: #ff6b6b" split-button type="primary" @click="handleClick">
-						创建工作流程
-						<template #dropdown>
-							<el-dropdown-menu>
-								<el-dropdown-item>创建凭证</el-dropdown-item>
-								<el-dropdown-item>创建变量</el-dropdown-item>
-								<el-dropdown-item>创建数据表</el-dropdown-item>
-							</el-dropdown-menu>
-						</template>
-					</el-dropdown>
-				</div>
-			</el-header>
-
-			<el-main style="padding: 16px; overflow: auto" :style="mainStyle">
+			<el-main style="padding: 16px; overflow: auto">
 				<router-view />
 			</el-main>
 		</el-container>
 	</el-container>
 </template>
 <script setup lang="ts">
-import { useRouter, useRoute } from 'vue-router'
-import { computed, provide, ref, type CSSProperties } from 'vue'
 import Sidebar from '@/components/Sidebar/index.vue'
-
-const router = useRouter()
-const route = useRoute()
-
-const mainStyle = ref<CSSProperties>({})
-
-const isWorkflowPage = computed(() => {
-	return route.path.includes('/workflow/')
-})
-
-const handleClick = () => {
-	router.push('/workflow/0')
-}
-
-provide('layout', {
-	setMainStyle(style: CSSProperties) {
-		mainStyle.value = style
-	}
-})
 </script>
 
 <style lang="less" scoped></style>

+ 10 - 2
apps/web/src/router/index.ts

@@ -9,8 +9,16 @@ const routes = [
 		path: '/',
 		component: MainLayout,
 		children: [
-			{ path: '', name: 'Dashboard', component: Dashboard },
-			{ path: 'workflow/:id', name: 'Editor', component: Editor }
+			{
+				path: '',
+				name: 'Dashboard',
+				component: Dashboard
+			},
+			{
+				path: 'workflow/:id',
+				name: 'Editor',
+				component: Editor
+			}
 		]
 	}
 ]

+ 39 - 0
apps/web/src/stores/dashboard.ts

@@ -0,0 +1,39 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+
+export const useDashboardStore = defineStore('dashboard', () => {
+	const activeTab = ref<string>('flows')
+	const showVarDialog = ref(false)
+	const showTableDialog = ref(false)
+
+	const setActiveTab = (tab: string) => {
+		activeTab.value = tab
+	}
+
+	const openVarDialog = () => {
+		showVarDialog.value = true
+	}
+
+	const closeVarDialog = () => {
+		showVarDialog.value = false
+	}
+
+	const openTableDialog = () => {
+		showTableDialog.value = true
+	}
+
+	const closeTableDialog = () => {
+		showTableDialog.value = false
+	}
+
+	return {
+		activeTab,
+		setActiveTab,
+		showVarDialog,
+		openVarDialog,
+		closeVarDialog,
+		showTableDialog,
+		openTableDialog,
+		closeTableDialog
+	}
+})

+ 199 - 78
apps/web/src/views/Dashboard.vue

@@ -1,26 +1,58 @@
 <template>
-	<div>
-		<el-card shadow="never" style="padding: 18px">
-			<el-row :gutter="16" justify="start">
-				<el-col :span="4" v-for="(card, idx) in cards" :key="idx">
-					<div
-						style="
-							background: linear-gradient(135deg, #fff 0%, #fafafa 100%);
-							padding: 16px;
-							border-radius: 8px;
-							box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
-							border: 1px solid #f0f0f0;
-						"
-					>
-						<div style="font-size: 13px; color: #888">{{ card.title }}</div>
-						<div style="font-size: 20px; margin-top: 6px; font-weight: 600">{{ card.value }}</div>
-					</div>
-				</el-col>
-			</el-row>
-		</el-card>
+	<div style="margin: -16px -16px 0 -16px">
+		<!-- 顶部栏 -->
+		<div
+			style="
+				height: 64px;
+				display: flex;
+				align-items: center;
+				padding: 0 16px;
+				justify-content: space-between;
+				background: #fff;
+				border-bottom: 1px solid #f0f0f0;
+			"
+		>
+			<div style="display: flex; align-items: center; gap: 12px">
+				<div style="font-weight: 700; font-size: 18px">AI Agent</div>
+				<div style="color: #888; font-size: 13px">概述</div>
+			</div>
+
+			<div style="display: flex; align-items: center; gap: 12px">
+				<el-dropdown style="background: #ff6b6b" split-button type="primary" @click="handleMenuClick(buttonConfig.text)">
+					{{ buttonConfig.text }}
+					<template #dropdown>
+						<el-dropdown-menu>
+							<el-dropdown-item v-for="item in buttonConfig.items" :key="item" @click="handleMenuClick(item)">
+								{{ item }}
+							</el-dropdown-item>
+						</el-dropdown-menu>
+					</template>
+				</el-dropdown>
+			</div>
+		</div>
+
+		<div style="padding: 16px">
+			<el-card shadow="never" style="padding: 18px">
+				<el-row :gutter="16" justify="start">
+					<el-col :span="4" v-for="(card, idx) in cards" :key="idx">
+						<div
+							style="
+								background: linear-gradient(135deg, #fff 0%, #fafafa 100%);
+								padding: 16px;
+								border-radius: 8px;
+								box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+								border: 1px solid #f0f0f0;
+							"
+						>
+							<div style="font-size: 13px; color: #888">{{ card.title }}</div>
+							<div style="font-size: 20px; margin-top: 6px; font-weight: 600">{{ card.value }}</div>
+						</div>
+					</el-col>
+				</el-row>
+			</el-card>
 
 		<el-card style="margin-top: 16px">
-			<el-tabs v-model="activeTab">
+			<el-tabs v-model="dashboardStore.activeTab">
 				<el-tab-pane label="工作流程" name="flows"></el-tab-pane>
 				<el-tab-pane label="证书" name="certs"></el-tab-pane>
 				<el-tab-pane label="执行" name="execs"></el-tab-pane>
@@ -215,11 +247,11 @@
 						<div style="font-size: 13px; color: #999; margin-bottom: 16px">
 							变量可用于存储可在多个工作流程中轻松引用的数据。
 						</div>
-						<el-button @click="showVarDialog = true">添加第一个变量</el-button>
+						<el-button @click="dashboardStore.openVarDialog">添加第一个变量</el-button>
 					</div>
 					<el-table v-else :data="filteredVariables" style="width: 100%; margin-top: 12px">
-						<el-table-column prop="key" label="钥匙" />
-						<el-table-column prop="value" label="值" />
+						<el-table-column prop="key" label="key" />
+						<el-table-column prop="value" label="值" />
 						<el-table-column prop="usage" label="使用语法" width="150">
 							<template #default="scope">
 								<el-tag type="info">{{ scope.row.usage }}</el-tag>
@@ -227,10 +259,10 @@
 						</el-table-column>
 						<el-table-column prop="scope" label="范围" width="100">
 							<template #default="scope">
-								<el-tag size="small">{{ scope.row.scope }}</el-tag>
+								<el-tag size="small">{{ scope.row.scope === 'scope' ? '全局' : '' }}</el-tag>
 							</template>
 						</el-table-column>
-						<el-table-column label="操作" width="120" align="right">
+						<el-table-column label="操作" width="200" align="right">
 							<template #default="scope">
 								<el-button text size="small" @click="editVariable(scope.row)">编辑</el-button>
 								<el-button text size="small" type="danger" @click="deleteVariable(scope.row.id)"
@@ -267,7 +299,7 @@
 						<div style="font-size: 13px; color: #999; margin-bottom: 20px">
 							使用数据表来保存执行结果、在工作流之间共享数据以及跨进程体估指标。
 						</div>
-						<el-button @click="showTableDialog = true">创建数据表</el-button>
+						<el-button @click="dashboardStore.openTableDialog">创建数据表</el-button>
 					</div>
 					<div v-else>
 						<div
@@ -348,7 +380,7 @@
 									</div>
 
 									<div style="display: flex; gap: 8px; align-items: center">
-										<el-tag size="small" type="info">个人的</el-tag>
+										<!-- <el-tag size="small" type="info">个人的</el-tag> -->
 										<el-dropdown>
 											<span class="el-dropdown-link">•••</span>
 											<template #dropdown>
@@ -396,35 +428,35 @@
 		</el-card>
 
 		<!-- 新变量对话框 -->
-		<el-dialog v-model="showVarDialog" title="新变量" width="500px" @close="resetVarForm">
-			<el-form :model="varForm">
-				<el-form-item label="钥匙" required>
-					<el-input v-model="varForm.key" placeholder="请输入姓名" />
+	<el-dialog v-model="dashboardStore.showVarDialog" :title="varDialogTitle" width="500px" @close="resetVarForm">
+			<el-form ref="varFormRef" :model="varForm" :rules="varFormRules" label-position="top">
+				<el-form-item label="Key" prop="key">
+					<el-input v-model="varForm.key" placeholder="请输入key" />
 				</el-form-item>
-				<el-form-item label="值">
+				<el-form-item label="值" prop="value">
 					<el-input v-model="varForm.value" type="textarea" placeholder="请输入一个值" rows="4" />
 				</el-form-item>
-				<el-form-item label="范围" required>
+				<el-form-item label="范围" prop="scope">
 					<el-select v-model="varForm.scope" placeholder="选择">
-						<el-option label="全局的" value="全局的" />
+						<el-option label="全局" value="scope" />
 					</el-select>
 				</el-form-item>
 			</el-form>
 			<template #footer>
 				<div style="text-align: right">
-					<el-button @click="showVarDialog = false">取消</el-button>
+				<el-button @click="dashboardStore.closeVarDialog">取消</el-button>
 					<el-button type="primary" @click="submitVariable">提交</el-button>
 				</div>
 			</template>
 		</el-dialog>
 
 		<!-- 创建新数据表对话框 -->
-		<el-dialog v-model="showTableDialog" title="创建新数据表" width="500px" @close="resetTableForm">
-			<el-form :model="tableForm">
-				<el-form-item label="数据表名称" required>
+	<el-dialog v-model="dashboardStore.showTableDialog" title="创建新数据表" width="500px" @close="resetTableForm">
+			<el-form ref="tableFormRef" :model="tableForm" :rules="tableFormRules" label-position="top">
+				<el-form-item label="数据表名称" prop="name">
 					<el-input v-model="tableForm.name" placeholder="输入数据表名称" />
 				</el-form-item>
-				<el-form-item label="创建方式">
+				<el-form-item label="创建方式" prop="method">
 					<el-radio-group v-model="tableForm.method">
 						<el-radio value="from-scratch">从零开始</el-radio>
 						<el-radio value="import-csv">导入 CSV 文件</el-radio>
@@ -433,21 +465,54 @@
 			</el-form>
 			<template #footer>
 				<div style="text-align: right">
-					<el-button @click="showTableDialog = false">取消</el-button>
+				<el-button @click="dashboardStore.closeTableDialog">取消</el-button>
 					<el-button type="primary" @click="submitTable">创建</el-button>
 				</div>
 			</template>
 		</el-dialog>
+		</div>
 	</div>
 </template>
 
 <script setup lang="ts">
 import { ref, computed } from 'vue'
 import { useRouter } from 'vue-router'
-import { Search } from '@element-plus/icons-vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
+import { Search } from '@element-plus/icons-vue'
+import { useDashboardStore } from '@/stores/dashboard'
 
 const $router = useRouter()
+const dashboardStore = useDashboardStore()
+
+// 根据当前 tab 确定按钮文字和下拉菜单
+const buttonConfig = computed(() => {
+	const tab = dashboardStore.activeTab
+	const configs: Record<string, { text: string; items: string[] }> = {
+		flows: { text: '创建工作流程', items: ['创建凭证', '创建变量', '创建数据表'] },
+		certs: { text: '创建凭证', items: ['创建工作流程', '创建变量', '创建数据表'] },
+		execs: { text: '创建工作流程', items: ['创建凭证', '创建变量', '创建数据表'] },
+		vars: { text: '创建变量', items: ['创建工作流程', '创建凭证', '创建数据表'] },
+		tables: { text: '创建数据表', items: ['创建工作流程', '创建凭证', '创建变量'] }
+	}
+	return configs[tab] || { text: '创建工作流程', items: ['创建凭证', '创建变量', '创建数据表'] }
+})
+
+const handleMenuClick = (text: string) => {
+	const actionMap: Record<string, () => void> = {
+		'创建工作流程': () => $router.push('/workflow/0'),
+		'创建凭证': () => console.log('创建凭证'),
+		'创建变量': () => {
+			dashboardStore.setActiveTab('vars')
+			dashboardStore.openVarDialog()
+		},
+		'创建数据表': () => {
+			dashboardStore.setActiveTab('tables')
+			dashboardStore.openTableDialog()
+		}
+	}
+	const action = actionMap[text]
+	if (action) action()
+}
 
 const cards = [
 	{ title: '生产执行', value: 0 },
@@ -511,12 +576,15 @@ const executions = ref([
 	}
 ])
 
-const variables = ref([])
+const variables = ref<{ id: number; key: string; value: string; usage: string; scope: string }[]>(
+	[]
+)
 
-const tables = ref([])
+const tables = ref<
+	{ id: number; name: string; description: string; method: string; size: string; rows: string }[]
+>([])
 
 // 数据表相关
-const showTableDialog = ref(false)
 const tablePageInput = ref('')
 const tablePageSize = ref('50')
 const tableForm = ref({
@@ -531,68 +599,121 @@ const resetTableForm = () => {
 	}
 }
 
-const submitTable = () => {
-	if (!tableForm.value.name.trim()) {
-		ElMessage.error('请输入数据表名称')
-		return
-	}
-	const newTable = {
-		id: Math.max(...tables.value.map((t: any) => t.id), 0) + 1,
-		name: tableForm.value.name,
-		description: tableForm.value.method === 'from-scratch' ? '从零开始创建' : '从 CSV 导入',
-		method: tableForm.value.method
+const tableFormRef = ref()
+
+const tableFormRules = {
+	name: [
+		{ required: true, message: '请输入数据表名称', trigger: 'blur' },
+		{ min: 1, max: 100, message: '数据表名称长度为 1-100 个字符', trigger: 'blur' }
+	],
+	method: [
+		{ required: true, message: '请选择创建方式', trigger: 'change' }
+	]
+}
+
+const submitTable = async () => {
+	try {
+		await tableFormRef.value?.validate()
+		const newTable = {
+			id: Math.max(...tables.value.map((t: any) => t.id), 0) + 1,
+			name: tableForm.value.name,
+			description: tableForm.value.method === 'from-scratch' ? '从零开始创建' : '从 CSV 导入',
+			method: tableForm.value.method,
+			size: '0MB',
+			rows: '0'
+		}
+		tables.value.push(newTable)
+		dashboardStore.closeTableDialog()
+		resetTableForm()
+		ElMessage.success('数据表已创建')
+	} catch (error) {
+		// 验证失败,form 会自动显示错误信息
 	}
-	tables.value.push(newTable)
-	showTableDialog.value = false
-	resetTableForm()
-	ElMessage.success('数据表已创建')
 }
 
 const filter = ref('')
 const sort = ref('name')
-const activeTab = ref('flows')
 const pageSize = ref(10)
 
+// 使用 computed 来包装 dashboardStore.activeTab,以便简化模板中的引用
+const activeTab = computed(() => dashboardStore.activeTab)
+
 // 变量表单相关
-const showVarDialog = ref(false)
 const varFilter = ref('')
 const varSort = ref('name')
 const varPageSize = ref('25')
 const varForm = ref({
+	id: undefined as number | undefined,
 	key: '',
 	value: '',
-	scope: '全局的'
+	scope: 'scope'
 })
 
 const resetVarForm = () => {
 	varForm.value = {
+		id: undefined,
 		key: '',
 		value: '',
-		scope: '全局的'
+		scope: 'scope'
 	}
 }
 
-const submitVariable = () => {
-	if (!varForm.value.key.trim()) {
-		ElMessage.error('请输入钥匙')
-		return
-	}
-	const newVar = {
-		id: Math.max(...variables.value.map((v: any) => v.id), 0) + 1,
-		key: varForm.value.key,
-		value: varForm.value.value,
-		usage: `$vars.${varForm.value.key}`,
-		scope: varForm.value.scope
+const varFormRef = ref()
+
+const varFormRules = {
+	key: [
+		{ required: true, message: '请输入Key', trigger: 'blur' },
+		{ min: 1, max: 100, message: 'Key 长度为 1-100 个字符', trigger: 'blur' }
+	],
+	value: [],
+	scope: [
+		{ required: true, message: '请选择范围', trigger: 'change' }
+	]
+}
+
+const submitVariable = async () => {
+	try {
+		await varFormRef.value?.validate()
+		// 编辑已有变量
+		if (varForm.value.id) {
+			const idx = variables.value.findIndex((v: any) => v.id === varForm.value.id)
+			if (idx !== -1) {
+				variables.value[idx] = {
+					id: varForm.value.id,
+					key: varForm.value.key,
+					value: varForm.value.value,
+					usage: `$vars.${varForm.value.key}`,
+					scope: varForm.value.scope
+				}
+				dashboardStore.closeVarDialog()
+				resetVarForm()
+				ElMessage.success('变量已更新')
+				return
+			}
+		}
+
+		// 新增变量
+		const newVar = {
+			id: Math.max(...variables.value.map((v: any) => v.id), 0) + 1,
+			key: varForm.value.key,
+			value: varForm.value.value,
+			usage: `$vars.${varForm.value.key}`,
+			scope: varForm.value.scope
+		}
+		variables.value.push(newVar)
+		dashboardStore.closeVarDialog()
+		resetVarForm()
+		ElMessage.success('变量已添加')
+	} catch (error) {
+		// 验证失败,form 会自动显示错误信息
 	}
-	variables.value.push(newVar)
-	showVarDialog.value = false
-	resetVarForm()
-	ElMessage.success('变量已添加')
 }
 
+const varDialogTitle = computed(() => (varForm.value.id ? '编辑变量' : '新增'))
+
 const editVariable = (variable: any) => {
 	varForm.value = { ...variable, scope: variable.scope }
-	showVarDialog.value = true
+	dashboardStore.openVarDialog()
 }
 
 const deleteVariable = (id: number) => {

+ 52 - 78
pnpm-lock.yaml

@@ -169,7 +169,7 @@ importers:
         version: link:../../packages/workflow
       '@vitejs/plugin-vue':
         specifier: ^6.0.1
-        version: 6.0.3(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))(vue@3.5.27(typescript@5.9.3))
+        version: 6.0.3(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))(vue@3.5.27(typescript@5.9.3))
       '@vue/tsconfig':
         specifier: ^0.8.1
         version: 0.8.1(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))
@@ -181,7 +181,7 @@ importers:
         version: 5.9.3
       unocss:
         specifier: ^66.6.0
-        version: 66.6.0(postcss@5.2.18)(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))
+        version: 66.6.0(postcss@5.2.18)(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))
       unplugin-auto-import:
         specifier: ^21.0.0
         version: 21.0.0(@vueuse/core@10.11.1(vue@3.5.27(typescript@5.9.3)))
@@ -193,10 +193,10 @@ importers:
         version: 31.0.0(vue@3.5.27(typescript@5.9.3))
       vite:
         specifier: npm:rolldown-vite@7.2.5
-        version: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)
+        version: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)
       vite-plugin-svg-icons:
         specifier: ^2.0.1
-        version: 2.0.1(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))
+        version: 2.0.1(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))
       vue-tsc:
         specifier: ^3.1.4
         version: 3.2.2(typescript@5.9.3)
@@ -212,7 +212,7 @@ importers:
         version: link:../typescript-config
       '@umijs/openapi':
         specifier: ^1.14.1
-        version: 1.14.1(chokidar@5.0.0)(typescript@5.9.3)
+        version: 1.14.1(typescript@5.9.3)
 
   packages/api-service:
     devDependencies:
@@ -224,7 +224,7 @@ importers:
         version: link:../typescript-config
       '@umijs/openapi':
         specifier: ^1.14.1
-        version: 1.14.1(chokidar@5.0.0)(typescript@5.9.3)
+        version: 1.14.1(typescript@5.9.3)
 
   packages/eslint-config:
     devDependencies:
@@ -269,7 +269,7 @@ importers:
         version: 4.5.1
       less-loader:
         specifier: ^12.3.0
-        version: 12.3.0(@rspack/core@1.7.3(@swc/helpers@0.5.18))(less@4.5.1)
+        version: 12.3.0(@rspack/core@1.7.3)(less@4.5.1)
     devDependencies:
       '@repo/nodes':
         specifier: workspace:*
@@ -338,13 +338,13 @@ importers:
         version: 4.5.1
       less-loader:
         specifier: ^12.3.0
-        version: 12.3.0(@rspack/core@1.7.3(@swc/helpers@0.5.18))(less@4.5.1)
+        version: 12.3.0(@rspack/core@1.7.3)(less@4.5.1)
       normalize.css:
         specifier: ^8.0.1
         version: 8.0.1
       unocss:
         specifier: ^66.6.0
-        version: 66.6.0(postcss@8.5.6)(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))
+        version: 66.6.0(postcss@8.5.6)(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))
       vue:
         specifier: ^3.5.24
         version: 3.5.27(typescript@5.9.3)
@@ -363,7 +363,7 @@ importers:
         version: 24.10.9
       '@vitejs/plugin-vue':
         specifier: ^6.0.1
-        version: 6.0.3(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))(vue@3.5.27(typescript@5.9.3))
+        version: 6.0.3(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))(vue@3.5.27(typescript@5.9.3))
       '@vue/tsconfig':
         specifier: ^0.8.1
         version: 0.8.1(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))
@@ -372,7 +372,7 @@ importers:
         version: 5.9.3
       vite:
         specifier: npm:rolldown-vite@7.2.5
-        version: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)
+        version: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)
       vue-tsc:
         specifier: ^3.1.4
         version: 3.2.2(typescript@5.9.3)
@@ -999,28 +999,24 @@ packages:
     engines: {node: '>=14.21.3'}
     cpu: [arm64]
     os: [linux]
-    libc: [musl]
 
   '@biomejs/cli-linux-arm64@2.3.11':
     resolution: {integrity: sha512-l4xkGa9E7Uc0/05qU2lMYfN1H+fzzkHgaJoy98wO+b/7Gl78srbCRRgwYSW+BTLixTBrM6Ede5NSBwt7rd/i6g==}
     engines: {node: '>=14.21.3'}
     cpu: [arm64]
     os: [linux]
-    libc: [glibc]
 
   '@biomejs/cli-linux-x64-musl@2.3.11':
     resolution: {integrity: sha512-vU7a8wLs5C9yJ4CB8a44r12aXYb8yYgBn+WeyzbMjaCMklzCv1oXr8x+VEyWodgJt9bDmhiaW/I0RHbn7rsNmw==}
     engines: {node: '>=14.21.3'}
     cpu: [x64]
     os: [linux]
-    libc: [musl]
 
   '@biomejs/cli-linux-x64@2.3.11':
     resolution: {integrity: sha512-/1s9V/H3cSe0r0Mv/Z8JryF5x9ywRxywomqZVLHAoa/uN0eY7F8gEngWKNS5vbbN/BsfpCG5yeBT5ENh50Frxg==}
     engines: {node: '>=14.21.3'}
     cpu: [x64]
     os: [linux]
-    libc: [glibc]
 
   '@biomejs/cli-win32-arm64@2.3.11':
     resolution: {integrity: sha512-PZQ6ElCOnkYapSsysiTy0+fYX+agXPlWugh6+eQ6uPKI3vKAqNp6TnMhoM3oY2NltSB89hz59o8xIfOdyhi9Iw==}
@@ -1960,28 +1956,24 @@ packages:
     engines: {node: ^20.19.0 || >=22.12.0}
     cpu: [arm64]
     os: [linux]
-    libc: [glibc]
 
   '@rolldown/binding-linux-arm64-musl@1.0.0-beta.50':
     resolution: {integrity: sha512-L0zRdH2oDPkmB+wvuTl+dJbXCsx62SkqcEqdM+79LOcB+PxbAxxjzHU14BuZIQdXcAVDzfpMfaHWzZuwhhBTcw==}
     engines: {node: ^20.19.0 || >=22.12.0}
     cpu: [arm64]
     os: [linux]
-    libc: [musl]
 
   '@rolldown/binding-linux-x64-gnu@1.0.0-beta.50':
     resolution: {integrity: sha512-gyoI8o/TGpQd3OzkJnh1M2kxy1Bisg8qJ5Gci0sXm9yLFzEXIFdtc4EAzepxGvrT2ri99ar5rdsmNG0zP0SbIg==}
     engines: {node: ^20.19.0 || >=22.12.0}
     cpu: [x64]
     os: [linux]
-    libc: [glibc]
 
   '@rolldown/binding-linux-x64-musl@1.0.0-beta.50':
     resolution: {integrity: sha512-zti8A7M+xFDpKlghpcCAzyOi+e5nfUl3QhU023ce5NCgUxRG5zGP2GR9LTydQ1rnIPwZUVBWd4o7NjZDaQxaXA==}
     engines: {node: ^20.19.0 || >=22.12.0}
     cpu: [x64]
     os: [linux]
-    libc: [musl]
 
   '@rolldown/binding-openharmony-arm64@1.0.0-beta.50':
     resolution: {integrity: sha512-eZUssog7qljrrRU9Mi0eqYEPm3Ch0UwB+qlWPMKSUXHNqhm3TvDZarJQdTevGEfu3EHAXJvBIe0YFYr0TPVaMA==}
@@ -2047,25 +2039,21 @@ packages:
     resolution: {integrity: sha512-SodEX3+1/GLz0LobX9cY1QdjJ1NftSEh4C2vGpr71iA3MS9HyXuw4giqSeRQ4DpCybqpdS/3RLjVqFQEfGpcnw==}
     cpu: [arm64]
     os: [linux]
-    libc: [glibc]
 
   '@rspack/binding-linux-arm64-musl@1.7.3':
     resolution: {integrity: sha512-ydD2fNdEy+G7EYJ/a3FfdFZPfrLj/UnZocCNlZTTSHEhu+jURdQk0hwV11CvL+sjnKU5e/8IVMGUzhu3Gu8Ghg==}
     cpu: [arm64]
     os: [linux]
-    libc: [musl]
 
   '@rspack/binding-linux-x64-gnu@1.7.3':
     resolution: {integrity: sha512-adnDbUqafSAI6/N6vZ+iONSo1W3yUpnNtJqP3rVp7+YdABhUpbOhtaY37qpIJ3uFajXctYFyISPrb4MWl1M9Yg==}
     cpu: [x64]
     os: [linux]
-    libc: [glibc]
 
   '@rspack/binding-linux-x64-musl@1.7.3':
     resolution: {integrity: sha512-5jnjdODk5HCUFPN6rTaFukynDU4Fn9eCL+4TSp6mqo6YAnfnJEuzDjfetA8t3aQFcAs7WriQfNwvdcA4HvYtbA==}
     cpu: [x64]
     os: [linux]
-    libc: [musl]
 
   '@rspack/binding-wasm32-wasi@1.7.3':
     resolution: {integrity: sha512-WLQK0ksUzMkVeGoHAMIxenmeEU5tMvFDK36Aip7VRj7T6vZTcAwvbMwc38QrIAvlG7dqWoxgPQi35ba1igNNDw==}
@@ -2528,49 +2516,41 @@ packages:
     resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
     cpu: [arm64]
     os: [linux]
-    libc: [glibc]
 
   '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
     resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
     cpu: [arm64]
     os: [linux]
-    libc: [musl]
 
   '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
     resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
     cpu: [ppc64]
     os: [linux]
-    libc: [glibc]
 
   '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
     resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
     cpu: [riscv64]
     os: [linux]
-    libc: [glibc]
 
   '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
     resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
     cpu: [riscv64]
     os: [linux]
-    libc: [musl]
 
   '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
     resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
     cpu: [s390x]
     os: [linux]
-    libc: [glibc]
 
   '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
     resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
     cpu: [x64]
     os: [linux]
-    libc: [glibc]
 
   '@unrs/resolver-binding-linux-x64-musl@1.11.1':
     resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
     cpu: [x64]
     os: [linux]
-    libc: [musl]
 
   '@unrs/resolver-binding-wasm32-wasi@1.11.1':
     resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
@@ -4478,28 +4458,24 @@ packages:
     engines: {node: '>= 12.0.0'}
     cpu: [arm64]
     os: [linux]
-    libc: [glibc]
 
   lightningcss-linux-arm64-musl@1.31.1:
     resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
     engines: {node: '>= 12.0.0'}
     cpu: [arm64]
     os: [linux]
-    libc: [musl]
 
   lightningcss-linux-x64-gnu@1.31.1:
     resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
     engines: {node: '>= 12.0.0'}
     cpu: [x64]
     os: [linux]
-    libc: [glibc]
 
   lightningcss-linux-x64-musl@1.31.1:
     resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
     engines: {node: '>= 12.0.0'}
     cpu: [x64]
     os: [linux]
-    libc: [musl]
 
   lightningcss-win32-arm64-msvc@1.31.1:
     resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
@@ -6415,17 +6391,17 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@babel/eslint-parser@7.19.1(@babel/core@7.28.6)(eslint@8.57.1)':
+  '@babel/eslint-parser@7.19.1(@babel/core@7.28.6)(eslint@9.39.1(jiti@2.6.1))':
     dependencies:
       '@babel/core': 7.28.6
       '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
-      eslint: 8.57.1
+      eslint: 9.39.1(jiti@2.6.1)
       eslint-visitor-keys: 2.1.0
       semver: 6.3.1
 
   '@babel/eslint-plugin@7.27.1(@babel/eslint-parser@7.19.1(@babel/core@7.28.6)(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))':
     dependencies:
-      '@babel/eslint-parser': 7.19.1(@babel/core@7.28.6)(eslint@8.57.1)
+      '@babel/eslint-parser': 7.19.1(@babel/core@7.28.6)(eslint@9.39.1(jiti@2.6.1))
       eslint: 9.39.1(jiti@2.6.1)
       eslint-rule-composer: 0.3.0
 
@@ -8041,13 +8017,13 @@ snapshots:
   '@flowgram.ai/eslint-config@1.0.7(@types/node@18.19.130)(jiti@2.6.1)(typescript@5.9.3)':
     dependencies:
       '@babel/core': 7.28.6
-      '@babel/eslint-parser': 7.19.1(@babel/core@7.28.6)(eslint@8.57.1)
+      '@babel/eslint-parser': 7.19.1(@babel/core@7.28.6)(eslint@9.39.1(jiti@2.6.1))
       '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.19.1(@babel/core@7.28.6)(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))
       '@babel/preset-env': 7.20.2(@babel/core@7.28.6)
       '@babel/preset-react': 7.13.13(@babel/core@7.28.6)
       '@eslint/eslintrc': 3.3.3
       '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
-      '@typescript-eslint/parser': 8.50.0(eslint@8.57.1)(typescript@5.9.3)
+      '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
       eslint: 9.39.1(jiti@2.6.1)
       eslint-config-prettier: 8.10.2(eslint@9.39.1(jiti@2.6.1))
       eslint-define-config: 1.12.0
@@ -9225,7 +9201,7 @@ snapshots:
   '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.2
-      '@typescript-eslint/parser': 8.50.0(eslint@8.57.1)(typescript@5.9.3)
+      '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
       '@typescript-eslint/scope-manager': 8.50.0
       '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
       '@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
@@ -9238,27 +9214,27 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.50.0(eslint@8.57.1)(typescript@5.9.3)':
+  '@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2)':
     dependencies:
       '@typescript-eslint/scope-manager': 8.50.0
       '@typescript-eslint/types': 8.50.0
-      '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
+      '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
       '@typescript-eslint/visitor-keys': 8.50.0
       debug: 4.4.3(supports-color@5.5.0)
-      eslint: 8.57.1
-      typescript: 5.9.3
+      eslint: 9.39.1(jiti@2.6.1)
+      typescript: 5.9.2
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2)':
+  '@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
     dependencies:
       '@typescript-eslint/scope-manager': 8.50.0
       '@typescript-eslint/types': 8.50.0
-      '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
+      '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
       '@typescript-eslint/visitor-keys': 8.50.0
       debug: 4.4.3(supports-color@5.5.0)
       eslint: 9.39.1(jiti@2.6.1)
-      typescript: 5.9.2
+      typescript: 5.9.3
     transitivePeerDependencies:
       - supports-color
 
@@ -9383,7 +9359,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@umijs/openapi@1.14.1(chokidar@5.0.0)(typescript@5.9.3)':
+  '@umijs/openapi@1.14.1(typescript@5.9.3)':
     dependencies:
       chalk: 4.1.2
       cosmiconfig: 9.0.0(typescript@5.9.3)
@@ -9395,7 +9371,7 @@ snapshots:
       mockjs: 1.1.0
       node-fetch: 2.7.0
       number-to-words: 1.2.4
-      nunjucks: 3.2.4(chokidar@5.0.0)
+      nunjucks: 3.2.4
       openapi3-ts: 2.0.2
       prettier: 2.8.8
       reserved-words: 0.1.2
@@ -9409,13 +9385,13 @@ snapshots:
 
   '@ungap/structured-clone@1.3.0': {}
 
-  '@unocss/astro@66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))':
+  '@unocss/astro@66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))':
     dependencies:
       '@unocss/core': 66.6.0
       '@unocss/reset': 66.6.0
-      '@unocss/vite': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))
+      '@unocss/vite': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))
     optionalDependencies:
-      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)
+      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)
 
   '@unocss/cli@66.6.0':
     dependencies:
@@ -9554,7 +9530,7 @@ snapshots:
     dependencies:
       '@unocss/core': 66.6.0
 
-  '@unocss/vite@66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))':
+  '@unocss/vite@66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))':
     dependencies:
       '@jridgewell/remapping': 2.3.5
       '@unocss/config': 66.6.0
@@ -9565,7 +9541,7 @@ snapshots:
       pathe: 2.0.3
       tinyglobby: 0.2.15
       unplugin-utils: 0.3.1
-      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)
+      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)
 
   '@unrs/resolver-binding-android-arm-eabi@1.11.1':
     optional: true
@@ -9626,10 +9602,10 @@ snapshots:
   '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
     optional: true
 
-  '@vitejs/plugin-vue@6.0.3(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))(vue@3.5.27(typescript@5.9.3))':
+  '@vitejs/plugin-vue@6.0.3(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))(vue@3.5.27(typescript@5.9.3))':
     dependencies:
       '@rolldown/pluginutils': 1.0.0-beta.53
-      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)
+      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)
       vue: 3.5.27(typescript@5.9.3)
 
   '@volar/language-core@2.4.27':
@@ -10747,13 +10723,14 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-module-utils@2.12.1(@typescript-eslint/parser@8.50.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1):
+  eslint-module-utils@2.12.1(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)):
     dependencies:
       debug: 3.2.7
     optionalDependencies:
-      '@typescript-eslint/parser': 8.50.0(eslint@8.57.1)(typescript@5.9.3)
-      eslint: 8.57.1
+      '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+      eslint: 9.39.1(jiti@2.6.1)
       eslint-import-resolver-node: 0.3.9
+      eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
     transitivePeerDependencies:
       - supports-color
 
@@ -10773,7 +10750,7 @@ snapshots:
       doctrine: 2.1.0
       eslint: 8.57.1
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.50.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1)
+      eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))
       hasown: 2.0.2
       is-core-module: 2.16.1
       is-glob: 4.0.3
@@ -10785,7 +10762,7 @@ snapshots:
       string.prototype.trimend: 1.0.9
       tsconfig-paths: 3.15.0
     optionalDependencies:
-      '@typescript-eslint/parser': 8.50.0(eslint@8.57.1)(typescript@5.9.3)
+      '@typescript-eslint/parser': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
     transitivePeerDependencies:
       - eslint-import-resolver-typescript
       - eslint-import-resolver-webpack
@@ -11742,7 +11719,7 @@ snapshots:
     dependencies:
       language-subtag-registry: 0.3.23
 
-  less-loader@12.3.0(@rspack/core@1.7.3(@swc/helpers@0.5.18))(less@4.5.1):
+  less-loader@12.3.0(@rspack/core@1.7.3)(less@4.5.1):
     dependencies:
       less: 4.5.1
     optionalDependencies:
@@ -12506,13 +12483,11 @@ snapshots:
 
   number-to-words@1.2.4: {}
 
-  nunjucks@3.2.4(chokidar@5.0.0):
+  nunjucks@3.2.4:
     dependencies:
       a-sync-waterfall: 1.0.1
       asap: 2.0.6
       commander: 5.1.0
-    optionalDependencies:
-      chokidar: 5.0.0
 
   oas-kit-common@1.0.8:
     dependencies:
@@ -13166,7 +13141,7 @@ snapshots:
     dependencies:
       glob: 7.2.3
 
-  rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2):
+  rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1):
     dependencies:
       '@oxc-project/runtime': 0.97.0
       fdir: 6.5.0(picomatch@4.0.3)
@@ -13180,7 +13155,6 @@ snapshots:
       fsevents: 2.3.3
       jiti: 2.6.1
       less: 4.5.1
-      yaml: 1.10.2
 
   rolldown@1.0.0-beta.50:
     dependencies:
@@ -13907,9 +13881,9 @@ snapshots:
 
   universalify@2.0.1: {}
 
-  unocss@66.6.0(postcss@5.2.18)(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)):
+  unocss@66.6.0(postcss@5.2.18)(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)):
     dependencies:
-      '@unocss/astro': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))
+      '@unocss/astro': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))
       '@unocss/cli': 66.6.0
       '@unocss/core': 66.6.0
       '@unocss/postcss': 66.6.0(postcss@5.2.18)
@@ -13927,16 +13901,16 @@ snapshots:
       '@unocss/transformer-compile-class': 66.6.0
       '@unocss/transformer-directives': 66.6.0
       '@unocss/transformer-variant-group': 66.6.0
-      '@unocss/vite': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))
+      '@unocss/vite': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))
     optionalDependencies:
-      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)
+      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)
     transitivePeerDependencies:
       - postcss
       - supports-color
 
-  unocss@66.6.0(postcss@8.5.6)(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)):
+  unocss@66.6.0(postcss@8.5.6)(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)):
     dependencies:
-      '@unocss/astro': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))
+      '@unocss/astro': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))
       '@unocss/cli': 66.6.0
       '@unocss/core': 66.6.0
       '@unocss/postcss': 66.6.0(postcss@8.5.6)
@@ -13954,9 +13928,9 @@ snapshots:
       '@unocss/transformer-compile-class': 66.6.0
       '@unocss/transformer-directives': 66.6.0
       '@unocss/transformer-variant-group': 66.6.0
-      '@unocss/vite': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2))
+      '@unocss/vite': 66.6.0(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1))
     optionalDependencies:
-      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)
+      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)
     transitivePeerDependencies:
       - postcss
       - supports-color
@@ -14078,7 +14052,7 @@ snapshots:
       '@types/unist': 3.0.3
       vfile-message: 4.0.3
 
-  vite-plugin-svg-icons@2.0.1(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)):
+  vite-plugin-svg-icons@2.0.1(rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)):
     dependencies:
       '@types/svgo': 2.6.4
       cors: 2.8.6
@@ -14088,7 +14062,7 @@ snapshots:
       pathe: 0.2.0
       svg-baker: 1.7.0
       svgo: 2.8.0
-      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)(yaml@1.10.2)
+      vite: rolldown-vite@7.2.5(@types/node@24.10.9)(jiti@2.6.1)(less@4.5.1)
     transitivePeerDependencies:
       - supports-color