flex-mcp 1.0.0 → 1.0.2

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.
package/README.md CHANGED
@@ -2,49 +2,56 @@
2
2
 
3
3
  可运营 MCP Node 服务 - 支持多用户管理、MCP 协议、脚本执行。
4
4
 
5
- ## 安装
5
+ ## 📦 安装
6
6
 
7
7
  ```bash
8
- npm install flex-mcp
8
+ npm install -g flex-mcp
9
+ ```
10
+
11
+ 或使用 npx(无需安装):
12
+
13
+ ```bash
14
+ npx flex-mcp <command>
9
15
  ```
10
16
 
11
- ## 快速开始
17
+ ## 🚀 快速开始
12
18
 
13
19
  ### 一键部署(推荐)
14
20
 
15
21
  ```bash
16
- # 全局安装
17
- npm install -g flex-mcp
18
-
19
- # 一键部署(初始化 + 启动)
20
- meta-mcp deploy
22
+ # 全局安装后
23
+ flex-mcp deploy
21
24
  ```
22
25
 
23
- ### 命令行使用
26
+ 这会自动:
27
+ - ✅ 创建 `.env` 配置文件
28
+ - ✅ 初始化数据库
29
+ - ✅ 启动服务器
30
+
31
+ ### 分步操作
24
32
 
25
33
  ```bash
26
- # 初始化项目(创建 .env 文件,初始化数据库)
27
- meta-mcp init
34
+ # 1. 初始化项目(创建 .env 文件,初始化数据库)
35
+ flex-mcp init
28
36
 
29
- # 启动服务器
30
- meta-mcp start
37
+ # 2. 启动服务器
38
+ flex-mcp start
31
39
 
32
- # 查看帮助
33
- meta-mcp help
40
+ # 3. 查看帮助
41
+ flex-mcp help
34
42
  ```
35
43
 
36
- ### 使用 npx(无需安装)
44
+ ## 🌐 访问运营页面
37
45
 
38
- ```bash
39
- # 一键部署
40
- npx flex-mcp deploy
46
+ 服务器启动后,在浏览器中访问:
41
47
 
42
- # 初始化
43
- npx flex-mcp init
48
+ - **管理员登录页面(运营页面)**: `http://localhost:3000/admin/login`
49
+ - 默认账号:`admin` / `123456`
50
+ - **用户登录页面**: `http://localhost:3000/user/login`
51
+ - **API 端点**: `http://localhost:3000/api`
52
+ - **健康检查**: `http://localhost:3000/health`
44
53
 
45
- # 启动
46
- npx flex-mcp start
47
- ```
54
+ > 💡 **提示**: 如果修改了端口(如 `PORT=5666`),请访问 `http://localhost:5666/admin/login`
48
55
 
49
56
  ### 在代码中使用
50
57
 
@@ -57,23 +64,47 @@ await startServer({
57
64
  });
58
65
  ```
59
66
 
60
- ## 环境变量
67
+ ## ⚙️ 配置
68
+
69
+ ### 环境变量
70
+
71
+ 服务器启动后会在当前目录创建 `.env` 文件,你可以修改以下配置:
72
+
73
+ ```env
74
+ # 服务器配置
75
+ PORT=3000 # 服务器端口(默认: 3000)
76
+ HOST=0.0.0.0 # 服务器主机(默认: 0.0.0.0)
77
+
78
+ # 超级管理员账号
79
+ ADMIN_USERNAME=admin # 管理员用户名(默认: admin)
80
+ ADMIN_PASSWORD=123456 # 管理员密码(默认: 123456)
61
81
 
