bt-panel-mcp-server 0.1.0

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.
Files changed (51) hide show
  1. package/README.md +443 -0
  2. package/dist/bt-client.d.ts +124 -0
  3. package/dist/bt-client.d.ts.map +1 -0
  4. package/dist/bt-client.js +291 -0
  5. package/dist/bt-client.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +207 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/tools/get-app-logs.d.ts +20 -0
  11. package/dist/tools/get-app-logs.d.ts.map +1 -0
  12. package/dist/tools/get-app-logs.js +141 -0
  13. package/dist/tools/get-app-logs.js.map +1 -0
  14. package/dist/tools/get-nginx-logs.d.ts +20 -0
  15. package/dist/tools/get-nginx-logs.d.ts.map +1 -0
  16. package/dist/tools/get-nginx-logs.js +126 -0
  17. package/dist/tools/get-nginx-logs.js.map +1 -0
  18. package/dist/tools/get-panel-logs.d.ts +11 -0
  19. package/dist/tools/get-panel-logs.d.ts.map +1 -0
  20. package/dist/tools/get-panel-logs.js +26 -0
  21. package/dist/tools/get-panel-logs.js.map +1 -0
  22. package/dist/tools/get-system-status.d.ts +5 -0
  23. package/dist/tools/get-system-status.d.ts.map +1 -0
  24. package/dist/tools/get-system-status.js +40 -0
  25. package/dist/tools/get-system-status.js.map +1 -0
  26. package/dist/tools/list-sites.d.ts +11 -0
  27. package/dist/tools/list-sites.d.ts.map +1 -0
  28. package/dist/tools/list-sites.js +18 -0
  29. package/dist/tools/list-sites.js.map +1 -0
  30. package/dist/tools/manage-backups.d.ts +17 -0
  31. package/dist/tools/manage-backups.d.ts.map +1 -0
  32. package/dist/tools/manage-backups.js +36 -0
  33. package/dist/tools/manage-backups.js.map +1 -0
  34. package/dist/tools/manage-domains.d.ts +20 -0
  35. package/dist/tools/manage-domains.d.ts.map +1 -0
  36. package/dist/tools/manage-domains.js +39 -0
  37. package/dist/tools/manage-domains.js.map +1 -0
  38. package/dist/tools/manage-nginx-config.d.ts +29 -0
  39. package/dist/tools/manage-nginx-config.d.ts.map +1 -0
  40. package/dist/tools/manage-nginx-config.js +38 -0
  41. package/dist/tools/manage-nginx-config.js.map +1 -0
  42. package/dist/tools/manage-sites.d.ts +41 -0
  43. package/dist/tools/manage-sites.d.ts.map +1 -0
  44. package/dist/tools/manage-sites.js +100 -0
  45. package/dist/tools/manage-sites.js.map +1 -0
  46. package/dist/tools/read-file.d.ts +14 -0
  47. package/dist/tools/read-file.d.ts.map +1 -0
  48. package/dist/tools/read-file.js +26 -0
  49. package/dist/tools/read-file.js.map +1 -0
  50. package/lxfs.jpg +0 -0
  51. package/package.json +51 -0
