Pārlūkot izejas kodu

Merge branch 'feature-0123-Ai-workFlow' of https://git.shalu.com/Shalu/shalu-agent-workflow

lj1559651600@163.com 1 nedēļu atpakaļ
vecāks
revīzija
067d4fb4ab

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/shalu-agent-workflow.iml" filepath="$PROJECT_DIR$/.idea/shalu-agent-workflow.iml" />
+    </modules>
+  </component>
+</project>

+ 12 - 0
.idea/shalu-agent-workflow.iml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.tmp" />
+      <excludeFolder url="file://$MODULE_DIR$/temp" />
+      <excludeFolder url="file://$MODULE_DIR$/tmp" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 126 - 0
.idea/workspace.xml

@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="SELECTIVE" />
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="41cd2400-3735-4e1a-9a77-7ea2e4a1c041" name="更改" comment="合并冲突">
+      <change afterPath="$PROJECT_DIR$/apps/web/store/componentsMap.ts" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/apps/web/src/components/setter/HttpSetter.vue" beforeDir="false" afterPath="$PROJECT_DIR$/apps/web/src/components/setter/HttpSetter.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/apps/web/src/components/setter/index.vue" beforeDir="false" afterPath="$PROJECT_DIR$/apps/web/src/components/setter/index.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pnpm-lock.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/pnpm-lock.yaml" afterDir="false" />
+    </list>
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="Git.Merge.Settings">
+    <option name="BRANCH" value="feature-0123-Ai-workFlow" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_BRANCH_BY_REPOSITORY">
+      <map>
+        <entry key="$PROJECT_DIR$" value="main" />
+      </map>
+    </option>
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="ProjectColorInfo">{
+  &quot;associatedIndex&quot;: 7
+}</component>
+  <component name="ProjectId" id="38m4mc5E2lcGRA9UjefZP9wo9yp" />
+  <component name="ProjectViewState">
+    <option name="hideEmptyMiddlePackages" value="true" />
+    <option name="showLibraryContents" value="true" />
+  </component>
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "git-widget-placeholder": "feature-0123-Ai-workFlow",
+    "last_opened_file_path": "/Users/liujie/Desktop/shalu/shalu-agent-workflow",
+    "node.js.detected.package.eslint": "true",
+    "node.js.detected.package.tslint": "true",
+    "node.js.selected.package.eslint": "(autodetect)",
+    "node.js.selected.package.tslint": "(autodetect)",
+    "nodejs_package_manager_path": "pnpm",
+    "settings.editor.selected.configurable": "preferences.keymap",
+    "ts.external.directory.path": "/Users/liujie/Desktop/shalu/shalu-agent-workflow/node_modules/typescript/lib",
+    "vue.rearranger.settings.migration": "true"
+  }
+}]]></component>
+  <component name="SharedIndexes">
+    <attachedChunks>
+      <set>
+        <option value="bundled-js-predefined-d6986cc7102b-5c90d61e3bab-JavaScript-WS-242.23726.96" />
+      </set>
+    </attachedChunks>
+  </component>
+  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
+  <component name="SvnConfiguration">
+    <configuration>$USER_HOME$/.subversion</configuration>
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="默认任务">
+      <changelist id="41cd2400-3735-4e1a-9a77-7ea2e4a1c041" name="更改" comment="" />
+      <created>1769391572649</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1769391572649</updated>
+      <workItem from="1769391573741" duration="223000" />
+      <workItem from="1769391800519" duration="10090000" />
+    </task>
+    <task id="LOCAL-00001" summary="合并冲突">
+      <option name="closed" value="true" />
+      <created>1769392417458</created>
+      <option name="number" value="00001" />
+      <option name="presentableId" value="LOCAL-00001" />
+      <option name="project" value="LOCAL" />
+      <updated>1769392417458</updated>
+    </task>
+    <task id="LOCAL-00002" summary="合并冲突">
+      <option name="closed" value="true" />
+      <created>1769392717747</created>
+      <option name="number" value="00002" />
+      <option name="presentableId" value="LOCAL-00002" />
+      <option name="project" value="LOCAL" />
+      <updated>1769392717747</updated>
+    </task>
+    <task id="LOCAL-00003" summary="合并冲突">
+      <option name="closed" value="true" />
+      <created>1769392895672</created>
+      <option name="number" value="00003" />
+      <option name="presentableId" value="LOCAL-00003" />
+      <option name="project" value="LOCAL" />
+      <updated>1769392895672</updated>
+    </task>
+    <task id="LOCAL-00004" summary="合并冲突">
+      <option name="closed" value="true" />
+      <created>1769393225277</created>
+      <option name="number" value="00004" />
+      <option name="presentableId" value="LOCAL-00004" />
+      <option name="project" value="LOCAL" />
+      <updated>1769393225277</updated>
+    </task>
+    <option name="localTasksCounter" value="5" />
+    <servers />
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="3" />
+  </component>
+  <component name="Vcs.Log.Tabs.Properties">
+    <option name="TAB_STATES">
+      <map>
+        <entry key="MAIN">
+          <value>
+            <State />
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+  <component name="VcsManagerConfiguration">
+    <MESSAGE value="合并冲突" />
+    <option name="LAST_COMMIT_MESSAGE" value="合并冲突" />
+  </component>
+</project>