62
- - `PORT`: 服务器端口(默认: 3000)
63
- - `HOST`: 服务器主机(默认: 0.0.0.0
64
- - `DATABASE_URL`: 数据库路径(默认: ./data/database.sqlite)
65
- - `JWT_SECRET`: JWT 密钥(生产环境请修改)
66
- - `ADMIN_USERNAME`: 超级管理员用户名(默认: admin)
67
- - `ADMIN_PASSWORD`: 超级管理员密码(默认: 123456)
68
- - `CORS_ORIGIN`: CORS 来源(默认: *)
82
+ # 数据目录(可选)
83
+ DATA_DIR=./.data # 数据目录(默认: ./.data
69
84
 
70
- ### 使用统计(可选)
85
+ # 数据库路径(可选)
86
+ DATABASE_URL=./.data/database.sqlite
71
87
 
72
- - `DISABLE_TELEMETRY`: 禁用统计(设置为 `true` 或 `1`)
88
+ # JWT 密钥(可选,生产环境请修改)
89
+ JWT_SECRET=your-secret-key-here
73
90
 
74
- 统计功能默认启用,用于了解工具使用情况。如需禁用,请设置 `DISABLE_TELEMETRY=true`。
91
+ # CORS 配置(可选)
92
+ CORS_ORIGIN=* # CORS 来源(默认: *)
75
93
 
76
- 详细说明请参考 [TELEMETRY.md](./TELEMETRY.md)
94
+ # 禁用统计(可选)
95
+ DISABLE_TELEMETRY=false # 禁用使用统计(默认: false)
96
+ ```
97
+
98
+ ### 修改端口
99
+
100
+ ```bash
101
+ # 方式 1: 修改 .env 文件中的 PORT
102
+ PORT=5666 flex-mcp start
103
+
104
+ # 方式 2: 使用环境变量
105
+ export PORT=5666
106
+ flex-mcp start
107
+ ```
77
108
 
78
109
  ## 功能特性
79
110
 
@@ -84,9 +115,20 @@ await startServer({
84
115
  - ✅ 变量系统
85
116
  - ✅ REST API
86
117
 
87
- ## 连接 Cursor
118
+ ## 🔌 连接 Cursor
119
+
120
+ ### 1. 创建 MCP 用户
121
+
122
+ 1. 访问管理员页面:`http://localhost:3000/admin/login`
123
+ 2. 登录后进入"用户管理"
124
+ 3. 创建新用户,记录邮箱和 API Key
125
+
126
+ ### 2. 配置 Cursor
88
127
 
89
- 在 Cursor 的 MCP 配置中添加:
128
+ 在 Cursor 的 MCP 配置文件中添加:
129
+
130
+ **macOS/Linux:** `~/.cursor/mcp.json`
131
+ **Windows:** `%APPDATA%\Cursor\mcp.json`
90
132
 
91
133
  ```json
92
134
  {
@@ -102,49 +144,134 @@ await startServer({
102
144
  }
103
145
  ```
104
146
 
105
- ## API 文档
147
+ **注意:**
148
+ - 将 `YOUR_EMAIL` 替换为你的用户邮箱
149
+ - 将 `YOUR_API_KEY` 替换为你的 API Key
150
+ - 如果服务器运行在其他端口,修改 URL 中的端口号
151
+
152
+ ### 3. 重启 Cursor
153
+
154
+ 配置完成后,重启 Cursor 使配置生效。
155
+
156
+ ## 📊 功能使用
157
+
158
+ ### 管理员功能
159
+
160
+ 登录管理员页面后,你可以:
161
+
162
+ 1. **用户管理**
163
+ - 创建、编辑、删除用户
164
+ - 查看用户 API Key
165
+ - 重置用户 API Key
166
+
167
+ 2. **配置管理**
168
+ - 创建 MCP 配置
169
+ - 配置 MCP 组件(NPM/URL/stdio)
170
+ - 管理变量(支持密钥占位符)
171
+ - 导入/导出配置
172
+
173
+ 3. **系统监控**
174
+ - 查看系统状态
175
+ - 查看使用统计
176
+
177
+ ### 用户功能
178
+
179
+ 登录用户页面后,你可以:
180
+
181
+ 1. **表管理**
182
+ - 创建、编辑、删除表
183
+ - 定义表结构(列、类型、约束)
184
+ - 管理表数据
185
+
186
+ 2. **脚本执行**
187
+ - 编写和执行 TypeScript 脚本
188
+ - 使用 MCP 工具
189
+ - 访问表数据
190
+ - 使用变量
191
+
192
+ 3. **提示词管理**
193
+ - 创建和管理提示词模板
194
+ - 使用变量占位符
195
+
196
+ ## 📝 API 文档
106
197
 
107
198
  ### 认证
108
199
 
109
200
  #### 用户登录
110
- ```http
111
- POST /api/auth/user/login
112
- Content-Type: application/json
113
201
 
114
- {
115
- "email": "user@example.com",
116
- "apiKey": "your-api-key"
117
- }
202
+ ```bash
203
+ curl -X POST http://localhost:3000/api/auth/user/login \
204
+ -H "Content-Type: application/json" \
205
+ -d '{
206
+ "email": "user@example.com",
207
+ "apiKey": "your-api-key"
208
+ }'
118
209
  ```
119
210
 
120
- #### 超级管理员登录
121
- ```http
122
- POST /api/auth/admin/login
123
- Content-Type: application/json
211
+ #### 管理员登录
124
212
 
