flex-mcp 1.1.10 → 1.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQ5B,eAAO,MAAM,SAAS,4EAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,eAAO,MAAM,SAAS,4EAAa,CAAC"}
package/dist/api/index.js CHANGED
@@ -8,6 +8,7 @@ import { authRouter } from './auth.js';
8
8
  import { mcpRouter } from './mcp.js';
9
9
  import { tablesRouter } from './tables.js';
10
10
  import { promptsRouter } from './prompts.js';
11
+ import { updateRouter } from './update.js';
11
12
  export const apiRouter = new Hono();
12
13
  // 认证路由
13
14
  apiRouter.route('/auth', authRouter);
@@ -21,4 +22,6 @@ apiRouter.route('/mcp', mcpRouter);
21
22
  apiRouter.route('/tables', tablesRouter);
22
23
  // 提示词管理路由(需要认证)
23
24
  apiRouter.route('/prompts', promptsRouter);
25
+ // 更新管理路由(需要管理员认证)
26
+ apiRouter.route('/update', updateRouter);
24
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;AAEpC,OAAO;AACP,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAErC,eAAe;AACf,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEtC,eAAe;AACf,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAE1C,iBAAiB;AACjB,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnC,cAAc;AACd,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEzC,gBAAgB;AAChB,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;AAEpC,OAAO;AACP,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAErC,eAAe;AACf,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEtC,eAAe;AACf,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAE1C,iBAAiB;AACjB,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnC,cAAc;AACd,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEzC,gBAAgB;AAChB,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAE3C,kBAAkB;AAClB,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 更新管理 API 路由
3
+ */
4
+ import { Hono } from 'hono';
5
+ export declare const updateRouter: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
6
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/api/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAgD5B,eAAO,MAAM,YAAY,4EAAa,CAAC"}
@@ -0,0 +1,269 @@
1
+ /**
2
+ * 更新管理 API 路由
3
+ */
4
+ import { Hono } from 'hono';
5
+ import { authMiddleware, requireAdmin } from './middleware.js';
6
+ import { restartDaemon } from '../daemon.js';
7
+ import pkgUpdateNotifier from 'update-notifier';
8
+ const updateNotifier = pkgUpdateNotifier.default || pkgUpdateNotifier;
9
+ import * as path from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import * as fs from 'fs';
12
+ import { execSync } from 'child_process';
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+ // 读取 package.json(优先读取 server 包的 package.json,因为这是实际发布的包)
16
+ let pkg;
17
+ let packageJsonPath;
18
+ try {
19
+ // 先尝试读取 server 包的 package.json(编译后在 dist 目录,需要向上两级)
20
+ packageJsonPath = path.join(__dirname, '..', '..', 'package.json');
21
+ if (fs.existsSync(packageJsonPath)) {
22
+ pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
23
+ }
24
+ else {
25
+ // 如果不存在,尝试读取项目根目录的 package.json
26
+ const rootPath = path.join(__dirname, '..', '..', '..', 'package.json');
27
+ if (fs.existsSync(rootPath)) {
28
+ packageJsonPath = rootPath;
29
+ pkg = JSON.parse(fs.readFileSync(rootPath, 'utf-8'));
30
+ }
31
+ else {
32
+ // 最后尝试当前工作目录
33
+ const cwdPath = path.join(process.cwd(), 'package.json');
34
+ if (fs.existsSync(cwdPath)) {
35
+ packageJsonPath = cwdPath;
36
+ pkg = JSON.parse(fs.readFileSync(cwdPath, 'utf-8'));
37
+ }
38
+ else {
39
+ throw new Error(`无法找到 package.json,尝试的路径: ${packageJsonPath}, ${rootPath}, ${cwdPath}`);
40
+ }
41
+ }
42
+ }
43
+ // 验证包信息
44
+ if (!pkg.name || !pkg.version) {
45
+ throw new Error(`package.json 缺少必要字段: name=${pkg.name}, version=${pkg.version}`);
46
+ }
47
+ }
48
+ catch (error) {
49
+ throw new Error(`无法读取 package.json: ${error.message}`);
50
+ }
51
+ export const updateRouter = new Hono();
52
+ /**
53
+ * 获取当前版本(只需要认证,不需要管理员权限)
54
+ */
55
+ updateRouter.get('/version', authMiddleware, async (c) => {
56
+ try {
57
+ return c.json({
58
+ success: true,
59
+ version: pkg.version,
60
+ name: pkg.name,
61
+ });
62
+ }
63
+ catch (error) {
64
+ return c.json({
65
+ success: false,
66
+ error: error.message || '获取版本失败',
67
+ }, 500);
68
+ }
69
+ });
70
+ // 其他更新路由需要管理员权限
71
+ updateRouter.use('/check', authMiddleware);
72
+ updateRouter.use('/check', requireAdmin());
73
+ updateRouter.use('/execute', authMiddleware);
74
+ updateRouter.use('/execute', requireAdmin());
75
+ /**
76
+ * 检查更新
77
+ */
78
+ updateRouter.get('/check', async (c) => {
79
+ try {
80
+ const notifier = updateNotifier({
81
+ pkg,
82
+ updateCheckInterval: 0, // 强制检查
83
+ });
84
+ // update-notifier v7+ 需要等待检查完成
85
+ // 检查更新是异步的,需要等待完成
86
+ // 尝试多种方法等待检查完成
87
+ if (typeof notifier.check === 'function') {
88
+ await notifier.check();
89
+ }
90
+ else if (typeof notifier.fetchInfo === 'function') {
91
+ await notifier.fetchInfo();
92
+ }
93
+ else {
94
+ // 轮询检查 update 属性,最多等待 5 秒
95
+ const maxWait = 5000;
96
+ const interval = 100;
97
+ let waited = 0;
98
+ while (waited < maxWait && !notifier.update) {
99
+ await new Promise(resolve => setTimeout(resolve, interval));
100
+ waited += interval;
101
+ }
102
+ }
103
+ if (notifier.update) {
104
+ const { current, latest, type } = notifier.update;
105
+ return c.json({
106
+ success: true,
107
+ hasUpdate: true,
108
+ currentVersion: current,
109
+ latestVersion: latest,
110
+ updateType: type,
111
+ });
112
+ }
113
+ else {
114
+ return c.json({
115
+ success: true,
116
+ hasUpdate: false,
117
+ currentVersion: pkg.version,
118
+ latestVersion: pkg.version,
119
+ });
120
+ }
121
+ }
122
+ catch (error) {
123
+ return c.json({
124
+ success: false,
125
+ error: error.message || '检查更新失败',
126
+ }, 500);
127
+ }
128
+ });
129
+ /**
130
+ * 执行更新并重启
131
+ */
132
+ updateRouter.post('/execute', async (c) => {
133
+ try {
134
+ // 检查是否有更新
135
+ const notifier = updateNotifier({
136
+ pkg,
137
+ updateCheckInterval: 0,
138
+ });
139
+ // update-notifier v7+ 需要等待检查完成
140
+ // 检查更新是异步的,需要等待完成
141
+ // 尝试多种方法等待检查完成
142
+ if (typeof notifier.check === 'function') {
143
+ await notifier.check();
144
+ }
145
+ else if (typeof notifier.fetchInfo === 'function') {
146
+ await notifier.fetchInfo();
147
+ }
148
+ else {
149
+ // 轮询检查 update 属性,最多等待 5 秒
150
+ const maxWait = 5000;
151
+ const interval = 100;
152
+ let waited = 0;
153
+ while (waited < maxWait && !notifier.update) {
154
+ await new Promise(resolve => setTimeout(resolve, interval));
155
+ waited += interval;
156
+ }
157
+ }
158
+ if (!notifier.update) {
159
+ return c.json({
160
+ success: false,
161
+ error: '没有可用的更新',
162
+ }, 400);
163
+ }
164
+ const { latest } = notifier.update;
165
+ // 执行更新
166
+ // 注意:这里需要根据安装方式选择更新命令
167
+ // 由于是在运行时更新,我们需要使用 npm/pnpm 来更新
168
+ const isGlobal = await isGloballyInstalled();
169
+ if (isGlobal) {
170
+ // 全局安装:使用 npm install -g
171
+ execSync(`npm install -g ${pkg.name}@latest`, {
172
+ stdio: 'pipe', // 改为 pipe,避免在 API 响应中输出
173
+ encoding: 'utf-8',
174
+ });
175
+ }
176
+ else {
177
+ // 本地安装:尝试使用 pnpm 或 npm
178
+ const projectRoot = path.dirname(packageJsonPath);
179
+ let updateSuccess = false;
180
+ // 先尝试使用 pnpm(如果项目使用 pnpm)
181
+ try {
182
+ execSync(`pnpm update ${pkg.name}@latest`, {
183
+ stdio: 'pipe',
184
+ encoding: 'utf-8',
185
+ cwd: projectRoot,
186
+ });
187
+ updateSuccess = true;
188
+ }
189
+ catch (pnpmError) {
190
+ // pnpm 失败,尝试 npm
191
+ try {
192
+ execSync(`npm install ${pkg.name}@latest`, {
193
+ stdio: 'pipe',
194
+ encoding: 'utf-8',
195
+ cwd: projectRoot,
196
+ });
197
+ updateSuccess = true;
198
+ }
199
+ catch (npmError) {
200
+ // 如果都失败,抛出错误
201
+ throw new Error(`更新失败: pnpm 和 npm 都失败了`);
202
+ }
203
+ }
204
+ }
205
+ // 更新完成后,重启守护进程(如果正在运行)
206
+ try {
207
+ await restartDaemon();
208
+ }
209
+ catch (error) {
210
+ // 如果重启失败,返回警告但不失败
211
+ console.warn('重启守护进程失败:', error.message);
212
+ return c.json({
213
+ success: true,
214
+ message: '更新成功,但重启失败,请手动重启服务',
215
+ latestVersion: latest,
216
+ restartFailed: true,
217
+ });
218
+ }
219
+ return c.json({
220
+ success: true,
221
+ message: '更新成功并已重启服务',
222
+ latestVersion: latest,
223
+ });
224
+ }
225
+ catch (error) {
226
+ return c.json({
227
+ success: false,
228
+ error: error.message || '更新失败',
229
+ }, 500);
230
+ }
231
+ });
232
+ /**
233
+ * 检查包是否全局安装
234
+ */
235
+ async function isGloballyInstalled() {
236
+ try {
237
+ const currentPath = process.argv[1] || __filename;
238
+ const globalPaths = [
239
+ '/usr/local/bin',
240
+ '/usr/bin',
241
+ process.env.HOME + '/.npm-global/bin',
242
+ process.env.APPDATA + '/npm',
243
+ process.env.PROGRAMFILES + '/nodejs',
244
+ ];
245
+ for (const globalPath of globalPaths) {
246
+ if (globalPath && currentPath.includes(globalPath)) {
247
+ return true;
248
+ }
249
+ }
250
+ try {
251
+ const npmGlobalPrefix = execSync('npm config get prefix', {
252
+ encoding: 'utf-8',
253
+ stdio: 'pipe',
254
+ }).trim();
255
+ if (currentPath.includes(npmGlobalPrefix)) {
256
+ return true;
257
+ }
258
+ }
259
+ catch (error) {
260
+ // 忽略错误
261
+ }
262
+ return false;
263
+ }
264
+ catch (error) {
265
+ // 默认假设是全局安装
266
+ return true;
267
+ }
268
+ }
269
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/api/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,iBAAiB,MAAM,iBAAiB,CAAC;AAChD,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,IAAI,iBAAiB,CAAC;AACtE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,0DAA0D;AAC1D,IAAI,GAAsC,CAAC;AAC3C,IAAI,eAAuB,CAAC;AAE5B,IAAI,CAAC;IACH,oDAAoD;IACpD,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACxE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,eAAe,GAAG,QAAQ,CAAC;YAC3B,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,aAAa;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;YACzD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,eAAe,GAAG,OAAO,CAAC;gBAC1B,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,4BAA4B,eAAe,KAAK,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;IACR,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAAC,OAAO,KAAU,EAAE,CAAC;IACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;AAEvC;;GAEG;AACH,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ;SACjC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,gBAAgB;AAChB,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAC3C,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;AAC3C,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC7C,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AAE7C;;GAEG;AACH,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,GAAG;YACH,mBAAmB,EAAE,CAAC,EAAE,OAAO;SAChC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,kBAAkB;QAClB,eAAe;QACf,IAAI,OAAQ,QAAgB,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAClD,MAAO,QAAgB,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;aAAM,IAAI,OAAQ,QAAgB,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7D,MAAO,QAAgB,CAAC,SAAS,EAAE,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC5D,MAAM,IAAI,QAAQ,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAClD,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,OAAO;gBACvB,aAAa,EAAE,MAAM;gBACrB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,KAAK;gBAChB,cAAc,EAAE,GAAG,CAAC,OAAO;gBAC3B,aAAa,EAAE,GAAG,CAAC,OAAO;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ;SACjC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACxC,IAAI,CAAC;QACH,UAAU;QACV,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,GAAG;YACH,mBAAmB,EAAE,CAAC;SACvB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,kBAAkB;QAClB,eAAe;QACf,IAAI,OAAQ,QAAgB,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAClD,MAAO,QAAgB,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;aAAM,IAAI,OAAQ,QAAgB,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7D,MAAO,QAAgB,CAAC,SAAS,EAAE,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC5D,MAAM,IAAI,QAAQ,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,SAAS;aACjB,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;QAEnC,OAAO;QACP,sBAAsB;QACtB,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAE7C,IAAI,QAAQ,EAAE,CAAC;YACb,yBAAyB;YACzB,QAAQ,CAAC,kBAAkB,GAAG,CAAC,IAAI,SAAS,EAAE;gBAC5C,KAAK,EAAE,MAAM,EAAE,wBAAwB;gBACvC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAClD,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,0BAA0B;YAC1B,IAAI,CAAC;gBACH,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,SAAS,EAAE;oBACzC,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,OAAO;oBACjB,GAAG,EAAE,WAAW;iBACjB,CAAC,CAAC;gBACH,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,iBAAiB;gBACjB,IAAI,CAAC;oBACH,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,SAAS,EAAE;wBACzC,KAAK,EAAE,MAAM;wBACb,QAAQ,EAAE,OAAO;wBACjB,GAAG,EAAE,WAAW;qBACjB,CAAC,CAAC;oBACH,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;gBAAC,OAAO,QAAQ,EAAE,CAAC;oBAClB,aAAa;oBACb,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,kBAAkB;YAClB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,oBAAoB;gBAC7B,aAAa,EAAE,MAAM;gBACrB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,YAAY;YACrB,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM;SAC/B,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,KAAK,UAAU,mBAAmB;IAChC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;QAElD,MAAM,WAAW,GAAG;YAClB,gBAAgB;YAChB,UAAU;YACV,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,kBAAkB;YACrC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM;YAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS;SACrC,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,UAAU,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,QAAQ,CAAC,uBAAuB,EAAE;gBACxD,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC,IAAI,EAAE,CAAC;YAEV,IAAI,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAiBlC;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAmEhD"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAwCA;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAiBlC;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqFhD"}
package/dist/update.js CHANGED
@@ -11,21 +11,31 @@ import { getPidFile } from './daemon.js';
11
11
  const __filename = fileURLToPath(import.meta.url);