+ 1 - 0
apps/web/package.json

@@ -13,6 +13,7 @@
     "@element-plus/icons-vue": "^2.3.2",
     "element-plus": "^2.13.1",
     "normalize.css": "^8.0.1",
+    "pinia": "^3.0.4",
     "vue": "^3.5.24",
     "vue-router": "4"
   },

+ 2 - 16
apps/web/src/components/setter/HttpSetter.vue

@@ -21,26 +21,12 @@ const props = withDefaults(
 const emit = defineEmits<{
     'update:visible': [value: boolean]
 }>()
+
 </script>
 <template>
     <div class='content'>
-        <ElDrawer :model-value="visible" :show-close="false" size="25%" @close="emit('update:visible', false)">
-
-            <template #header>
-                <h4>HTTP请求</h4>
-                <Icon icon="lucide:x" height="24" width="24"></Icon>
-            </template>
-
-            <!-- Drawer content -->
-            This is drawer content.
 
-            <!-- <template #footer>
-                <ElButton type="success" size="large" class="w-full" @click="emit('update:visible', false)">
-                    运行
-                </ElButton>
-            </template> -->
 
-        </ElDrawer>
     </div>
 </template>
-<style lang="scss" scoped></style>
+<style lang="scss" scoped></style>

+ 67 - 2
apps/web/src/components/setter/index.vue

@@ -2,26 +2,91 @@
  * @Author: liuJie
  * @Date: 2026-01-25 22:13:06
  * @LastEditors: liuJie
- * @LastEditTime: 2026-01-25 22:26:30
+ * @LastEditTime: 2026-01-27 10:01:23
  * @Describe: file describe
 -->
 <script lang="ts" setup>
 import HttpSetter from './HttpSetter.vue';
+import { Icon } from "@iconify/vue";
+import { useComponentMapInspector } from "@/store"
+
+const store = useComponentMapInspector()
+
+console.log(store.componentMap['http'])
+
 interface Props {
     data: any, // 暂时定义
     visible: boolean
 }
 const props = withDefaults(defineProps<Props>(), {
     id: '',
+    data: null,
     visible: false
 })
 const emit = defineEmits<{
     'update:visible': [value: boolean]
 }>()
+const closeDrawer = () => {
+    emit('update:visible', false)
+}
 </script>
 <template>
     <div class='setter'>
+        <div class="drawer shadow-2xl" :class="{ 'drawer--open': props.visible }">
+            <header>
+                <h4>HTTP请求</h4>
+                <Icon icon="lucide:x" height="24" width="24" @click="closeDrawer" class="cursor-pointer"></Icon>
+            </header>
+            <div class="content">
+                <component :is="'http-node'" :data="props.data"></component>
+            </div>
+        </div>
+
         <HttpSetter :data="data" v-model:visible="props.visible" />
     </div>
 </template>
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.setter {
+
+    /* Drawer 主体 */
+    .drawer {
+        position: fixed;
+        top: 100px;
+        right: 5px;
+        bottom: 10px;
+        width: 420px;
+        background: #fff;
+        z-index: 1000;
+        border-radius: 8px;
+        display: flex;
+        flex-direction: column;
+        border: 1px solid #e4e4e4;
+
+        /* 初始隐藏状态 */
+        transform: translateX(100%);
+        transition: transform 0.25s ease;
+    }
+
+    /* 显示状态 */
+    .drawer--open {
+        transform: translateX(0);
+    }
+
+    /* Header */
+    .drawer header {
+        height: 56px;
+        padding: 0 16px;
+        border-bottom: 1px solid #eee;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+    }
+
+    /* 内容区 */
+    .drawer .content {
+        flex: 1;
+        padding: 16px;
+        overflow-y: auto;
+    }
+}
+</style>

+ 3 - 1
apps/web/src/main.ts

@@ -1,6 +1,7 @@
 import { createApp } from 'vue'
 import './style.css'
 import App from './App.vue'
+import store from './store'
 import router from './router'
 import ElementPlus from 'element-plus'
 import 'element-plus/dist/index.css'
@@ -9,11 +10,12 @@ import 'virtual:svg-icons-register'
 import 'normalize.css'
 import 'virtual:uno.css'
 
+
 // Set Element Plus theme colors
 const app = createApp(App)
+app.use(store)
 app.use(router)
 app.use(ElementPlus)
-
 const root = document.documentElement
 const primaryColor = '#ff6b6b'
 

+ 21 - 0
apps/web/src/store/index.ts

@@ -0,0 +1,21 @@
+/*
+ * @Author: liuJie
+ * @Date: 2026-01-26 21:52:39
+ * @LastEditors: liuJie
+ * @LastEditTime: 2026-01-27 10:10:22
+ * @Describe: file describe
+ */
+import type { App } from "vue";
+import { createPinia } from "pinia";
+import useComponentMapInspector from "@/store/modules/materialSetterMaps.store"
+import useConditionOptionsStore from "@/store/modules/conditionNode.store"
+import useHttpOptionsStore from "@/store/modules/httpNode.store"
+
+const pinia = createPinia();
+
+const store = (app: App<Element>) => {
+    app.use(pinia);
+}
+export { useComponentMapInspector, useConditionOptionsStore, useHttpOptionsStore };
+
+export default store;

+ 25 - 0
apps/web/src/store/modules/conditionNode.store.ts

@@ -0,0 +1,25 @@
+/*
+ * @Author: liuJie
+ * @Date: 2026-01-27 10:05:01
+ * @LastEditors: liuJie
+ * @LastEditTime: 2026-01-27 10:09:54
+ * @Describe: 往对应节点里存储选项信息
+ */
+
+import { defineStore } from "pinia";
+
+export const useConditionOptionsStore = defineStore('conditionOptions', {
+    state: () => ({
+        currentNodeOptions: null as null | Record<string, any>,
+    }),
+    actions: {
+        setCurrentNodeOptions(options: Record<string, any>) {
+            this.currentNodeOptions = options;
+        },
+        clearCurrentNodeOptions() {
+            this.currentNodeOptions = null;
+        }
+    },
+})
+
+export default useConditionOptionsStore;

+ 25 - 0
apps/web/src/store/modules/httpNode.store.ts

@@ -0,0 +1,25 @@
+/*
+ * @Author: liuJie
+ * @Date: 2026-01-27 10:08:16
+ * @LastEditors: liuJie
+ * @LastEditTime: 2026-01-27 10:10:16
+ * @Describe: file describe
+ */
+
+import { defineStore } from "pinia";
+
+export const useHttpOptionsStore = defineStore('httpOptions', {
+    state: () => ({
+        currentNodeOptions: null as null | Record<string, any>,
+    }),
+    actions: {
+        setCurrentNodeOptions(options: Record<string, any>) {
+            this.currentNodeOptions = options;
+        },
+        clearCurrentNodeOptions() {
+            this.currentNodeOptions = null;
+        }
+    },
+})
+
+export default useHttpOptionsStore;

+ 38 - 0
apps/web/src/store/modules/materialSetterMaps.store.ts

@@ -0,0 +1,38 @@
+/*
+ * @Author: liuJie
+ * @Date: 2026-01-26 17:22:54
+ * @LastEditors: liuJie
+ * @LastEditTime: 2026-01-27 10:06:32
+ * @Describe: 异步组件映射
+ */
+import {defineAsyncComponent, shallowRef} from "vue";
+import { defineStore } from "pinia";
+
+const useComponentMapInspector = defineStore('componentMapInspector', {
+    state: () => ({
+        componentMap: {
+            http: shallowRef(
+                defineAsyncComponent({
+                    loader:()=>import('@/components/setter/HttpSetter.vue'),
+                    // errorComponent:  错误组件
+                })),
+            condition: shallowRef(
+                defineAsyncComponent({
+                    loader:()=>import('@/components/setter/ConditionSetter.vue'),
+                    // errorComponent:  错误组件
+                })),
+            database: shallowRef(
+                defineAsyncComponent({
+                    loader:()=>import('@/components/setter/DatabaseSetter.vue'),
+                    // errorComponent:  错误组件
+                })),
+            code: shallowRef(
+                defineAsyncComponent({
+                    loader:()=>import('@/components/setter/CodeSetter.vue'),
+                    // errorComponent:  错误组件
+                }))
+        },
+    }),
+})
+
+export default useComponentMapInspector

+ 70 - 35
pnpm-lock.yaml

@@ -148,6 +148,9 @@ importers:
       normalize.css:
         specifier: ^8.0.1
         version: 8.0.1
+      pinia:
+        specifier: ^3.0.4
+        version: 3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))
       vue:
         specifier: ^3.5.24
         version: 3.5.27(typescript@5.9.3)