125
- {
126
- "username": "admin",
127
- "password": "123456"
128
- }
213
+ ```bash
214
+ curl -X POST http://localhost:3000/api/auth/admin/login \
215
+ -H "Content-Type: application/json" \
216
+ -d '{
217
+ "username": "admin",
218
+ "password": "123456"
219
+ }'
129
220
  ```
130
221
 
131
222
  ### 用户管理
132
223
 
133
- ```http
134
- GET /api/users
135
- Authorization: Bearer <token>
224
+ ```bash
225
+ # 获取用户列表(需要管理员权限)
226
+ curl http://localhost:3000/api/users \
227
+ -H "Authorization: Bearer YOUR_TOKEN"
136
228
  ```
137
229
 
138
230
  ### 配置管理
139
231
 
140
- ```http
141
- GET /api/configs
142
- POST /api/configs
143
- PUT /api/configs/:id
144
- DELETE /api/configs/:id
145
- Authorization: Bearer <token>
232
+ ```bash
233
+ # 获取配置列表
234
+ curl http://localhost:3000/api/configs \
235
+ -H "Authorization: Bearer YOUR_TOKEN"
236
+ ```
237
+
238
+ ## 💻 在代码中使用
239
+
240
+ ```typescript
241
+ import { startServer } from 'flex-mcp';
242
+
243
+ await startServer({
244
+ port: 3000,
245
+ host: '0.0.0.0',
246
+ });
146
247
  ```
147
248
 
249
+ ## ❓ 常见问题
250
+
251
+ ### Q: 如何修改管理员密码?
252
+
253
+ A: 修改 `.env` 文件中的 `ADMIN_PASSWORD` 环境变量,然后重启服务器。
254
+
255
+ ### Q: 如何修改端口?
256
+
257
+ A: 修改 `.env` 文件中的 `PORT` 环境变量,或使用环境变量:`PORT=5666 flex-mcp start`
258
+
259
+ ### Q: 数据存储在哪里?
260
+
261
+ A: 默认存储在 `./.data` 目录下,可以通过 `DATA_DIR` 环境变量修改。
262
+
263
+ ### Q: 如何备份数据?
264
+
265
+ A: 备份 `./.data` 目录下的 `database.sqlite` 文件即可。
266
+
267
+ ### Q: 如何重置数据库?
268
+
269
+ A: 删除 `./.data` 目录下的 `database.sqlite` 文件,然后重新运行 `flex-mcp init`。
270
+
271
+ ## 📚 更多文档
272
+
273
+ 详细使用指南请参考:[USAGE.md](../../USAGE.md)
274
+
148
275
  ## 许可证
149
276
 
150
277
  MIT
package/dist/cli.js CHANGED
@@ -64,8 +64,8 @@ async function init() {
64
64
  console.log('\n✨ 初始化完成!');
65
65
  console.log('\n下一步:');
66
66
  console.log(' 1. 编辑 .env 文件配置环境变量(可选)');
67
- console.log(' 2. 运行 "meta-mcp start" 启动服务');
68
- console.log(' 或运行 "meta-mcp deploy" 一键部署');
67
+ console.log(' 2. 运行 "flex-mcp start" 启动服务');
68
+ console.log(' 或运行 "flex-mcp deploy" 一键部署');
69
69
  }