12
12
  const __dirname = path.dirname(__filename);
13
13
  // 读取 package.json
14
+ // 注意:__dirname 在编译后是 dist 目录,所以需要向上两级到达 packages/server
14
15
  const packageJsonPath = path.join(__dirname, '..', 'package.json');
15
16
  let pkg;
16
17
  try {
17
- pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
18
- }
19
- catch (error) {
20
- // 如果读取失败,尝试从当前目录读取
21
- const altPath = path.join(process.cwd(), 'package.json');
22
- if (fs.existsSync(altPath)) {
23
- pkg = JSON.parse(fs.readFileSync(altPath, 'utf-8'));
18
+ if (fs.existsSync(packageJsonPath)) {
19
+ pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
24
20
  }
25
21
  else {
26
- throw new Error('无法读取 package.json');
22
+ // 如果读取失败,尝试从当前目录读取
23
+ const altPath = path.join(process.cwd(), 'package.json');
24
+ if (fs.existsSync(altPath)) {
25
+ pkg = JSON.parse(fs.readFileSync(altPath, 'utf-8'));
26
+ }
27
+ else {
28
+ throw new Error(`无法读取 package.json,尝试的路径: ${packageJsonPath}, ${altPath}`);
29
+ }
30
+ }
31
+ // 验证包信息
32
+ if (!pkg.name || !pkg.version) {
33
+ throw new Error(`package.json 缺少必要字段: name=${pkg.name}, version=${pkg.version}`);
27
34
  }
28
35
  }
36
+ catch (error) {
37
+ throw new Error(`读取 package.json 失败: ${error.message}`);
38
+ }
29
39
  /**
30
40
  * 检查更新并提示用户
31
41
  */
@@ -57,6 +67,25 @@ export async function selfUpdate() {
57
67
  pkg,
58
68
  updateCheckInterval: 0, // 强制检查
59
69
  });