@@ -2652,6 +2655,15 @@ packages:
   '@vue/devtools-api@6.6.4':
     resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
 
+  '@vue/devtools-api@7.7.9':
+    resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
+
+  '@vue/devtools-kit@7.7.9':
+    resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
+
+  '@vue/devtools-shared@7.7.9':
+    resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
+
   '@vue/language-core@3.2.2':
     resolution: {integrity: sha512-5DAuhxsxBN9kbriklh3Q5AMaJhyOCNiQJvCskN9/30XOpdLiqZU9Q+WvjArP17ubdGEyZtBzlIeG5nIjEbNOrQ==}
 
@@ -2889,6 +2901,9 @@ packages:
   bignumber.js@9.3.1:
     resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==}
 
+  birpc@2.9.0:
+    resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
+
   bluebird@3.7.2:
     resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
 
@@ -3078,10 +3093,6 @@ packages:
   copy-anything@2.0.6:
     resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
 
-  copy-descriptor@0.1.1:
-    resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
-    engines: {node: '>=0.10.0'}
-
   copy-text-to-clipboard@2.2.0:
     resolution: {integrity: sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==}
     engines: {node: '>=6'}
@@ -4003,6 +4014,9 @@ packages:
   hoist-non-react-statics@3.3.2:
     resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
 