package/README.md ADDED
@@ -0,0 +1,443 @@
1
+ # bt-mcp
2
+
3
+ 宝塔面板(BT Panel)MCP Server,让任意支持 MCP 协议的 AI 助手直接用自然语言查询服务器日志、管理网站、查看系统状态,不用再手动登录面板。
4
+
5
+ 默认 **只读模式**,设置 `BT_MODE=full` 可开启全量管理工具。
6
+
7
+ ---
8
+
9
+ ## 这能做什么?
10
+
11
+ 在任意支持 MCP 协议的 AI 工具(Cursor、Claude Desktop、Windsurf、Cline、Cherry Studio 等)的对话里直接说:
12
+
13
+ **查询日志 & 监控**
14
+ > "帮我看看 example.com 最近的 Nginx 错误日志"
15
+ >
16
+ > "查一下 shop.com 的 Laravel 日志有没有报错"
17
+ >
18
+ > "服务器现在 CPU 和内存使用情况怎么样?"
19
+
20
+ **一键建站部署**(需要 `BT_MODE=full`)
21
+ > "帮我生成一个小龙虾餐厅落地页,暗红色主题,部署到 claw.example.com,完成后给我访问地址"
22
+ >
23
+ > "把刚才生成的活动报名 HTML 直接部署到服务器,用 IP 访问就行"
24
+ >
25
+ > "把 example.com 首页的联系电话改成 138xxxxxxxx,直接更新到服务器"
26
+
27
+ **网站 & 域名管理**(需要 `BT_MODE=full`)
28
+ > "帮我给 example.com 备份一下"
29
+ >
30
+ > "给 example.com 绑定一个新域名 www.example.com"
31
+ >
32
+ > "停用 test.example.com 这个测试站"
33
+
34
+ ---
35
+
36
+ ## 快速开始
37
+
38
+ ### 第一步:开启宝塔面板 API
39
+
40
+ 1. 登录宝塔面板 → 左侧菜单「面板设置」→「API 接口」
41
+ 2. 开启 API,复制「接口密钥」(API Key)
42
+ 3. 在 IP 白名单中添加你的本机 IP(必须,否则请求会被拒绝)
43
+ 4. 记下面板地址,如 `http://你的服务器IP:8888`
44
+
45
+ > 如果面板开启了「安全入口」,地址需要带上安全路径,如 `https://IP:端口/安全路径`
46
+
47
+ ### 第二步:配置 MCP
48
+
49
+ 各 AI 工具的配置文件路径不同,找到对应的文件编辑即可:
50
+
51
+ | AI 工具 | 系统 | 配置文件路径 |
52
+ |---------|------|-------------|
53
+ | Cursor | Windows | `%USERPROFILE%\.cursor\mcp.json` |
54
+ | Cursor | macOS / Linux | `~/.cursor/mcp.json` |
55
+ | Claude Desktop | Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
56
+ | Claude Desktop | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
57
+ | Windsurf | Windows | `%USERPROFILE%\.codeium\windsurf\mcp_config.json` |
58
+ | Windsurf | macOS | `~/.codeium/windsurf/mcp_config.json` |
59
+ | Cherry Studio | — | 设置 → MCP 服务器 → 添加 |
60
+ | Cline / Roo Code | — | 插件设置 → MCP Servers |
61
+ | 其他工具 | — | 参考对应工具文档中"MCP Server"配置说明 |
62
+
63
+ **推荐:npx 方式(无需手动下载,始终使用最新版)**
64
+
65
+ ```json
66
+ {
67
+ "mcpServers": {
68
+ "bt-panel": {
69
+ "command": "npx",
70
+ "args": ["-y", "bt-panel-mcp-server"],
71
+ "env": {
72
+ "BT_PANEL_URL": "http://你的服务器IP:8888",
73
+ "BT_API_KEY": "你的API密钥",
74
+ "BT_MODE": "readonly"
75
+ }
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
81
+ **本地方式(已克隆源码时使用)**
82
+
83
+ ```json
84
+ {
85
+ "mcpServers": {
86
+ "bt-panel": {
87
+ "command": "node",
88
+ "args": ["本地路径/bt-panel-mcp-server/dist/index.js"],
89
+ "env": {
90
+ "BT_PANEL_URL": "http://你的服务器IP:8888",
91
+ "BT_API_KEY": "你的API密钥",
92
+ "BT_MODE": "readonly"
93
+ }
94
+ }
95
+ }
96
+ }
97
+ ```
98
+
99
+ **替换以下内容:**
100
+ - `http://你的服务器IP:8888` → 你的宝塔面板地址
101
+ - `你的API密钥` → 第一步复制的接口密钥
102
+ - `BT_MODE` → `readonly`(只读,默认)或 `full`(全量管理,含写操作)
103
+
104
+ ### 第三步:重启 AI 工具
105
+
106
+ 完全退出并重新打开你的 AI 工具,然后测试:
107
+
108
+ ```
109
+ 列出宝塔面板所有网站
110
+ ```
111
+
112
+ ---
113
+
114
+ ## 环境变量
115
+
116
+ | 变量名 | 必填 | 默认值 | 说明 |
117
+ |--------|------|--------|------|
118
+ | `BT_PANEL_URL` | ✅ | — | 宝塔面板地址,如 `http://192.168.1.100:8888`,支持 HTTPS 和安全入口路径 |
119
+ | `BT_API_KEY` | ✅ | — | 宝塔面板 API 接口密钥 |
120
+ | `BT_MODE` | 否 | `readonly` | 工具集模式:`readonly` 只读安全模式 / `full` 全量管理模式(含写操作) |
121
+
122
+ ---
123
+
124
+ ## 工具模式说明
125
+
126
+ ### readonly 模式(默认,安全)
127
+
128
+ 只包含查询和读取工具,AI 无法对服务器做任何修改:
129
+
130
+ | 工具 | 说明 |
131
+ |------|------|
132
+ | `list_sites` | 列出所有网站 |
133
+ | `get_nginx_logs` | 读取 Nginx 访问/错误日志(自动探测路径) |
134
+ | `get_app_logs` | 读取应用层业务日志(自动探测框架路径) |
135
+ | `get_panel_logs` | 读取面板操作日志 |
136
+ | `get_system_status` | 查询 CPU/内存/磁盘/网络实时状态 |
137
+ | `read_file` | 读取服务器任意文件(只读) |
138
+ | `get_nginx_config` | 读取网站 Nginx 配置文件(只读) |
139
+ | `list_domains` | 查询网站绑定的域名列表 |
140
+ | `list_backups` | 查询网站备份列表 |
141
+
142
+ ### full 模式(`BT_MODE=full`)
143
+
144
+ 在 readonly 所有工具基础上,额外开放:
145
+
146
+ | 工具 | 说明 |
147
+ |------|------|
148
+ | `manage_sites` | 创建/删除/启用/停用网站,修改备注、到期时间 |
149
+ | `manage_domains` | 绑定/解绑域名 |
150
+ | `manage_backups` | 立即备份/删除备份 |
151
+ | `save_nginx_config` | 修改保存 Nginx 配置(⚠️ 谨慎,即时生效) |
152
+ | `save_file` | 写入服务器文件(⚠️ 谨慎) |
153
+
154
+ ---
155
+
156
+ ## 工具详细说明
157
+
158
+ ### `list_sites` — 列出所有网站
159
+
160
+ | 参数 | 类型 | 必填 | 说明 |
161
+ |------|------|------|------|
162
+ | `search` | string | 否 | 按网站名称模糊搜索 |
163
+
164
+ ---
165
+
166
+ ### `get_nginx_logs` — 查询 Nginx 日志(自动探测路径)
167
+
168
+ > 工具会自动在 `/www/wwwlogs/` 目录下探测日志文件,无需手动填写路径;探测失败时会列出目录内容供参考。
169
+
170
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
171
+ |------|------|------|--------|------|
172
+ | `site_name` | string | ✅ | — | 网站域名,如 `example.com` |
173
+ | `log_type` | string | 否 | `access` | `access`(访问日志)或 `error`(错误日志) |
174
+ | `last_lines` | number | 否 | `200` | 读取最后 N 行(最大 2000) |
175
+ | `log_path` | string | 否 | — | 手动指定路径(自动探测失败时使用) |
176
+
177
+ ---
178
+
179
+ ### `get_app_logs` — 查询应用层日志(自动探测框架路径)
180
+
181
+ > 工具会自动在网站根目录下按框架候选路径逐一探测,`framework: auto` 时尝试所有常见框架;探测失败时列出目录结构供参考。
182
+
183
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
184
+ |------|------|------|--------|------|
185
+ | `site_name` | string | 二选一 | — | 网站名称,自动推断路径 |
186
+ | `log_path` | string | 二选一 | — | 手动指定日志文件绝对路径 |
187
+ | `framework` | string | 否 | `auto` | `auto`(自动)/ `laravel` / `thinkphp` / `java` / `nodejs` |
188
+ | `last_lines` | number | 否 | `200` | 读取最后 N 行(最大 2000) |
189
+
190
+ **各框架自动探测路径:**
191
+
192
+ | 框架 | 候选路径 |
193
+ |------|----------|
194
+ | Laravel | `storage/logs/laravel.log`、`storage/logs/app.log` |
195
+ | ThinkPHP | `runtime/log`、`runtime/logs/app.log` |
196
+ | Java | `logs/app.log`、`logs/error.log`、`app.log` |
197
+ | Node.js | `logs/app.log`、`logs/error.log`、`out.log` |
198
+
199
+ ---
200
+
201
+ ### `get_panel_logs` — 查询面板操作日志
202
+
203
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
204
+ |------|------|------|--------|------|
205
+ | `limit` | number | 否 | `30` | 返回最近 N 条记录(最大 100) |
206
+
207
+ ---
208
+
209
+ ### `get_system_status` — 查询服务器状态
210
+
211
+ 无需参数,返回 CPU、内存、磁盘、网络实时数据。
212
+
213
+ ---
214
+
215
+ ### `read_file` — 读取任意文件
216
+
217
+ | 参数 | 类型 | 必填 | 说明 |
218
+ |------|------|------|------|
219
+ | `path` | string | ✅ | 文件绝对路径 |
220
+ | `last_lines` | number | 否 | 只读最后 N 行,大文件必填 |
221
+
222
+ ---
223
+
224
+ ### `get_nginx_config` — 读取 Nginx 配置
225
+
226
+ | 参数 | 类型 | 必填 | 说明 |
227
+ |------|------|------|------|
228
+ | `site_name` | string | ✅ | 网站名称(域名) |
229
+
230
+ ---
231
+
232
+ ### `manage_sites` — 网站管理(full 模式)
233
+
234
+ | 参数 | 类型 | 必填 | 说明 |
235
+ |------|------|------|------|
236
+ | `action` | string | ✅ | `start` / `stop` / `delete` / `create` / `set_note` / `set_expiry` / `get_php_versions` / `get_site_info` |
237
+ | `site_name` | string | 视情况 | 网站名称 |
238
+ | `path` | string | create 必填 | 网站根目录 |
239
+ | `php_version` | string | 否 | PHP 版本,如 `74`、`80`、`81` |
240
+ | `note` | string | 否 | 备注 |
241
+ | `edate` | string | set_expiry 必填 | 到期日期(`YYYY-MM-DD` 或 `0000-00-00` 永久) |
242
+ | `delete_ftp` / `delete_db` / `delete_path` | boolean | 否 | delete 时是否同时删除关联资源 |
243
+
244
+ ---
245
+
246
+ ### `manage_domains` — 域名管理(full 模式)
247
+
248
+ | 参数 | 类型 | 必填 | 说明 |
249
+ |------|------|------|------|
250
+ | `action` | string | ✅ | `list` / `add` / `delete` |
251
+ | `site_name` | string | ✅ | 网站名称 |
252
+ | `domain` | string | add/delete 必填 | 要操作的域名 |
253
+ | `port` | number | 否 | 端口,默认 80 |
254
+
255
+ ---
256
+
257
+ ### `manage_backups` — 备份管理(full 模式)
258
+
259
+ | 参数 | 类型 | 必填 | 说明 |
260
+ |------|------|------|------|
261
+ | `action` | string | ✅ | `list` / `create` / `delete` |
262
+ | `site_name` | string | ✅ | 网站名称 |
263
+ | `backup_id` | number | delete 必填 | 备份 ID(从 list 获取) |
264
+
265
+ ---
266
+
267
+ ## 对话使用示例
268
+
269
+ **日志排查**
270
+ ```
271
+ 查看 example.com 最近 500 行 Nginx 错误日志
272
+ example.com 最近有哪些 502 错误?
273
+ 查看 shop.com 的 Laravel 日志有没有 Exception
274
+ ```
275
+
276
+ **系统状态**
277
+ ```
278
+ 服务器现在 CPU 和内存使用率多少?
279
+ 磁盘还有多少空间?
280
+ ```
281
+
282
+ **网站管理(full 模式)**
283
+ ```
284
+ 帮我立即备份 example.com
285
+ 给 example.com 添加域名 www.example.com
286
+ 停用 example.com
287
+ ```
288
+
289
+ **配置查看**
290
+ ```
291
+ 读取 example.com 的 Nginx 配置
292
+ 查看 /www/wwwroot/example.com/.env 文件
293
+ ```
294
+
295
+ ---
296
+
297
+ ## 🚀 场景案例:AI 生成网站 → 一键部署上线
298
+
299
+ > 需要 `BT_MODE=full`
300
+
301
+ 这是 bt-mcp 最有趣的使用场景之一:**让 AI 帮你生成网站内容,然后直接部署到服务器,全程不用手动登录面板。**
302
+
303
+ ---
304
+
305
+ ### 案例一:小龙虾餐厅落地页(OpenClaw 风格)
306
+
307
+ **你对 AI 说:**
308
+
309
+ > "帮我生成一个小龙虾餐厅的宣传落地页,暗红色主题,要有菜单、价格、联系方式,风格现代感强,然后部署到服务器,域名用 claw.myrestaurant.com"
310
+
311
+ **AI 自动执行的步骤:**
312
+
313
+ ```
314
+ 第一步:生成 HTML
315
+ ↓ AI 生成完整的 index.html(暗红主题、菜单卡片、价格表、微信/电话联系)
316
+
317
+ 第二步:调用 manage_sites(action=create)
318
+ domain: claw.myrestaurant.com
319
+ path: /www/wwwroot/claw.myrestaurant.com
320
+ → 宝塔自动创建目录 + Nginx 配置
321
+
322
+ 第三步:调用 save_file
323
+ path: /www/wwwroot/claw.myrestaurant.com/index.html
324
+ content: <刚生成的 HTML>
325
+ → 文件写入服务器
326
+
327
+ 第四步:返回访问地址
328
+ ✅ 部署完成!访问地址:http://claw.myrestaurant.com
329
+ ⚠️ 记得把域名 DNS 解析到你服务器的 IP
330
+ ```
331
+
332
+ 整个过程 **30 秒内完成**,你只需要去域名商把 DNS 指向服务器 IP 即可。
333
+
334
+ ---
335
+
336
+ ### 案例二:没有域名,用 IP 临时预览
337
+
338
+ **你对 AI 说:**
339
+
340
+ > "帮我生成一个活动报名页,直接用服务器 IP 访问就行,不用配域名"
341
+
342
+ AI 会把域名字段填写为服务器 IP,宝塔建站后直接 `http://服务器IP` 访问。
343
+
344
+ ---
345
+
346
+ ### 案例三:已有网站,AI 更新内容
347
+
348
+ **你对 AI 说:**
349
+
350
+ > "把 claw.myrestaurant.com 首页的营业时间改成 10:00-22:00,夏季特供区加一道'麻辣小龙虾拼盘 128元'"
351
+
352
+ AI 会:
353
+ 1. `read_file` 读取现有 `index.html`
354
+ 2. 修改对应文字
355
+ 3. `save_file` 写回服务器
356
+
357
+ **完全不用手动 SSH 或登录面板。**
358
+
359
+ ---
360
+
361
+ ### 完整工作流示意
362
+
363
+ ```
364
+ 你的想法(自然语言)
365
+
366
+ AI 生成 HTML
367
+
368
+ bt-mcp 创建网站目录
369
+
370
+ bt-mcp 写入 index.html
371
+
372
+ 域名解析(手动,一次性)
373
+
374
+ 🌐 网站上线
375
+ ```
376
+
377
+ > **提示**:如果你的域名已经解析好,整个从「提需求」到「能访问」的过程可以压缩到 1 分钟以内。
378
+
379
+ ---
380
+
381
+ ## 常见问题
382
+
383
+ **Q:提示 "Missing required environment variables"?**
384
+
385
+ 检查 `BT_PANEL_URL` 和 `BT_API_KEY` 是否正确填写,重启你的 AI 工具。
386
+
387
+ **Q:提示请求失败或连接超时?**
388
+
389
+ 1. 确认宝塔面板地址和端口正确(默认 8888)
390
+ 2. 确认已在宝塔 API 设置中添加了**你的本机 IP** 到白名单
391
+ 3. 如果面板开启了 HTTPS 或安全入口,地址要包含完整路径(如 `https://IP:端口/安全路径`)
392
+
393
+ **Q:读取日志提示文件不存在?**
394
+
395
+ - Nginx 日志需要先在宝塔面板开启「访问日志」(网站设置 → 日志)
396
+ - 工具会自动探测并列出目录结构,根据提示补充 `log_path` 参数即可
397
+
398
+ **Q:日志内容太多,AI 回复很慢?**
399
+
400
+ 使用 `last_lines` 参数限制读取行数,建议不超过 500 行。
401
+
402
+ **Q:full 模式会有什么风险?**
403
+
404
+ `save_nginx_config` 和 `save_file` 是写操作,配置错误可能导致网站无法访问。建议在熟悉 AI 行为后再开启 `BT_MODE=full`,平时保持默认 `readonly`。
405
+
406
+ ---
407
+
408
+ ## 本地开发
409
+
410
+ ```bash
411
+ cd E:\tools\bt-mcp
412
+ npm install --ignore-scripts
413
+ npm run build
414
+ node dist/index.js # 输出 "BT Panel MCP Server running (mode: readonly)"
415
+ ```
416
+
417
+ 监听文件变化自动重新编译:
418
+
419
+ ```bash
420
+ npm run dev
421
+ ```
422
+
423
+ ---
424
+
425
+ ## 技术栈
426
+
427
+ - **语言**:TypeScript
428
+ - **运行时**:Node.js >= 18
429
+ - **MCP SDK**:`@modelcontextprotocol/sdk`
430
+
431
+ ---
432
+
433
+ ## License
434
+
435
+ MIT
436
+
437
+ ---
438
+
439
+ ## 联系作者
440
+
441
+ 如有问题或建议,欢迎微信交流:
442
+
443
+ ![微信联系方式](./lxfs.jpg)
@@ -0,0 +1,124 @@
1
+ export interface BtConfig {
2
+ panelUrl: string;
3
+ apiKey: string;
4
+ }
5
+ export interface SiteInfo {
6
+ id: number;
7
+ name: string;
8
+ path: string;
9
+ status: string;
10
+ ps: string;
11
+ addtime: string;
12
+ edate: string;
13
+ }
14
+ export interface SystemStatus {
15
+ system: string;
16
+ version: string;
17
+ time: string;
18
+ cpuNum: number;
19
+ cpuRealUsed: number;
20
+ memTotal: number;
21
+ memRealUsed: number;
22
+ memFree: number;
23
+ }
24
+ export interface NetworkStatus {
25
+ down: number;
26
+ up: number;
27
+ cpu: [number, number];
28
+ mem: {
29
+ memFree: number;
30
+ memTotal: number;
31
+ memRealUsed: number;
32
+ };
33
+ load: {
34
+ one: number;
35
+ five: number;
36
+ fifteen: number;
37
+ };
38
+ }
39
+ export interface DiskInfo {
40
+ path: string;
41
+ size: [string, string, string, string];
42
+ }
43
+ export interface CreateSiteParams {
44
+ domain: string;
45
+ path: string;
46
+ phpVersion?: string;
47
+ port?: number;
48
+ ps?: string;
49
+ createFtp?: boolean;
50
+ ftpUser?: string;
51
+ ftpPass?: string;
52
+ createDb?: boolean;
53
+ dbUser?: string;
54
+ dbPass?: string;
55
+ dbCharset?: string;
56
+ }
57
+ export interface DomainInfo {
58
+ id: number;
59
+ pid: number;
60
+ name: string;
61
+ port: number;
62
+ addtime: string;
63
+ }
64
+ export interface BackupInfo {
65
+ id: number;
66
+ pid: number;
67
+ name: string;
68
+ path: string;
69
+ addtime: string;
70
+ }
71
+ export declare function listSites(search?: string): Promise<SiteInfo[]>;
72
+ export declare function createSite(params: CreateSiteParams): Promise<unknown>;
73
+ export declare function deleteSite(id: number, siteName: string, opts?: {
74
+ deleteFtp?: boolean;
75
+ deleteDb?: boolean;
76
+ deletePath?: boolean;
77
+ }): Promise<unknown>;
78
+ export declare function stopSite(id: number, name: string): Promise<unknown>;
79
+ export declare function startSite(id: number, name: string): Promise<unknown>;
80
+ export declare function setSiteNote(id: number, ps: string): Promise<unknown>;
81
+ export declare function setSiteExpiry(id: number, edate: string): Promise<unknown>;
82
+ export declare function listDomains(siteId: number): Promise<DomainInfo[]>;
83
+ export declare function addDomain(siteId: number, siteName: string, domain: string, port?: number): Promise<unknown>;
84
+ export declare function deleteDomain(siteId: number, siteName: string, domain: string, port?: number): Promise<unknown>;
85
+ export declare function listBackups(siteId: number): Promise<BackupInfo[]>;
86
+ export declare function createBackup(siteId: number): Promise<unknown>;
87
+ export declare function deleteBackup(backupId: number): Promise<unknown>;
88
+ export declare function getNginxConfig(siteName: string): Promise<string>;
89
+ export declare function saveNginxConfig(siteName: string, content: string): Promise<unknown>;
90
+ export declare function saveFileContent(filePath: string, content: string): Promise<unknown>;
91
+ export declare function getSiteInfo(siteId: number, sitePath: string): Promise<unknown>;
92
+ export declare function getPhpVersions(): Promise<unknown>;
93
+ export declare function checkPanelUpdate(): Promise<unknown>;
94
+ export interface FileEntry {
95
+ name: string;
96
+ size: number;
97
+ type: string;
98
+ time: string;
99
+ }
100
+ /**
101
+ * 列出目录下的文件列表
102
+ */
103
+ export declare function listDir(dirPath: string): Promise<FileEntry[]>;
104
+ export declare function readFile(filePath: string): Promise<string>;
105
+ /**
106
+ * 取文件最后 N 行,避免大文件全量读取后 token 爆炸
107
+ */
108
+ export declare function tailLines(content: string, lines: number): string;
109
+ /**
110
+ * 检查文件是否存在(通过尝试读取,捕获错误来判断)
111
+ */
112
+ export declare function fileExists(filePath: string): Promise<boolean>;
113
+ /**
114
+ * 宝塔 Nginx 访问日志默认路径:/www/wwwlogs/<siteName>.log
115
+ * 错误日志:/www/wwwlogs/<siteName>.error.log
116
+ */
117
+ export declare function getNginxAccessLog(siteName: string, lastLines?: number): Promise<string>;
118
+ export declare function getNginxErrorLog(siteName: string, lastLines?: number): Promise<string>;
119
+ export declare function getAppLog(logPath: string, lastLines?: number): Promise<string>;
120
+ export declare function getPanelLogs(limit?: number): Promise<unknown>;
121
+ export declare function getSystemStatus(): Promise<SystemStatus>;
122
+ export declare function getNetworkStatus(): Promise<NetworkStatus>;
123
+ export declare function getDiskInfo(): Promise<DiskInfo[]>;
124
+ //# sourceMappingURL=bt-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bt-client.d.ts","sourceRoot":"","sources":["../src/bt-client.ts"],"names":[],"mappings":"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"}