70
+ // update-notifier v7+ 需要等待检查完成
71
+ // 检查更新是异步的,需要等待完成
72
+ // 尝试多种方法等待检查完成
73
+ if (typeof notifier.check === 'function') {
74
+ await notifier.check();
75
+ }
76
+ else if (typeof notifier.fetchInfo === 'function') {
77
+ await notifier.fetchInfo();
78
+ }
79
+ else {
80
+ // 轮询检查 update 属性,最多等待 5 秒
81
+ const maxWait = 5000;
82
+ const interval = 100;
83
+ let waited = 0;
84
+ while (waited < maxWait && !notifier.update) {
85
+ await new Promise(resolve => setTimeout(resolve, interval));
86
+ waited += interval;
87
+ }
88
+ }
60
89
  if (!notifier.update) {
61
90
  console.log(`✅ 已是最新版本: ${pkg.version}`);
62
91
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{d as e,c as o,o as a}from"./index-h7iG2I9f.js";import{_ as t}from"./_plugin-vue_export-helper-DlAUqK2U.js";const s={class:"blank-view"},n=e({__name:"Blank",setup(_){return(c,r)=>(a(),o("div",s))}}),m=t(n,[["__scopeId","data-v-1be224a2"]]);export{m as default};
1
+ import{d as e,c as o,o as a}from"./index-mIcNgFiY.js";import{_ as t}from"./_plugin-vue_export-helper-DlAUqK2U.js";const s={class:"blank-view"},n=e({__name:"Blank",setup(_){return(c,r)=>(a(),o("div",s))}}),m=t(n,[["__scopeId","data-v-1be224a2"]]);export{m as default};
@@ -1 +1 @@
1
- import{d as N,u as P,r as d,p as S,I as j,c as v,b as e,f as s,y as m,m as _,w as o,g as a,B as H,O as T,P as V,e as E,t as b,V as k,D as I,J as D,o as r,h as L,K as O,L as x}from"./index-h7iG2I9f.js";import{u as G,M as J,C as K,I as W}from"./InitScriptEditor-D6nioBYF.js";import{_ as q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const A={class:"configs-page"},F={style:{position:"absolute",width:"0",height:"0"}},Q={class:"configs-container"},R={class:"config-content"},X={class:"user-selector-section"},Y={class:"selector-header"},Z={key:0,class:"loading-state"},$={key:1,class:"config-stats"},ee={class:"stat-card"},te={class:"stat-content"},se={class:"stat-value"},oe={class:"stat-card"},ae={class:"stat-content"},ne={class:"stat-value"},le={key:0,class:"modal-content"},ie={class:"tab-content"},re={class:"tab-content"},de={class:"tab-content"},ce=N({__name:"Configs",setup(ve){const u=P(),p=G(),i=d(null),f=d(!1),y=d([]),g=d(!1),w=d("components"),l=S(()=>p.currentConfig),C=d([]);async function M(){try{const n=await D.get("/users");y.value=n.data.data.filter(t=>t.role!=="admin"),C.value=y.value.map(t=>({label:t.email,value:t.id}))}catch{u.error("加载用户列表失败")}}async function B(){if(i.value){f.value=!0;try{await p.fetchUserConfig(i.value)}catch(n){u.error(n.message)}finally{f.value=!1}}}function U(){l.value&&(w.value="components",g.value=!0)}async function h(n){if(i.value)try{await p.updateUserConfig(i.value,n),u.success("更新成功")}catch(t){u.error(t.message)}}function z(n){i.value=n,n&&B()}return j(()=>{M()}),(n,t)=>(r(),v("div",A,[(r(),v("svg",F,[...t[3]||(t[3]=[e("defs",null,[e("linearGradient",{id:"loading-gradient",x1:"0%",y1:"0%",x2:"100%",y2:"100%"},[e("stop",{offset:"0%","stop-color":"#dc2626"}),e("stop",{offset:"50%","stop-color":"#ea580c"}),e("stop",{offset:"100%","stop-color":"#f59e0b"})])],-1)])])),t[15]||(t[15]=e("div",{class:"page-header"},[e("div",null,[e("h1",{class:"page-title"},"配置管理"),e("p",{class:"page-description"},"查看和编辑用户的 MCP 配置")])],-1)),e("div",Q,[e("main",R,[e("div",X,[e("div",Y,[t[6]||(t[6]=e("div",{class:"selector-label"},[e("svg",{class:"label-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),e("span",null,"选择用户")],-1)),l.value?(r(),m(a(H),{key:0,type:"primary",size:"large",class:"edit-btn",onClick:U},{icon:o(()=>[...t[4]||(t[4]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:o(()=>[t[5]||(t[5]=L(" 编辑配置 ",-1))]),_:1})):_("",!0)]),s(a(T),{value:i.value,"onUpdate:value":[t[0]||(t[0]=c=>i.value=c),z],options:C.value,placeholder:"请选择要配置的用户",size:"large",filterable:"",clearable:"",class:"user-select"},{empty:o(()=>[s(a(k),{description:"暂无用户"})]),_:1},8,["value","options"])]),s(a(V),{class:"content-divider"}),f.value?(r(),v("div",Z,[...t[7]||(t[7]=[e("div",{class:"loading-spinner"},[e("svg",{class:"spinner",viewBox:"0 0 50 50"},[e("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none","stroke-width":"4"})])],-1),e("p",{class:"loading-text"},"加载配置中...",-1)])])):l.value?(r(),v("div",$,[e("div",ee,[t[9]||(t[9]=E('<div class="stat-icon stat-icon--primary" data-v-e297e9f7><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-e297e9f7><rect x="3" y="3" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="14" y="3" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="3" y="14" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="14" y="14" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect></svg></div>',1)),e("div",te,[e("div",se,b(l.value.components.length),1),t[8]||(t[8]=e("div",{class:"stat-label"},"MCP 组件",-1))])]),e("div",oe,[t[11]||(t[11]=e("div",{class:"stat-icon stat-icon--success"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e("div",ae,[e("div",ne,b(l.value.customTools.length),1),t[10]||(t[10]=e("div",{class:"stat-label"},"自定义工具",-1))])])])):i.value?(r(),m(a(k),{key:3,description:"该用户暂无配置或加载失败",class:"empty-placeholder"},{icon:o(()=>[...t[13]||(t[13]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1})):(r(),m(a(k),{key:2,description:"请选择一个用户查看配置",class:"empty-placeholder"},{icon:o(()=>[...t[12]||(t[12]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1}))])]),s(a(I),{show:g.value,"onUpdate:show":t[2]||(t[2]=c=>g.value=c),preset:"card",bordered:!1,class:"config-edit-modal",style:{width:"90vw",maxWidth:"1400px",height:"90vh"}},{header:o(()=>[...t[14]||(t[14]=[e("div",{class:"modal-header"},[e("div",{class:"modal-icon"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])]),e("div",null,[e("h3",{class:"modal-title"},"编辑用户配置"),e("p",{class:"modal-subtitle"},"管理 MCP 组件、工具和脚本")])],-1)])]),default:o(()=>[l.value?(r(),v("div",le,[s(a(O),{value:w.value,"onUpdate:value":t[1]||(t[1]=c=>w.value=c),type:"line",animated:"",size:"large",class:"config-tabs"},{default:o(()=>[s(a(x),{name:"components",tab:"MCP 组件"},{default:o(()=>[e("div",ie,[s(J,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1}),s(a(x),{name:"tools",tab:"自定义工具"},{default:o(()=>[e("div",re,[s(K,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1}),s(a(x),{name:"init",tab:"初始化脚本"},{default:o(()=>[e("div",de,[s(W,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1})]),_:1},8,["value"])])):_("",!0)]),_:1},8,["show"])]))}}),ge=q(ce,[["__scopeId","data-v-e297e9f7"]]);export{ge as default};
1
+ import{d as N,u as P,r as d,p as S,s as j,c as v,b as e,f as s,A as m,m as _,w as o,g as a,B as H,O as T,P as V,e as E,t as b,V as k,G as I,y as L,o as r,h as D,K as G,L as x}from"./index-mIcNgFiY.js";import{u as O,M as A,C as K,I as W}from"./InitScriptEditor-BpsNM3mj.js";import{_ as q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const F={class:"configs-page"},J={style:{position:"absolute",width:"0",height:"0"}},Q={class:"configs-container"},R={class:"config-content"},X={class:"user-selector-section"},Y={class:"selector-header"},Z={key:0,class:"loading-state"},$={key:1,class:"config-stats"},ee={class:"stat-card"},te={class:"stat-content"},se={class:"stat-value"},oe={class:"stat-card"},ae={class:"stat-content"},ne={class:"stat-value"},le={key:0,class:"modal-content"},ie={class:"tab-content"},re={class:"tab-content"},de={class:"tab-content"},ce=N({__name:"Configs",setup(ve){const u=P(),p=O(),i=d(null),f=d(!1),y=d([]),g=d(!1),w=d("components"),l=S(()=>p.currentConfig),C=d([]);async function M(){try{const n=await L.get("/users");y.value=n.data.data.filter(t=>t.role!=="admin"),C.value=y.value.map(t=>({label:t.email,value:t.id}))}catch{u.error("加载用户列表失败")}}async function B(){if(i.value){f.value=!0;try{await p.fetchUserConfig(i.value)}catch(n){u.error(n.message)}finally{f.value=!1}}}function U(){l.value&&(w.value="components",g.value=!0)}async function h(n){if(i.value)try{await p.updateUserConfig(i.value,n),u.success("更新成功")}catch(t){u.error(t.message)}}function z(n){i.value=n,n&&B()}return j(()=>{M()}),(n,t)=>(r(),v("div",F,[(r(),v("svg",J,[...t[3]||(t[3]=[e("defs",null,[e("linearGradient",{id:"loading-gradient",x1:"0%",y1:"0%",x2:"100%",y2:"100%"},[e("stop",{offset:"0%","stop-color":"#dc2626"}),e("stop",{offset:"50%","stop-color":"#ea580c"}),e("stop",{offset:"100%","stop-color":"#f59e0b"})])],-1)])])),t[15]||(t[15]=e("div",{class:"page-header"},[e("div",null,[e("h1",{class:"page-title"},"配置管理"),e("p",{class:"page-description"},"查看和编辑用户的 MCP 配置")])],-1)),e("div",Q,[e("main",R,[e("div",X,[e("div",Y,[t[6]||(t[6]=e("div",{class:"selector-label"},[e("svg",{class:"label-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),e("span",null,"选择用户")],-1)),l.value?(r(),m(a(H),{key:0,type:"primary",size:"large",class:"edit-btn",onClick:U},{icon:o(()=>[...t[4]||(t[4]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:o(()=>[t[5]||(t[5]=D(" 编辑配置 ",-1))]),_:1})):_("",!0)]),s(a(T),{value:i.value,"onUpdate:value":[t[0]||(t[0]=c=>i.value=c),z],options:C.value,placeholder:"请选择要配置的用户",size:"large",filterable:"",clearable:"",class:"user-select"},{empty:o(()=>[s(a(k),{description:"暂无用户"})]),_:1},8,["value","options"])]),s(a(V),{class:"content-divider"}),f.value?(r(),v("div",Z,[...t[7]||(t[7]=[e("div",{class:"loading-spinner"},[e("svg",{class:"spinner",viewBox:"0 0 50 50"},[e("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none","stroke-width":"4"})])],-1),e("p",{class:"loading-text"},"加载配置中...",-1)])])):l.value?(r(),v("div",$,[e("div",ee,[t[9]||(t[9]=E('<div class="stat-icon stat-icon--primary" data-v-e297e9f7><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-e297e9f7><rect x="3" y="3" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="14" y="3" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="3" y="14" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="14" y="14" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect></svg></div>',1)),e("div",te,[e("div",se,b(l.value.components.length),1),t[8]||(t[8]=e("div",{class:"stat-label"},"MCP 组件",-1))])]),e("div",oe,[t[11]||(t[11]=e("div",{class:"stat-icon stat-icon--success"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e("div",ae,[e("div",ne,b(l.value.customTools.length),1),t[10]||(t[10]=e("div",{class:"stat-label"},"自定义工具",-1))])])])):i.value?(r(),m(a(k),{key:3,description:"该用户暂无配置或加载失败",class:"empty-placeholder"},{icon:o(()=>[...t[13]||(t[13]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1})):(r(),m(a(k),{key:2,description:"请选择一个用户查看配置",class:"empty-placeholder"},{icon:o(()=>[...t[12]||(t[12]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1}))])]),s(a(I),{show:g.value,"onUpdate:show":t[2]||(t[2]=c=>g.value=c),preset:"card",bordered:!1,class:"config-edit-modal",style:{width:"90vw",maxWidth:"1400px",height:"90vh"}},{header:o(()=>[...t[14]||(t[14]=[e("div",{class:"modal-header"},[e("div",{class:"modal-icon"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])]),e("div",null,[e("h3",{class:"modal-title"},"编辑用户配置"),e("p",{class:"modal-subtitle"},"管理 MCP 组件、工具和脚本")])],-1)])]),default:o(()=>[l.value?(r(),v("div",le,[s(a(G),{value:w.value,"onUpdate:value":t[1]||(t[1]=c=>w.value=c),type:"line",animated:"",size:"large",class:"config-tabs"},{default:o(()=>[s(a(x),{name:"components",tab:"MCP 组件"},{default:o(()=>[e("div",ie,[s(A,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1}),s(a(x),{name:"tools",tab:"自定义工具"},{default:o(()=>[e("div",re,[s(K,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1}),s(a(x),{name:"init",tab:"初始化脚本"},{default:o(()=>[e("div",de,[s(W,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1})]),_:1},8,["value"])])):_("",!0)]),_:1},8,["show"])]))}}),ge=q(ce,[["__scopeId","data-v-e297e9f7"]]);export{ge as default};
@@ -1,4 +1,4 @@
1
- import{d as $e,u as Se,r as m,p as le,A as De,c as y,b as a,f as o,w as n,g as l,B as $,k as q,C as Ie,D as ce,o as w,h,N as Ce,j as W,E as ze,n as I,G as ye,H as Ae,I as Te,J as X,K as Ve,L as _e,m as te,F as fe,s as me,t as K,M as He,O as Ue,x as Ne,y as xe,P as Oe,Q as je,R as Le,S as Ee,U as Pe,V as ge,W as Je,X as qe,Y as Fe,Z as Be,_ as We,v as Ke,a as Ye,q as Ge,z as Qe,i as Xe}from"./index-h7iG2I9f.js";import{g as Ze,p as et,_ as tt,u as Re,I as at,C as st,M as lt}from"./InitScriptEditor-D6nioBYF.js";import{_ as Me}from"./_plugin-vue_export-helper-DlAUqK2U.js";const nt={class:"variables-manager"},ot={class:"variables-toolbar"},rt={class:"variables-table-container"},it={class:"modal-form-wrapper"},ut=$e({__name:"VariablesManager",props:{config:{}},emits:["update"],setup(ne,{emit:_}){const f=ne,p=_,A=Se(),c=m(!1),E=m(!1),z=m(null),O=m(),R=m(""),U={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},G=C=>({style:"cursor: pointer; transition: all 0.2s ease;",onMouseenter:u=>{u.currentTarget.style.backgroundColor="rgba(99, 102, 241, 0.04)"},onMouseleave:u=>{u.currentTarget.style.backgroundColor=""}}),H=[{title:"变量名",key:"name",width:100,render(C){return I("strong",C.name)}},{title:"值",key:"value",width:500,render(C){if(C.isSecret)return I(ye,{type:"info",depth:3,italic:!0},{default:()=>"****** (敏感信息)"});const u=String(C.value).split(`
1
+ import{d as $e,u as Se,r as m,p as le,D as De,c as y,b as a,f as o,w as n,g as l,B as $,k as q,E as Ie,G as ce,o as w,h,N as Ce,j as W,H as ze,n as I,I as ye,J as Ae,s as Te,y as X,K as Ve,L as _e,m as te,F as fe,v as me,t as K,M as He,O as Ue,z as Ne,A as xe,P as Oe,Q as je,R as Le,S as Ee,U as Pe,V as ge,W as Je,X as qe,Y as Fe,Z as Be,_ as We,x as Ke,a as Ye,q as Ge,C as Qe,i as Xe}from"./index-mIcNgFiY.js";import{g as Ze,p as et,_ as tt,u as Re,I as at,C as st,M as lt}from"./InitScriptEditor-BpsNM3mj.js";import{_ as Me}from"./_plugin-vue_export-helper-DlAUqK2U.js";const nt={class:"variables-manager"},ot={class:"variables-toolbar"},rt={class:"variables-table-container"},it={class:"modal-form-wrapper"},ut=$e({__name:"VariablesManager",props:{config:{}},emits:["update"],setup(ne,{emit:_}){const f=ne,p=_,A=Se(),c=m(!1),E=m(!1),z=m(null),O=m(),R=m(""),U={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},G=C=>({style:"cursor: pointer; transition: all 0.2s ease;",onMouseenter:u=>{u.currentTarget.style.backgroundColor="rgba(99, 102, 241, 0.04)"},onMouseleave:u=>{u.currentTarget.style.backgroundColor=""}}),H=[{title:"变量名",key:"name",width:100,render(C){return I("strong",C.name)}},{title:"值",key:"value",width:500,render(C){if(C.isSecret)return I(ye,{type:"info",depth:3,italic:!0},{default:()=>"****** (敏感信息)"});const u=String(C.value).split(`
2
2
  `).map((b,Q,oe)=>{const ae=[I("span",{class:"value-line"},b)];return Q<oe.length-1&&ae.push(I("br")),ae}).flat();return I("div",{class:"variable-value-cell"},u)}},{title:"描述",key:"description",width:300,render(C){return I(ye,{depth:3},{default:()=>C.description||"-"})}},{title:"操作",key:"actions",width:150,render(C){return I(Ae,{size:"small"},{default:()=>[I($,{size:"small",onClick:()=>V(C)},{default:()=>"编辑"}),I($,{size:"small",type:"error",onClick:()=>P(C.id)},{default:()=>"删除"})]})}}],B=le(()=>{if(!R.value)return f.config.variables;const C=R.value.toLowerCase();return f.config.variables.filter(u=>{var b;return u.name.toLowerCase().includes(C)||((b=u.description)==null?void 0:b.toLowerCase().includes(C))})}),x=m({name:"",value:"",description:"",isSecret:!1}),L={name:{required:!0,message:"请输入变量名",trigger:"blur"},value:{required:!0,message:"请输入变量值",trigger:"blur"}};function V(C){z.value=C,x.value={name:C.name,value:C.value,description:C.description||"",isSecret:C.isSecret||!1},c.value=!0}function P(C){const u=f.config.variables.filter(b=>b.id!==C);p("update",{variables:u})}async function ve(){var C,u;try{await((C=O.value)==null?void 0:C.validate()),E.value=!0;const b={id:((u=z.value)==null?void 0:u.id)||Ze(),name:x.value.name,value:x.value.value,description:x.value.description||void 0,isSecret:x.value.isSecret},Q=[...f.config.variables],oe=Q.findIndex(ae=>ae.id===b.id);oe!==-1?Q[oe]=b:Q.push(b),p("update",{variables:Q}),c.value=!1,J()}catch(b){A.error(b.message)}finally{E.value=!1}}function J(){z.value=null,x.value={name:"",value:"",description:"",isSecret:!1}}return De(()=>c.value,C=>{C||J()}),(C,u)=>(w(),y("div",nt,[a("div",ot,[o(l($),{type:"primary",size:"large",class:"add-variable-btn",onClick:u[0]||(u[0]=b=>c.value=!0)},{icon:n(()=>[...u[8]||(u[8]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[u[9]||(u[9]=h(" 添加变量 ",-1))]),_:1}),o(l(q),{value:R.value,"onUpdate:value":u[1]||(u[1]=b=>R.value=b),placeholder:"搜索变量名或描述...",size:"large",clearable:"",class:"search-input"},{prefix:n(()=>[...u[10]||(u[10]=[a("svg",{class:"search-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1},8,["value"])]),a("div",rt,[o(l(Ie),{columns:H,data:B.value,pagination:U,"row-props":G,class:"modern-table"},null,8,["data"])]),o(l(ce),{show:c.value,"onUpdate:show":u[7]||(u[7]=b=>c.value=b),preset:"dialog",title:z.value?"编辑变量":"添加变量",class:"variable-edit-modal",style:{maxHeight:"90vh"}},{action:n(()=>[o(l($),{onClick:u[6]||(u[6]=b=>c.value=!1)},{default:n(()=>[...u[12]||(u[12]=[h("取消",-1)])]),_:1}),o(l($),{type:"primary",loading:E.value,onClick:ve},{default:n(()=>[...u[13]||(u[13]=[h("保存",-1)])]),_:1},8,["loading"])]),default:n(()=>[a("div",it,[o(l(Ce),{ref_key:"formRef",ref:O,model:x.value,rules:L},{default:n(()=>[o(l(W),{path:"name",label:"变量名"},{default:n(()=>[o(l(q),{value:x.value.name,"onUpdate:value":u[2]||(u[2]=b=>x.value.name=b),placeholder:"例如: API_KEY"},null,8,["value"])]),_:1}),o(l(W),{path:"value",label:"值"},{default:n(()=>[o(l(q),{value:x.value.value,"onUpdate:value":u[3]||(u[3]=b=>x.value.value=b),type:x.value.isSecret?"password":"textarea",rows:x.value.isSecret?void 0:3,placeholder:"变量值"},null,8,["value","type","rows"])]),_:1}),o(l(W),{path:"description",label:"描述"},{default:n(()=>[o(l(q),{value:x.value.description,"onUpdate:value":u[4]||(u[4]=b=>x.value.description=b),type:"textarea",rows:2,placeholder:"可选"},null,8,["value"])]),_:1}),o(l(W),{path:"isSecret",label:"敏感信息"},{default:n(()=>[o(l(ze),{checked:x.value.isSecret,"onUpdate:checked":u[5]||(u[5]=b=>x.value.isSecret=b)},{default:n(()=>[...u[11]||(u[11]=[h("标记为敏感信息(导出时使用占位符)",-1)])]),_:1},8,["checked"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["show","title"])]))}}),dt=Me(ut,[["__scopeId","data-v-f50b6ccd"]]),ct={class:"prompts-manager"},vt={class:"prompts-toolbar"},pt={class:"prompts-table-container"},ft={class:"modal-header"},mt={class:"modal-title"},gt={class:"modal-subtitle"},wt={class:"modal-content-wrapper"},ht={class:"tab-pane-content"},bt={class:"form-section"},kt={class:"form-grid-2"},yt={class:"form-section"},xt={class:"section-header"},Ct={class:"parameters-list"},$t={class:"parameter-header"},St={class:"parameter-index"},Dt={class:"parameter-fields"},Mt={key:0,class:"empty-parameters"},_t={class:"tab-pane-content"},zt={style:{display:"flex","align-items":"center",gap:"8px"}},Tt={viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{width:"18px",height:"18px"}},Ut={class:"messages-section"},Nt={class:"message-header"},jt={class:"save-status-indicator"},It=["title"],Bt={key:0,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},At={key:1,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Vt={key:0,class:"monaco-wrapper"},Et={key:0,class:"empty-messages"},Rt={class:"modal-footer"},Ht={class:"test-content"},Ot={class:"test-messages"},Lt={class:"test-message-header"},Pt={class:"test-message-content"},Jt={key:0,class:"test-message-empty"},qt=$e({__name:"PromptsManager",setup(ne){const _=Se(),f=m(!1),p=m(!1),A=m(!1),c=m(!1),E=m(!1),z=m(null),O=m(),R=m(""),U=m([]),G=m("content"),H=m(!1),B=m(-1),x=m(new Map),L=m(!1),V=[{label:"用户",value:"user"},{label:"助手",value:"assistant"}],P={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},ve=d=>({style:"cursor: pointer; transition: all 0.2s ease;",onMouseenter:t=>{t.currentTarget.style.backgroundColor="rgba(99, 102, 241, 0.04)"},onMouseleave:t=>{t.currentTarget.style.backgroundColor=""}}),J=[{title:"名称",key:"name",width:200,render(d){return I("strong",d.name)}},{title:"描述",key:"description",render(d){return I(ye,{depth:3},{default:()=>d.description||"-"})}},{title:"参数数量",key:"arguments",width:120,render(d){return I(ye,{depth:3},{default:()=>{var t;return`${((t=d.arguments)==null?void 0:t.length)||0} 个`}})}},{title:"消息数量",key:"messages",width:120,render(d){return I(ye,{depth:3},{default:()=>{var t;return`${((t=d.messages)==null?void 0:t.length)||0} 条`}})}},{title:"操作",key:"actions",width:200,render(d){return I(Ae,{size:"small"},{default:()=>[I($,{size:"small",onClick:()=>ue(d)},{default:()=>"编辑"}),I($,{size:"small",type:"info",onClick:()=>r(d)},{default:()=>"测试"}),I($,{size:"small",type:"error",onClick:()=>we(d.id)},{default:()=>"删除"})]})}}],C=le(()=>{if(!R.value)return U.value;const d=R.value.toLowerCase();return U.value.filter(t=>{var e;return t.name.toLowerCase().includes(d)||((e=t.description)==null?void 0:e.toLowerCase().includes(d))})}),u=m({name:"",description:"",arguments:[],messages:[]}),b=m({arguments:{}}),Q=le(()=>!p.value||!u.value.messages||u.value.messages.length===0?[]:u.value.messages.filter(t=>t.content.text).map(t=>({...t,content:{...t.content,text:et(t.content.text,b.value.arguments)}}))),oe={name:{required:!0,message:"请输入提示词名称",trigger:"blur"},messages:{required:!0,validator:(d,t)=>!t||t.length===0?new Error("至少需要一条消息"):!0,trigger:"blur"}};function ae(d){return x.value.get(d)||!1}function se(d){x.value.set(d,!0)}function ie(d){H.value&&B.value===d?(H.value=!1,B.value=-1):(H.value=!0,B.value=d)}async function Z(){var d,t;try{E.value=!0;const e=await X.get("/prompts");e.data.success&&(U.value=e.data.data)}catch(e){_.error(((t=(d=e.response)==null?void 0:d.data)==null?void 0:t.error)||"加载提示词失败")}finally{E.value=!1}}function pe(){z.value=null,T(),f.value=!0,G.value="content"}function ue(d){z.value=d,u.value={name:d.name,description:d.description||"",arguments:d.arguments?[...d.arguments]:[],messages:d.messages&&d.messages.length>0?[...d.messages]:[{role:"user",content:{type:"text",text:""}}]},x.value.clear(),f.value=!0,G.value="content"}async function we(d){var t,e;try{await X.delete(`/prompts/${d}`),_.success("删除成功"),await Z()}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"删除失败")}}function he(){u.value.arguments.push({name:"",description:"",required:!1})}function re(d){u.value.arguments.splice(d,1)}function be(){u.value.messages.push({role:"user",content:{type:"text",text:""}}),se(u.value.messages.length-1)}function de(d){u.value.messages.splice(d,1),x.value.delete(d),B.value===d?(H.value=!1,B.value=-1):B.value>d&&B.value--}async function ke(){var d,t,e;try{await((d=O.value)==null?void 0:d.validate()),A.value=!0;const s={name:u.value.name,description:u.value.description||void 0,arguments:u.value.arguments.filter(i=>i.name),messages:u.value.messages.filter(i=>i.content.text)};z.value?(await X.put(`/prompts/${z.value.id}`,s),_.success("更新成功")):(await X.post("/prompts",s),_.success("创建成功")),x.value.clear(),f.value=!1,await Z(),T()}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"保存失败")}finally{A.value=!1}}async function g(){var d,t,e;try{await((d=O.value)==null?void 0:d.validate()),c.value=!0;const s=u.value.arguments.filter(i=>i.name);b.value.arguments=s.reduce((i,j)=>(i[j.name]=b.value.arguments[j.name]||"",i),{}),p.value=!0}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"测试失败")}finally{c.value=!1}}async function r(d){z.value=d,u.value={name:d.name,description:d.description||"",arguments:d.arguments?[...d.arguments]:[],messages:d.messages?[...d.messages]:[]};const t=u.value.arguments.filter(e=>e.name);b.value.arguments=t.reduce((e,s)=>(e[s.name]="",e),{}),await g()}function T(){z.value=null,u.value={name:"",description:"",arguments:[],messages:[{role:"user",content:{type:"text",text:`# 提示词模板
3
3
 
4
4
  ## 变量替换
@@ -1,4 +1,4 @@
1
- import{a1 as io,r as A,J as ue,d as ht,I as At,U as co,A as ke,c as q,o as F,u as Dt,p as Te,m as ce,f as m,b as o,w as d,g as p,B as G,a2 as uo,e as Wt,D as vt,h as I,F as dt,s as pt,y as De,t as ne,Q as Xe,Z as po,a3 as vo,K as Zt,L as gt,a4 as Et,a5 as go,a6 as Ft,a7 as Ut,N as Qt,j as fe,k as be,O as Yt,a8 as $t,M as Le,x as Ae,E as Xt,a9 as je,S as mo,aa as fo,l as ct,ab as ho,Y as yo,R as Fe,C as Pt,ac as Mt,n as ve,G as Bt,_ as Jt,ad as wo,H as bo}from"./index-h7iG2I9f.js";import{_ as zt}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Cr=io("config",()=>{const t=A(null),a=A(!1);async function s(){var $,P;a.value=!0;try{const R=await ue.get("/configs/me");return t.value=R.data.data,t.value}catch(R){throw new Error(((P=($=R.response)==null?void 0:$.data)==null?void 0:P.error)||"Failed to fetch config")}finally{a.value=!1}}async function c($){var P,R;a.value=!0;try{const V=await ue.get(`/configs/user/${$}`);return t.value=V.data.data,t.value}catch(V){throw new Error(((R=(P=V.response)==null?void 0:P.data)==null?void 0:R.error)||"Failed to fetch user config")}finally{a.value=!1}}async function u($){var P,R;a.value=!0;try{const V=await ue.put("/configs/me",$);return t.value=V.data.data,t.value}catch(V){throw new Error(((R=(P=V.response)==null?void 0:P.data)==null?void 0:R.error)||"Failed to update config")}finally{a.value=!1}}async function h($,P){var R,V;a.value=!0;try{const D=await ue.put(`/configs/user/${$}`,P);return t.value=D.data.data,t.value}catch(D){throw new Error(((V=(R=D.response)==null?void 0:R.data)==null?void 0:V.error)||"Failed to update user config")}finally{a.value=!1}}function j($){const P={...$,variables:$.variables.map(R=>({...R,value:R.isSecret?`{{${R.name}}}`:R.value}))};return JSON.stringify(P,null,2)}function k($){try{const P=JSON.parse($);if(!P.name||!Array.isArray(P.components)||!Array.isArray(P.customTools))throw new Error("Invalid config format");return P}catch(P){throw new Error(`Failed to parse config: ${P.message}`)}}return{currentConfig:t,loading:a,fetchConfig:s,fetchUserConfig:c,updateConfig:u,updateUserConfig:h,exportConfig:j,importConfig:k}});function Qe(){if(typeof globalThis<"u"&&"crypto"in globalThis){const t=globalThis.crypto;if(t&&typeof t.randomUUID=="function")return t.randomUUID()}return`${Date.now()}-${Math.random().toString(36).substring(2,11)}`}function It(t){return t==null?!1:typeof t=="boolean"?t:typeof t=="string"?t.trim()!=="":typeof t=="number"?t!==0:Array.isArray(t)?t.length>0:typeof t=="object"?Object.keys(t).length>0:!!t}function ko(t,a){let s=t;const c=/\{\{#if\s+(\w+)\}\}([\s\S]*?)(?:\{\{else\}\}([\s\S]*?))?\{\{\/if\}\}/g;s=s.replace(c,(h,j,k,$)=>{const P=a[j];return It(P)?k||"":$||""});const u=/\{\{#ifnot\s+(\w+)\}\}([\s\S]*?)(?:\{\{else\}\}([\s\S]*?))?\{\{\/ifnot\}\}/g;return s=s.replace(u,(h,j,k,$)=>{const P=a[j];return It(P)?$||"":k||""}),s}function Co(t,a){return t.replace(/\{\{(\w+)\}\}/g,(s,c)=>{const u=a[c];return u!=null?String(u):s})}function xr(t,a){let s=ko(t,a);return s=Co(s,a),s}function Rt(t,a){(a==null||a>t.length)&&(a=t.length);for(var s=0,c=Array(a);s<a;s++)c[s]=t[s];return c}function xo(t){if(Array.isArray(t))return t}function To(t,a,s){return(a=Mo(a))in t?Object.defineProperty(t,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[a]=s,t}function So(t,a){var s=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(s!=null){var c,u,h,j,k=[],$=!0,P=!1;try{if(h=(s=s.call(t)).next,a!==0)for(;!($=(c=h.call(s)).done)&&(k.push(c.value),k.length!==a);$=!0);}catch(R){P=!0,u=R}finally{try{if(!$&&s.return!=null&&(j=s.return(),Object(j)!==j))return}finally{if(P)throw u}}return k}}function $o(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
1
+ import{a1 as io,r as A,y as ue,d as ht,s as At,U as co,D as ke,c as q,o as F,u as Dt,p as Te,m as ce,f as m,b as o,w as d,g as p,B as G,a2 as uo,e as Wt,G as vt,h as I,F as dt,v as pt,A as De,t as ne,Q as Xe,Z as po,a3 as vo,K as Zt,L as gt,a4 as Et,a5 as go,a6 as Ft,a7 as Ut,N as Qt,j as fe,k as be,O as Yt,a8 as $t,M as Le,z as Ae,H as Xt,a9 as je,S as mo,aa as fo,l as ct,ab as ho,Y as yo,R as Fe,E as Pt,ac as Mt,n as ve,I as Bt,_ as Jt,ad as wo,J as bo}from"./index-mIcNgFiY.js";import{_ as zt}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Cr=io("config",()=>{const t=A(null),a=A(!1);async function s(){var $,P;a.value=!0;try{const R=await ue.get("/configs/me");return t.value=R.data.data,t.value}catch(R){throw new Error(((P=($=R.response)==null?void 0:$.data)==null?void 0:P.error)||"Failed to fetch config")}finally{a.value=!1}}async function c($){var P,R;a.value=!0;try{const V=await ue.get(`/configs/user/${$}`);return t.value=V.data.data,t.value}catch(V){throw new Error(((R=(P=V.response)==null?void 0:P.data)==null?void 0:R.error)||"Failed to fetch user config")}finally{a.value=!1}}async function u($){var P,R;a.value=!0;try{const V=await ue.put("/configs/me",$);return t.value=V.data.data,t.value}catch(V){throw new Error(((R=(P=V.response)==null?void 0:P.data)==null?void 0:R.error)||"Failed to update config")}finally{a.value=!1}}async function h($,P){var R,V;a.value=!0;try{const D=await ue.put(`/configs/user/${$}`,P);return t.value=D.data.data,t.value}catch(D){throw new Error(((V=(R=D.response)==null?void 0:R.data)==null?void 0:V.error)||"Failed to update user config")}finally{a.value=!1}}function j($){const P={...$,variables:$.variables.map(R=>({...R,value:R.isSecret?`{{${R.name}}}`:R.value}))};return JSON.stringify(P,null,2)}function k($){try{const P=JSON.parse($);if(!P.name||!Array.isArray(P.components)||!Array.isArray(P.customTools))throw new Error("Invalid config format");return P}catch(P){throw new Error(`Failed to parse config: ${P.message}`)}}return{currentConfig:t,loading:a,fetchConfig:s,fetchUserConfig:c,updateConfig:u,updateUserConfig:h,exportConfig:j,importConfig:k}});function Qe(){if(typeof globalThis<"u"&&"crypto"in globalThis){const t=globalThis.crypto;if(t&&typeof t.randomUUID=="function")return t.randomUUID()}return`${Date.now()}-${Math.random().toString(36).substring(2,11)}`}function It(t){return t==null?!1:typeof t=="boolean"?t:typeof t=="string"?t.trim()!=="":typeof t=="number"?t!==0:Array.isArray(t)?t.length>0:typeof t=="object"?Object.keys(t).length>0:!!t}function ko(t,a){let s=t;const c=/\{\{#if\s+(\w+)\}\}([\s\S]*?)(?:\{\{else\}\}([\s\S]*?))?\{\{\/if\}\}/g;s=s.replace(c,(h,j,k,$)=>{const P=a[j];return It(P)?k||"":$||""});const u=/\{\{#ifnot\s+(\w+)\}\}([\s\S]*?)(?:\{\{else\}\}([\s\S]*?))?\{\{\/ifnot\}\}/g;return s=s.replace(u,(h,j,k,$)=>{const P=a[j];return It(P)?$||"":k||""}),s}function Co(t,a){return t.replace(/\{\{(\w+)\}\}/g,(s,c)=>{const u=a[c];return u!=null?String(u):s})}function xr(t,a){let s=ko(t,a);return s=Co(s,a),s}function Rt(t,a){(a==null||a>t.length)&&(a=t.length);for(var s=0,c=Array(a);s<a;s++)c[s]=t[s];return c}function xo(t){if(Array.isArray(t))return t}function To(t,a,s){return(a=Mo(a))in t?Object.defineProperty(t,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[a]=s,t}function So(t,a){var s=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(s!=null){var c,u,h,j,k=[],$=!0,P=!1;try{if(h=(s=s.call(t)).next,a!==0)for(;!($=(c=h.call(s)).done)&&(k.push(c.value),k.length!==a);$=!0);}catch(R){P=!0,u=R}finally{try{if(!$&&s.return!=null&&(j=s.return(),Object(j)!==j))return}finally{if(P)throw u}}return k}}function $o(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Vt(t,a){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);a&&(c=c.filter(function(u){return Object.getOwnPropertyDescriptor(t,u).enumerable})),s.push.apply(s,c)}return s}function Lt(t){for(var a=1;a<arguments.length;a++){var s=arguments[a]!=null?arguments[a]:{};a%2?Vt(Object(s),!0).forEach(function(c){To(t,c,s[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):Vt(Object(s)).forEach(function(c){Object.defineProperty(t,c,Object.getOwnPropertyDescriptor(s,c))})}return t}function Po(t,a){if(t==null)return{};var s,c,u=jo(t,a);if(Object.getOwnPropertySymbols){var h=Object.getOwnPropertySymbols(t);for(c=0;c<h.length;c++)s=h[c],a.indexOf(s)===-1&&{}.propertyIsEnumerable.call(t,s)&&(u[s]=t[s])}return u}function jo(t,a){if(t==null)return{};var s={};for(var c in t)if({}.hasOwnProperty.call(t,c)){if(a.indexOf(c)!==-1)continue;s[c]=t[c]}return s}function No(t,a){return xo(t)||So(t,a)||Ao(t,a)||$o()}function Oo(t,a){if(typeof t!="object"||!t)return t;var s=t[Symbol.toPrimitive];if(s!==void 0){var c=s.call(t,a);if(typeof c!="object")return c;throw new TypeError("@@toPrimitive must return a primitive value.")}return(a==="string"?String:Number)(t)}function Mo(t){var a=Oo(t,"string");return typeof a=="symbol"?a:a+""}function Ao(t,a){if(t){if(typeof t=="string")return Rt(t,a);var s={}.toString.call(t).slice(8,-1);return s==="Object"&&t.constructor&&(s=t.constructor.name),s==="Map"||s==="Set"?Array.from(t):s==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s)?Rt(t,a):void 0}}function Do(t,a,s){return a in t?Object.defineProperty(t,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[a]=s,t}function qt(t,a){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);a&&(c=c.filter(function(u){return Object.getOwnPropertyDescriptor(t,u).enumerable})),s.push.apply(s,c)}return s}function Ht(t){for(var a=1;a<arguments.length;a++){var s=arguments[a]!=null?arguments[a]:{};a%2?qt(Object(s),!0).forEach(function(c){Do(t,c,s[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):qt(Object(s)).forEach(function(c){Object.defineProperty(t,c,Object.getOwnPropertyDescriptor(s,c))})}return t}function zo(){for(var t=arguments.length,a=new Array(t),s=0;s<t;s++)a[s]=arguments[s];return function(c){return a.reduceRight(function(u,h){return h(u)},c)}}function Ye(t){return function a(){for(var s=this,c=arguments.length,u=new Array(c),h=0;h<c;h++)u[h]=arguments[h];return u.length>=t.length?t.apply(this,u):function(){for(var j=arguments.length,k=new Array(j),$=0;$<j;$++)k[$]=arguments[$];return a.apply(s,[].concat(u,k))}}}function mt(t){return{}.toString.call(t).includes("Object")}function _o(t){return!Object.keys(t).length}function et(t){return typeof t=="function"}function Eo(t,a){return Object.prototype.hasOwnProperty.call(t,a)}function Fo(t,a){return mt(a)||ze("changeType"),Object.keys(a).some(function(s){return!Eo(t,s)})&&ze("changeField"),a}function Uo(t){et(t)||ze("selectorType")}function Bo(t){et(t)||mt(t)||ze("handlerType"),mt(t)&&Object.values(t).some(function(a){return!et(a)})&&ze("handlersType")}function Jo(t){t||ze("initialIsRequired"),mt(t)||ze("initialType"),_o(t)&&ze("initialContent")}function Io(t,a){throw new Error(t[a]||t.default)}var Ro={initialIsRequired:"initial state is required",initialType:"initial state should be an object",initialContent:"initial state shouldn't be an empty object",handlerType:"handler should be an object or a function",handlersType:"all handlers should be a functions",selectorType:"selector should be a function",changeType:"provided value of changes should be an object",changeField:'it seams you want to change a field in the state which is not specified in the "initial" state',default:"an unknown error accured in `state-local` package"},ze=Ye(Io)(Ro),ut={changes:Fo,selector:Uo,handler:Bo,initial:Jo};function Vo(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ut.initial(t),ut.handler(a);var s={current:t},c=Ye(Ho)(s,a),u=Ye(qo)(s),h=Ye(ut.changes)(t),j=Ye(Lo)(s);function k(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(R){return R};return ut.selector(P),P(s.current)}function $(P){zo(c,u,h,j)(P)}return[k,$]}function Lo(t,a){return et(a)?a(t.current):a}function qo(t,a){return t.current=Ht(Ht({},t.current),a),a}function Ho(t,a,s){return et(a)?a(t.current):Object.keys(s).forEach(function(c){var u;return(u=a[c])===null||u===void 0?void 0:u.call(a,t.current[c])}),s}var Ko={create:Vo},Go={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function Wo(t){return function a(){for(var s=this,c=arguments.length,u=new Array(c),h=0;h<c;h++)u[h]=arguments[h];return u.length>=t.length?t.apply(this,u):function(){for(var j=arguments.length,k=new Array(j),$=0;$<j;$++)k[$]=arguments[$];return a.apply(s,[].concat(u,k))}}}function Zo(t){return{}.toString.call(t).includes("Object")}function Qo(t){return t||Kt("configIsRequired"),Zo(t)||Kt("configType"),t.urls?(Yo(),{paths:{vs:t.urls.monacoBase}}):t}function Yo(){console.warn(eo.deprecation)}function Xo(t,a){throw new Error(t[a]||t.default)}var eo={configIsRequired:"the configuration object is required",configType:"the configuration object should be an object",default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:`Deprecation warning!
3
3
  You are using deprecated way of configuration.
4
4
 
@@ -0,0 +1 @@
1
+ import{d as A,a as U,u as T,$ as F,p as I,q as N,r as u,s as S,c as v,b as e,e as G,f,w as _,g as H,B as $,F as D,v as P,x as R,t as h,y as g,n as a,o as i,z as q,m as Z,A as w,C as y,T as E,i as O}from"./index-mIcNgFiY.js";import{_ as J}from"./_plugin-vue_export-helper-DlAUqK2U.js";const K={class:"app-shell"},Q={class:"app-header"},W={class:"app-header__container"},X={class:"app-header__right"},Y={class:"app-body"},ee={class:"app-sidebar"},te={class:"sidebar-nav"},oe=["onClick"],se={class:"nav-item__icon admin-nav-icon"},ae={class:"nav-item__content"},ne={class:"nav-item__label"},re={class:"nav-item__description"},ie={key:0,class:"nav-item__indicator admin-indicator"},de={class:"app-content"},ce={class:"content-wrapper"},le={class:"app-footer"},pe={class:"version-info"},ue={class:"version-text"},ve=A({__name:"Layout",setup(fe){const m=O(),x=N(),C=U(),r=T(),M=F(),k=I(()=>x.name),c=u(!1),l=u(!1),p=u("..."),L=[{label:"用户管理",key:"AdminUsers",icon:()=>a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),description:"管理系统用户和权限"},{label:"配置管理",key:"AdminConfigs",icon:()=>a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),a("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),description:"管理用户的 MCP 配置"}];function b(o){m.push({name:o})}function B(){C.adminLogout(),m.push("/admin/login")}async function V(){if(!c.value){c.value=!0;try{const t=(await g.get("/update/check")).data;t.success&&t.hasUpdate&&M.warning({title:"发现新版本",content:()=>a("div",[a("p",{style:"margin-bottom: 12px;"},`当前版本: ${t.currentVersion}`),a("p",{style:"margin-bottom: 12px;"},`最新版本: ${t.latestVersion}`),a("p",{style:"color: #666; font-size: 14px;"},"是否立即更新?更新后系统将自动重启。")]),positiveText:"立即更新",negativeText:"稍后提醒",onPositiveClick:async()=>{await z()},onNegativeClick:()=>{}})}catch(o){console.error("检查更新失败:",o)}finally{c.value=!1}}}async function z(){var t,d;if(l.value)return;l.value=!0;const o=r.loading("正在更新,请稍候...",{duration:0});try{const n=(await g.post("/update/execute")).data;o.destroy(),n.success?n.restartFailed?r.warning("更新成功,但重启失败,请手动重启服务",{duration:5e3}):(r.success("更新成功,系统正在重启...",{duration:3e3}),setTimeout(()=>{window.location.reload()},3e3)):r.error(n.error||"更新失败",{duration:5e3})}catch(s){o.destroy();const n=((d=(t=s.response)==null?void 0:t.data)==null?void 0:d.error)||s.message||"更新失败";r.error(n,{duration:5e3})}finally{l.value=!1}}async function j(){try{const o=await g.get("/update/version");o.data.success&&(p.value=o.data.version)}catch(o){console.error("获取版本失败:",o),p.value="unknown"}}return S(()=>{j(),setTimeout(()=>{V()},2e3)}),(o,t)=>{const d=R("router-view");return i(),v("div",K,[e("header",Q,[e("div",W,[t[2]||(t[2]=G('<div class="app-header__left" data-v-01543ff6><div class="app-logo" data-v-01543ff6><div class="logo-icon admin-theme" data-v-01543ff6><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-01543ff6><path d="M12 2L2 7L12 12L22 7L12 2Z" fill="url(#admin-gradient1)" data-v-01543ff6></path><path d="M2 17L12 22L22 17V12L12 17L2 12V17Z" fill="url(#admin-gradient2)" data-v-01543ff6></path><defs data-v-01543ff6><linearGradient id="admin-gradient1" x1="2" y1="2" x2="22" y2="12" data-v-01543ff6><stop offset="0%" stop-color="#dc2626" data-v-01543ff6></stop><stop offset="100%" stop-color="#ea580c" data-v-01543ff6></stop></linearGradient><linearGradient id="admin-gradient2" x1="2" y1="12" x2="22" y2="22" data-v-01543ff6><stop offset="0%" stop-color="#ea580c" data-v-01543ff6></stop><stop offset="100%" stop-color="#f59e0b" data-v-01543ff6></stop></linearGradient></defs></svg></div><div class="logo-text" data-v-01543ff6><div class="logo-title admin-title" data-v-01543ff6>Flex MCP Admin</div><div class="logo-subtitle" data-v-01543ff6>管理员控制台</div></div></div></div>',1)),e("div",X,[t[1]||(t[1]=e("div",{class:"admin-badge"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),e("span",null,"管理员")],-1)),f(H($),{class:"logout-btn",quaternary:"",circle:"",onClick:B},{icon:_(()=>[...t[0]||(t[0]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M9 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),e("path",{d:"M16 17L21 12L16 7",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),e("path",{d:"M21 12H9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1})])])]),e("div",Y,[e("aside",ee,[e("nav",te,[(i(),v(D,null,P(L,s=>e("div",{key:s.key,class:q(["nav-item",{"nav-item--active":k.value===s.key}]),onClick:n=>b(s.key)},[e("div",se,[(i(),w(y(s.icon)))]),e("div",ae,[e("div",ne,h(s.label),1),e("div",re,h(s.description),1)]),k.value===s.key?(i(),v("div",ie)):Z("",!0)],10,oe)),64))])]),e("main",de,[e("div",ce,[f(d,null,{default:_(({Component:s,route:n})=>[f(E,{name:"page-fade",mode:"out-in"},{default:_(()=>[(i(),w(y(s),{key:n.path}))]),_:2},1024)]),_:1})])])]),e("footer",le,[e("div",pe,[e("span",ue,"v"+h(p.value),1)])])])}}}),ke=J(ve,[["__scopeId","data-v-01543ff6"]]);export{ke as default};
@@ -0,0 +1 @@
1
+ import{n as t,d as L,a as V,r as H,p as _,q as j,s as z,c as i,b as o,e as I,f as v,t as a,g as m,w as h,B as A,F,v as P,x as S,y as q,o as r,z as D,m as G,A as g,C,T as N,i as T}from"./index-mIcNgFiY.js";import{_ as R}from"./_plugin-vue_export-helper-DlAUqK2U.js";const O=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1",stroke:"currentColor","stroke-width":"2",fill:"none"}),t("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1",stroke:"currentColor","stroke-width":"2",fill:"none"}),t("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1",stroke:"currentColor","stroke-width":"2",fill:"none"}),t("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1",stroke:"currentColor","stroke-width":"2",fill:"none"})]),U=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),Z=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M4 7h3m13 0h-3m-2 4l-2 5l-2-5m9-4l-3 8l-3-8m-6 11h3m0 0h3m-3 0V10",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),$=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("polyline",{points:"16 18 22 12 16 6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),t("polyline",{points:"8 6 2 12 8 18",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),E=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M3 3h18v18H3V3zm2 2v14h14V5H5zm2 2h10v2H7V7zm0 4h10v2H7v-2zm0 4h7v2H7v-2z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),W=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),t("path",{d:"M14 2v6h6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),t("path",{d:"M16 13H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"}),t("path",{d:"M16 17H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"}),t("path",{d:"M10 9H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})]),x=[{label:"MCP 组件",key:"section-components",icon:O,description:"管理 MCP 服务组件"},{label:"自定义工具",key:"section-tools",icon:U,description:"创建和编辑工具"},{label:"变量管理",key:"section-variables",icon:Z,description:"配置环境变量",hideForAdmin:!0},{label:"初始化脚本",key:"section-init",icon:$,description:"编写启动脚本"},{label:"数据管理",key:"section-tables",icon:E,description:"创建和管理数据表",hideForAdmin:!0},{label:"提示词管理",key:"section-prompts",icon:W,description:"创建和管理提示词模板"}],J={class:"app-shell"},K={class:"app-header"},Q={class:"app-header__container"},X={class:"app-header__right"},Y={class:"user-info"},oo={class:"user-email"},to={class:"app-body"},eo={class:"app-sidebar"},so={class:"sidebar-nav"},no=["onClick"],ro={class:"nav-item__icon"},io={class:"nav-item__content"},ao={class:"nav-item__label"},lo={class:"nav-item__description"},co={key:0,class:"nav-item__indicator"},po={class:"app-content"},uo={class:"content-wrapper"},vo={class:"app-footer"},ho={class:"version-info"},ko={class:"version-text"},wo=L({__name:"Layout",setup(fo){const d=T(),l=j(),c=V(),p=H("..."),k=_(()=>l.name==="UserDashboard"?`section-${l.query.section||"components"}`:l.name),y=_(()=>{var s;return((s=c.user)==null?void 0:s.role)==="admin"?x.filter(u=>!u.hideForAdmin):x});function b(e){if(e.startsWith("section-")){const s=e.replace("section-","");d.push({name:"UserDashboard",query:{section:s}});return}d.push({name:e})}function M(){c.userLogout(),d.push("/user/login")}async function B(){try{const e=await q.get("/update/version");e.data.success&&(p.value=e.data.version)}catch(e){console.error("获取版本失败:",e),p.value="unknown"}}return z(()=>{B()}),(e,s)=>{var w;const u=S("router-view");return r(),i("div",J,[o("header",K,[o("div",Q,[s[2]||(s[2]=I('<div class="app-header__left" data-v-d9fd6813><div class="app-logo" data-v-d9fd6813><div class="logo-icon" data-v-d9fd6813><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-d9fd6813><path d="M12 2L2 7L12 12L22 7L12 2Z" fill="url(#gradient1)" data-v-d9fd6813></path><path d="M2 17L12 22L22 17V12L12 17L2 12V17Z" fill="url(#gradient2)" data-v-d9fd6813></path><defs data-v-d9fd6813><linearGradient id="gradient1" x1="2" y1="2" x2="22" y2="12" data-v-d9fd6813><stop offset="0%" stop-color="#6366f1" data-v-d9fd6813></stop><stop offset="100%" stop-color="#8b5cf6" data-v-d9fd6813></stop></linearGradient><linearGradient id="gradient2" x1="2" y1="12" x2="22" y2="22" data-v-d9fd6813><stop offset="0%" stop-color="#8b5cf6" data-v-d9fd6813></stop><stop offset="100%" stop-color="#ec4899" data-v-d9fd6813></stop></linearGradient></defs></svg></div><div class="logo-text" data-v-d9fd6813><div class="logo-title" data-v-d9fd6813>Flex MCP</div><div class="logo-subtitle" data-v-d9fd6813>MCP 服务运营平台</div></div></div></div>',1)),o("div",X,[o("div",Y,[s[0]||(s[0]=o("div",{class:"user-avatar"},[o("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[o("circle",{cx:"12",cy:"8",r:"4",fill:"currentColor",opacity:"0.3"}),o("path",{d:"M6 21C6 17.686 8.686 15 12 15C15.314 15 18 17.686 18 21",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})])],-1)),o("span",oo,a(((w=m(c).user)==null?void 0:w.email)||"用户"),1)]),v(m(A),{class:"logout-btn",quaternary:"",circle:"",onClick:M},{icon:h(()=>[...s[1]||(s[1]=[o("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[o("path",{d:"M9 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),o("path",{d:"M16 17L21 12L16 7",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),o("path",{d:"M21 12H9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1})])])]),o("div",to,[o("aside",eo,[o("nav",so,[(r(!0),i(F,null,P(y.value,n=>(r(),i("div",{key:n.key,class:D(["nav-item",{"nav-item--active":k.value===n.key}]),onClick:f=>b(n.key)},[o("div",ro,[(r(),g(C(n.icon)))]),o("div",io,[o("div",ao,a(n.label),1),o("div",lo,a(n.description),1)]),k.value===n.key?(r(),i("div",co)):G("",!0)],10,no))),128))])]),o("main",po,[o("div",uo,[v(u,null,{default:h(({Component:n,route:f})=>[v(N,{name:"page-fade",mode:"out-in"},{default:h(()=>[(r(),g(C(n),{key:f.path}))]),_:2},1024)]),_:1})])])]),o("footer",vo,[o("div",ho,[o("span",ko,"v"+a(p.value),1)])])])}}}),go=R(wo,[["__scopeId","data-v-d9fd6813"]]);export{go as default};