+  hookable@5.5.3:
+    resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
   html-entities@2.6.0:
     resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
 
@@ -4240,13 +4254,6 @@ packages:
   is-what@3.14.1:
     resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
 
-  is-windows@1.0.2:
-    resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
-    engines: {node: '>=0.10.0'}
-
-  isarray@1.0.0:
-    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-
   isarray@2.0.5:
     resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
 
@@ -5097,6 +5104,9 @@ packages:
   pathe@2.0.3:
     resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
 
+  perfect-debounce@1.0.0:
+    resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+
   perfect-debounce@2.1.0:
     resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==}
 
@@ -5115,6 +5125,15 @@ packages:
     resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
     engines: {node: '>=6'}
 
+  pinia@3.0.4:
+    resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==}
+    peerDependencies:
+      typescript: '>=4.5.0'
+      vue: ^3.5.11
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
   pkg-types@1.3.1:
     resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
 
@@ -5456,6 +5475,9 @@ packages:
     resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
     engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
 
+  rfdc@1.4.1:
+    resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
   rimraf@3.0.2:
     resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
     deprecated: Rimraf versions prior to v4 are no longer supported
@@ -5680,10 +5702,6 @@ packages:
   space-separated-tokens@2.0.2:
     resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
 
-  split-string@3.1.0:
-    resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
-    engines: {node: '>=0.10.0'}
-
   stable-hash@0.0.5:
     resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
 
