@ty_krystal/sei-ai 0.1.4 → 0.1.6
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 +698 -165
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +5 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +5 -0
- package/dist/commands/api-docs.d.ts +20 -0
- package/dist/commands/api-docs.js +22 -0
- package/dist/commands/call.d.ts +27 -0
- package/dist/commands/call.js +37 -0
- package/dist/commands/dict/add-category.d.ts +31 -0
- package/dist/commands/dict/add-category.js +44 -0
- package/dist/commands/dict/add-item.d.ts +32 -0
- package/dist/commands/dict/add-item.js +46 -0
- package/dist/commands/dict/list.d.ts +22 -0
- package/dist/commands/dict/list.js +26 -0
- package/dist/commands/init/base-data.d.ts +26 -0
- package/dist/commands/init/base-data.js +37 -0
- package/dist/commands/query-sql.d.ts +24 -0
- package/dist/commands/query-sql.js +28 -0
- package/dist/commands/query.d.ts +21 -0
- package/dist/commands/query.js +27 -0
- package/dist/commands/relogin.d.ts +17 -0
- package/dist/commands/relogin.js +15 -0
- package/dist/commands/save.d.ts +21 -0
- package/dist/commands/save.js +27 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -22361
- package/oclif.manifest.json +1302 -0
- package/package.json +65 -44
- package/config.example.json +0 -33
- package/dist/README.md +0 -232
- package/dist/config.example.json +0 -33
package/package.json
CHANGED
|
@@ -1,57 +1,78 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ty_krystal/sei-ai",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
"description": "SEI CLI generated with oclif",
|
|
4
|
+
"version": "0.1.6",
|
|
5
|
+
"author": "tanyu",
|
|
6
|
+
"bin": {
|
|
7
|
+
"sei-ai": "./bin/run.js"
|
|
8
|
+
},
|
|
9
|
+
"bugs": "https://github.com/tanyu/sei-ai/issues",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@oclif/core": "^4",
|
|
12
|
+
"@oclif/plugin-help": "^6",
|
|
13
|
+
"@oclif/plugin-plugins": "^5",
|
|
14
|
+
"@ty_krystal/sei-ai-core": "workspace:*"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@eslint/compat": "^1",
|
|
18
|
+
"@oclif/prettier-config": "^0.2.1",
|
|
19
|
+
"@oclif/test": "^4",
|
|
20
|
+
"@types/chai": "^4",
|
|
21
|
+
"@types/mocha": "^10",
|
|
22
|
+
"@types/node": "^18",
|
|
23
|
+
"chai": "^4",
|
|
24
|
+
"eslint": "^9",
|
|
25
|
+
"eslint-config-oclif": "^6",
|
|
26
|
+
"eslint-config-prettier": "^10",
|
|
27
|
+
"mocha": "^11",
|
|
28
|
+
"oclif": "^4",
|
|
29
|
+
"shx": "^0.3.4",
|
|
30
|
+
"ts-node": "^10",
|
|
31
|
+
"typescript": "^5"
|
|
32
|
+
},
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=18.0.0"
|
|
35
|
+
},
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"./bin",
|
|
41
|
+
"./dist",
|
|
42
|
+
"./oclif.manifest.json"
|
|
10
43
|
],
|
|
11
44
|
"homepage": "https://github.com/tanyu/sei-ai",
|
|
12
|
-
"
|
|
13
|
-
|
|
45
|
+
"keywords": ["oclif", "sei", "cli"],
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"main": "dist/index.js",
|
|
48
|
+
"type": "module",
|
|
49
|
+
"oclif": {
|
|
50
|
+
"bin": "sei-ai",
|
|
51
|
+
"dirname": "sei-ai",
|
|
52
|
+
"commands": "./dist/commands",
|
|
53
|
+
"plugins": [
|
|
54
|
+
"@oclif/plugin-help",
|
|
55
|
+
"@oclif/plugin-plugins"
|
|
56
|
+
],
|
|
57
|
+
"topicSeparator": ":"
|
|
14
58
|
},
|
|
15
59
|
"repository": {
|
|
16
60
|
"type": "git",
|
|
17
61
|
"url": "git+https://github.com/tanyu/sei-ai.git"
|
|
18
62
|
},
|
|
19
|
-
"license": "MIT",
|
|
20
|
-
"type": "module",
|
|
21
|
-
"files": [
|
|
22
|
-
"dist",
|
|
23
|
-
"README.md",
|
|
24
|
-
"config.example.json"
|
|
25
|
-
],
|
|
26
|
-
"bin": {
|
|
27
|
-
"sei-ai": "dist/index.js"
|
|
28
|
-
},
|
|
29
|
-
"main": "./dist/index.js",
|
|
30
|
-
"exports": {
|
|
31
|
-
".": {
|
|
32
|
-
"default": "./dist/index.js"
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
63
|
"scripts": {
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
64
|
+
"build": "pnpm --filter @ty_krystal/sei-ai-core build && shx rm -rf dist && tsc -b",
|
|
65
|
+
"dev": "node ./bin/dev.js",
|
|
66
|
+
"lint": "eslint",
|
|
67
|
+
"postpack": "shx rm -f oclif.manifest.json",
|
|
68
|
+
"posttest": "pnpm run lint",
|
|
69
|
+
"prepack": "oclif manifest && oclif readme",
|
|
70
|
+
"prepublishOnly": "pnpm run build",
|
|
71
|
+
"publish:npm": "npm publish --access public",
|
|
72
|
+
"start": "node ./bin/run.js",
|
|
43
73
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
44
|
-
"
|
|
74
|
+
"test": "pnpm --filter @ty_krystal/sei-ai-core typecheck && mocha --forbid-only \"test/**/*.test.ts\"",
|
|
75
|
+
"version": "oclif readme && git add README.md"
|
|
45
76
|
},
|
|
46
|
-
"
|
|
47
|
-
"node": "^22.18.0 || ^24.0.0"
|
|
48
|
-
},
|
|
49
|
-
"publishConfig": {
|
|
50
|
-
"access": "public"
|
|
51
|
-
},
|
|
52
|
-
"dependencies": {
|
|
53
|
-
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
54
|
-
"tsx": "^4.22.4",
|
|
55
|
-
"zod": "^3.25.76"
|
|
56
|
-
}
|
|
77
|
+
"types": "dist/index.d.ts"
|
|
57
78
|
}
|
package/config.example.json
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"baseUrl": "http://127.0.0.1:8081",
|
|
3
|
-
"auth": {
|
|
4
|
-
"mode": "ai-login",
|
|
5
|
-
"aiKeyEnv": "SEI_AI_LOGIN_KEY",
|
|
6
|
-
"roleEnv": "SEI_AI_LOGIN_ROLE"
|
|
7
|
-
},
|
|
8
|
-
"tools": {
|
|
9
|
-
"query": true,
|
|
10
|
-
"save": true,
|
|
11
|
-
"schema": true,
|
|
12
|
-
"querySql": false
|
|
13
|
-
},
|
|
14
|
-
"targets": {
|
|
15
|
-
"modules": {
|
|
16
|
-
"demo_order": {
|
|
17
|
-
"mainTable": "demo_order",
|
|
18
|
-
"query": {
|
|
19
|
-
"fields": ["_ID", "ORDER_NO", "STATUS", "AMOUNT"],
|
|
20
|
-
"defaultFields": ["_ID", "ORDER_NO", "STATUS"],
|
|
21
|
-
"allowAllFields": false
|
|
22
|
-
},
|
|
23
|
-
"save": {
|
|
24
|
-
"actions": ["add", "edit"],
|
|
25
|
-
"fields": ["STATUS", "MEMO"]
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
"tables": {},
|
|
30
|
-
"sources": {},
|
|
31
|
-
"views": {}
|
|
32
|
-
}
|
|
33
|
-
}
|
package/dist/README.md
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
# sei-ai
|
|
2
|
-
|
|
3
|
-
独立的 SEI MCP 服务,使用 `@modelcontextprotocol/sdk` 运行。
|
|
4
|
-
支持 `stdio`、`streamable-http` 和开发者 CLI 启动,默认只开放受控的低代码查询、保存和字段元数据工具,`querySql` 默认关闭。
|
|
5
|
-
构建改为使用 Vite 进行 Node 侧打包,产物输出到 `dist/`。
|
|
6
|
-
|
|
7
|
-
## 安装
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install -g sei-ai
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## 命令
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
pnpm -F sei-ai-mcp dev -- --config ./apps/sei-ai-mcp/config.example.json
|
|
17
|
-
pnpm -F sei-ai-mcp run start:stdio
|
|
18
|
-
pnpm -F sei-ai-mcp run start:http
|
|
19
|
-
pnpm -F sei-ai-mcp run build
|
|
20
|
-
pnpm -F sei-ai-mcp run test
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
打包后 CLI:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
sei-ai help
|
|
27
|
-
sei-ai stdio --config ./config.example.json
|
|
28
|
-
sei-ai streamable-http --host 0.0.0.0 --port 3000 --path /mcp --config ./config.example.json
|
|
29
|
-
sei-ai cli api-docs --format markdown
|
|
30
|
-
sei-ai cli query-sql "SELECT _UID,_NAME FROM _SYS_USER"
|
|
31
|
-
sei-ai cli call POST /api/sei/data/removeAllCache --json '{}'
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## 开发者 CLI
|
|
35
|
-
|
|
36
|
-
CLI 是新增的开发者命令面,不会改变现有 MCP server 的启动方式、tool 列表或 Host 集成配置。
|
|
37
|
-
|
|
38
|
-
首版支持:
|
|
39
|
-
|
|
40
|
-
- `call`
|
|
41
|
-
- `query`
|
|
42
|
-
- `save`
|
|
43
|
-
- `query-sql`
|
|
44
|
-
- `api-docs`
|
|
45
|
-
|
|
46
|
-
命令示例:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
sei-ai cli query --json '{"head":{"module":"sys_user"},"option":{"fields":"_UID,_NAME"}}'
|
|
50
|
-
sei-ai cli save --json '{"head":{"module":"sys_user"},"data":[{"action":"edit","rows":[{"keyVal":"admin","row":{"_NAME":"管理员"}}]}]}'
|
|
51
|
-
sei-ai cli query-sql "SELECT _UID,_NAME FROM _SYS_USER" --page 1 --size 20
|
|
52
|
-
sei-ai cli api-docs --keyword login --format json
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
常用认证参数:
|
|
56
|
-
|
|
57
|
-
- `--base-url`
|
|
58
|
-
- `--ai-key`
|
|
59
|
-
- `--role`
|
|
60
|
-
- `--account`
|
|
61
|
-
- `--account-project`
|
|
62
|
-
- `--account-checkcode`
|
|
63
|
-
- `--token`
|
|
64
|
-
- `--timeout`
|
|
65
|
-
|
|
66
|
-
环境变量加载规则:
|
|
67
|
-
|
|
68
|
-
- 启动时会自动读取当前工作目录下的 `.env.local` 和 `.env`
|
|
69
|
-
- 加载顺序为 `.env.local` 再 `.env`
|
|
70
|
-
- 已经存在的进程环境变量不会被 `.env` 覆盖
|
|
71
|
-
- 显式 CLI 参数仍然优先于环境变量
|
|
72
|
-
|
|
73
|
-
载荷输入支持:
|
|
74
|
-
|
|
75
|
-
- `--json '<payload>'`
|
|
76
|
-
- `--file ./payload.json`
|
|
77
|
-
- `--stdin`
|
|
78
|
-
|
|
79
|
-
当前仍未覆盖:
|
|
80
|
-
|
|
81
|
-
- `init-base-data`
|
|
82
|
-
- 字典相关命令
|
|
83
|
-
- DDL/DML
|
|
84
|
-
- 文件上传下载
|
|
85
|
-
|
|
86
|
-
HTTP 模式:
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
pnpm -F sei-ai-mcp dev -- --transport streamable-http --host 0.0.0.0 --port 3000 --path /mcp --config ./apps/sei-ai-mcp/config.example.json
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
Docker Compose:
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
docker compose -f apps/sei-ai-mcp/docker-compose.yml up -d --build
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
容器默认暴露 `http://127.0.0.1:3719/mcp`,并通过 `host.docker.internal` 访问宿主机上的 SEI 后端。
|
|
99
|
-
如果后端也在 compose 中运行,把 `SEI_BASE_URL` 改成对应服务名即可。
|
|
100
|
-
|
|
101
|
-
## 配置
|
|
102
|
-
|
|
103
|
-
支持的配置项:
|
|
104
|
-
|
|
105
|
-
- `baseUrl`
|
|
106
|
-
- `auth.mode`: `ai-login` 或 `token`
|
|
107
|
-
- `auth.token`
|
|
108
|
-
- `auth.aiKey`
|
|
109
|
-
- `auth.account`
|
|
110
|
-
- `auth.role`
|
|
111
|
-
- `tools.query`
|
|
112
|
-
- `tools.save`
|
|
113
|
-
- `tools.schema`
|
|
114
|
-
- `tools.querySql`
|
|
115
|
-
- `targets.modules`
|
|
116
|
-
- `targets.tables`
|
|
117
|
-
- `targets.sources`
|
|
118
|
-
- `targets.views`
|
|
119
|
-
|
|
120
|
-
敏感值可通过环境变量注入:
|
|
121
|
-
|
|
122
|
-
- `SEI_BASE_URL`
|
|
123
|
-
- `SEI_AI_LOGIN_KEY`
|
|
124
|
-
- `SEI_AI_LOGIN_ACCOUNT`
|
|
125
|
-
- `SEI_AI_LOGIN_ROLE`
|
|
126
|
-
- `SEI_TOKEN`
|
|
127
|
-
- `SEI_MCP_TRANSPORT`
|
|
128
|
-
- `SEI_MCP_HOST`
|
|
129
|
-
- `SEI_MCP_PORT`
|
|
130
|
-
- `SEI_MCP_PATH`
|
|
131
|
-
- `SEI_MCP_HTTP_JSON_RESPONSE`
|
|
132
|
-
|
|
133
|
-
例如可以在项目目录写:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
SEI_BASE_URL=http://127.0.0.1:8081
|
|
137
|
-
SEI_AI_LOGIN_KEY=dev-ai-secret
|
|
138
|
-
SEI_AI_LOGIN_ROLE=admin
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
## 权限模型
|
|
142
|
-
|
|
143
|
-
- 未配置目标时默认拒绝。
|
|
144
|
-
- 查询字段必须命中白名单。
|
|
145
|
-
- 保存字段必须命中白名单。
|
|
146
|
-
- `querySql` 默认关闭,只允许单条 `SELECT/WITH`。
|
|
147
|
-
- stdio 日志只写 `stderr`,不污染 MCP 协议输出。
|
|
148
|
-
|
|
149
|
-
注意:
|
|
150
|
-
|
|
151
|
-
- 上面的权限模型只约束 MCP tool 面。
|
|
152
|
-
- 开发者 CLI 直接调用 SEI HTTP 接口,不走 MCP 白名单过滤,因此它是调试/开发入口,不是给模型暴露的 tool 面。
|
|
153
|
-
|
|
154
|
-
## 工具
|
|
155
|
-
|
|
156
|
-
- `sei_query`
|
|
157
|
-
- `sei_save`
|
|
158
|
-
- `sei_schema`
|
|
159
|
-
- `sei_query_sql`(默认关闭)
|
|
160
|
-
|
|
161
|
-
## MCP Host
|
|
162
|
-
|
|
163
|
-
可直接作为 stdio MCP server 启动,再由上层 Host 注册。
|
|
164
|
-
|
|
165
|
-
stdio Host 配置示例:
|
|
166
|
-
|
|
167
|
-
```json
|
|
168
|
-
{
|
|
169
|
-
"mcpServers": {
|
|
170
|
-
"sei-ai-mcp": {
|
|
171
|
-
"command": "sei-ai",
|
|
172
|
-
"args": [
|
|
173
|
-
"stdio",
|
|
174
|
-
"--config",
|
|
175
|
-
"/abs/path/config.dev.json"
|
|
176
|
-
]
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
HTTP 模式可直接挂载到容器端口,Host 地址示例:
|
|
183
|
-
|
|
184
|
-
```json
|
|
185
|
-
{
|
|
186
|
-
"mcpServers": {
|
|
187
|
-
"sei-ai-mcp": {
|
|
188
|
-
"url": "http://127.0.0.1:3719/mcp"
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
## Spring AI Java 接入
|
|
195
|
-
|
|
196
|
-
如果 `apps/backend` 通过 Spring AI MCP client 接入,直接使用 `streamable-http`:
|
|
197
|
-
|
|
198
|
-
```yaml
|
|
199
|
-
spring:
|
|
200
|
-
ai:
|
|
201
|
-
mcp:
|
|
202
|
-
client:
|
|
203
|
-
enabled: true
|
|
204
|
-
type: SYNC
|
|
205
|
-
request-timeout: 30s
|
|
206
|
-
toolcallback:
|
|
207
|
-
enabled: true
|
|
208
|
-
streamable-http:
|
|
209
|
-
connections:
|
|
210
|
-
sei-ai-mcp:
|
|
211
|
-
url: http://127.0.0.1:3719
|
|
212
|
-
endpoint: /mcp
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
如果后端默认直接访问宿主机暴露端口,可这样配置:
|
|
216
|
-
|
|
217
|
-
```bash
|
|
218
|
-
SEI_AI_MCP_HTTP_URL=http://127.0.0.1:3719
|
|
219
|
-
SEI_AI_MCP_HTTP_ENDPOINT=/mcp
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
如果是宿主机或外部服务直连容器暴露端口,则访问地址为:
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
http://127.0.0.1:3719/mcp
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
npm version patch --no-git-tag-version
|
|
231
|
-
pnpm run build
|
|
232
|
-
npm publish --access public --cache /tmp/sei-ai-npm-cache
|
package/dist/config.example.json
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"baseUrl": "http://127.0.0.1:8081",
|
|
3
|
-
"auth": {
|
|
4
|
-
"mode": "ai-login",
|
|
5
|
-
"aiKeyEnv": "SEI_AI_LOGIN_KEY",
|
|
6
|
-
"roleEnv": "SEI_AI_LOGIN_ROLE"
|
|
7
|
-
},
|
|
8
|
-
"tools": {
|
|
9
|
-
"query": true,
|
|
10
|
-
"save": true,
|
|
11
|
-
"schema": true,
|
|
12
|
-
"querySql": false
|
|
13
|
-
},
|
|
14
|
-
"targets": {
|
|
15
|
-
"modules": {
|
|
16
|
-
"demo_order": {
|
|
17
|
-
"mainTable": "demo_order",
|
|
18
|
-
"query": {
|
|
19
|
-
"fields": ["_ID", "ORDER_NO", "STATUS", "AMOUNT"],
|
|
20
|
-
"defaultFields": ["_ID", "ORDER_NO", "STATUS"],
|
|
21
|
-
"allowAllFields": false
|
|
22
|
-
},
|
|
23
|
-
"save": {
|
|
24
|
-
"actions": ["add", "edit"],
|
|
25
|
-
"fields": ["STATUS", "MEMO"]
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
"tables": {},
|
|
30
|
-
"sources": {},
|
|
31
|
-
"views": {}
|
|
32
|
-
}
|
|
33
|
-
}
|