70
70
  /**
71
71
  * 启动服务器
@@ -216,7 +216,7 @@ function showHelp() {
216
216
  Meta MCP Server - 可运营 MCP Node 服务
217
217
 
218
218
  用法:
219
- meta-mcp <command> [options]
219
+ flex-mcp <command> [options]
220
220
 
221
221
  命令:
222
222
  init 初始化项目(创建 .env 文件,初始化数据库)
@@ -225,9 +225,9 @@ Meta MCP Server - 可运营 MCP Node 服务
225
225
  help 显示帮助信息
226
226
 
227
227
  示例:
228
- meta-mcp init # 初始化项目
229
- meta-mcp start # 启动服务器
230
- meta-mcp deploy # 一键部署
228
+ flex-mcp init # 初始化项目
229
+ flex-mcp start # 启动服务器
230
+ flex-mcp deploy # 一键部署
231
231
 
232
232
  环境变量:
233
233
  通过 .env 文件配置,或使用环境变量:
@@ -237,7 +237,7 @@ Meta MCP Server - 可运营 MCP Node 服务
237
237
  - ADMIN_PASSWORD: 超级管理员密码(默认: 123456)
238
238
  - DATA_DIR: 数据目录(默认: ./.data)
239
239
 
240
- 更多信息: https://github.com/LeeLejia/meta-mcp
240
+ 更多信息: https://github.com/LeeLejia/flex-mcp
241
241
  `);
242
242
  }
243
243
  // 主函数
@@ -264,7 +264,7 @@ async function main() {
264
264
  }
265
265
  else {
266
266
  console.error(`❌ 未知命令: ${command}`);
267
- console.log('运行 "meta-mcp help" 查看帮助信息');
267
+ console.log('运行 "flex-mcp help" 查看帮助信息');
268
268
  process.exit(1);
269
269
  }
270
270
  }
@@ -277,10 +277,10 @@ async function main() {
277
277
  // 如果直接运行此文件,执行主函数
278
278
  // 检查是否是直接运行(不是被导入)
279
279
  // 在 ESM 模块中,如果文件被直接执行,import.meta.url 会匹配 process.argv[1]
280
- // 或者通过 npm bin 链接运行时,argv[1] 会包含 cli.js 或 meta-mcp
280
+ // 或者通过 npm bin 链接运行时,argv[1] 会包含 cli.js 或 flex-mcp
281
281
  const isMainModule = import.meta.url === `file://${process.argv[1]}` ||
282
282
  process.argv[1]?.includes('cli.js') ||
283
- process.argv[1]?.includes('meta-mcp') ||
283
+ process.argv[1]?.includes('flex-mcp') ||
284
284
  // 如果没有任何参数且是直接运行,也执行
285
285
  (process.argv.length === 2 && import.meta.url.endsWith('cli.js'));
286
286
  // 总是执行主函数(因为这是 CLI 入口文件)
@@ -1 +1 @@
1
- {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAoC9C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBpD"}
1
+ {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAsC9C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBpD"}
package/dist/static.js CHANGED
@@ -15,8 +15,10 @@ export function getWebDistPath() {
15
15
  // 尝试多个可能的路径(按优先级)
16
16
  const possiblePaths = [
17
17
  // npm 包中的路径(发布后)- 最优先
18
- path.join(__dirname, '../web'), // dist/web (npm 包中,web 文件直接在这里)
19
- path.join(__dirname, '../web/dist'), // dist/web/dist (如果复制时保留了 dist 目录)
18
+ // __dirname 在编译后是 dist/,所以 dist/web 应该是 path.join(__dirname, 'web')
19
+ path.join(__dirname, 'web'), // dist/web (npm 包中,web 文件在这里)
20
+ path.join(__dirname, '../web'), // web (如果 static.js 不在 dist 下)
21
+ path.join(__dirname, '../web/dist'), // web/dist (如果复制时保留了 dist 目录)
20
22
  // 开发环境路径
21
23
  path.join(__dirname, '../../web/dist'), // packages/server/dist/../../web/dist
22
24
  path.join(__dirname, '../../../web/dist'), // 从 dist/static.js: dist/../../web/dist
@@ -1 +1 @@
1
- {"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
@@ -69,7 +69,7 @@ class CustomEndpointBackend {
69
69
  method: 'POST',
70
70
  headers: {
71
71
  'Content-Type': 'application/json',
72
- 'User-Agent': `meta-mcp/${metadata.version}`,
72
+ 'User-Agent': `flex-mcp/${metadata.version}`,
73
73
  },
74
74
  body: JSON.stringify({
75
75
  event,
@@ -0,0 +1 @@
1
+ import{d as e,c as o,o as a}from"./index-Coivokd4.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};
@@ -0,0 +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,R as T,K as E,e as I,t as b,W as k,D as V,L as D,o as r,h as L,O,P as x}from"./index-Coivokd4.js";import{u as W,M as G,C as K,I as R}from"./InitScriptEditor-CyQQvKeL.js";import{_ as q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const A={class:"configs-page"},F={style:{position:"absolute",width:"0",height:"0"}},J={class:"configs-container"},Q={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=W(),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",J,[e("main",Q,[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(E),{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]=I('<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(V),{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(G,{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(R,{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};