@@ -5775,14 +5793,6 @@ packages:
       react-dom: '>= 16.8.0'
       react-is: '>= 16.8.0'
 
-  supports-color@2.0.0:
-    resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
-    engines: {node: '>=0.8.0'}
-
-  supports-color@3.2.3:
-    resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==}
-    engines: {node: '>=0.8.0'}
-
   supports-color@5.5.0:
     resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
     engines: {node: '>=4'}
@@ -9659,6 +9669,24 @@ snapshots:
 
   '@vue/devtools-api@6.6.4': {}
 
+  '@vue/devtools-api@7.7.9':
+    dependencies:
+      '@vue/devtools-kit': 7.7.9
+
+  '@vue/devtools-kit@7.7.9':
+    dependencies:
+      '@vue/devtools-shared': 7.7.9
+      birpc: 2.9.0
+      hookable: 5.5.3
+      mitt: 3.0.1
+      perfect-debounce: 1.0.0
+      speakingurl: 14.0.1
+      superjson: 2.2.6
+
+  '@vue/devtools-shared@7.7.9':
+    dependencies:
+      rfdc: 1.4.1
+
   '@vue/language-core@3.2.2':
     dependencies:
       '@volar/language-core': 2.4.27
@@ -9950,10 +9978,6 @@ snapshots:
 
   bignumber.js@9.3.1: {}
 
-  bluebird@3.7.2: {}
-
-  boolbase@1.0.0: {}
-
   brace-expansion@1.1.12:
     dependencies:
       balanced-match: 1.0.2
@@ -10138,8 +10162,6 @@ snapshots:
     dependencies:
       is-what: 3.14.1
 
-  copy-descriptor@0.1.1: {}
-
   copy-text-to-clipboard@2.2.0: {}
 
   core-js-compat@3.48.0:
@@ -11307,6 +11329,8 @@ snapshots:
     dependencies:
       react-is: 16.13.1
 
+  hookable@5.5.3: {}
+
   html-entities@2.6.0: {}
 
   html-void-elements@3.0.0: {}
@@ -11539,6 +11563,8 @@ snapshots:
 
   is-what@3.14.1: {}
 
+  is-what@5.5.0: {}
+
   is-windows@1.0.2: {}
 
   isarray@1.0.0: {}
@@ -12626,6 +12652,8 @@ snapshots:
 
   pathe@2.0.3: {}
 
+  perfect-debounce@1.0.0: {}
+
   perfect-debounce@2.1.0: {}
 
   picocolors@1.1.1: {}
@@ -12637,6 +12665,13 @@ snapshots:
   pify@4.0.1:
     optional: true
 
+  pinia@3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)):
+    dependencies:
+      '@vue/devtools-api': 7.7.9
+      vue: 3.5.27(typescript@5.9.3)
+    optionalDependencies:
+      typescript: 5.9.3
+
   pkg-types@1.3.1:
     dependencies:
       confbox: 0.1.8
@@ -13064,6 +13099,8 @@ snapshots:
 
   reusify@1.1.0: {}
 
+  rfdc@1.4.1: {}
+
   rimraf@3.0.2:
     dependencies:
       glob: 7.2.3
@@ -13327,6 +13364,10 @@ snapshots:
 
   space-separated-tokens@2.0.2: {}
 
+  speakingurl@14.0.1: {}
+
+  speakingurl@14.0.1: {}
+
   split-string@3.1.0:
     dependencies:
       extend-shallow: 3.0.2
@@ -13458,12 +13499,6 @@ snapshots:
     transitivePeerDependencies:
       - '@babel/core'
 
-  supports-color@2.0.0: {}
-
-  supports-color@3.2.3:
-    dependencies:
-      has-flag: 1.0.0
-
   supports-color@5.5.0:
     dependencies:
       has-flag: 3.0.0