tabby-bianbu-mcp 0.5.2 → 0.6.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,70 @@
2
2
 
3
3
  All notable changes to `tabby-bianbu-mcp` will be documented in this file.
4
4
 
5
+ ## [0.6.0] - 2026-03-23
6
+
7
+ ### Added
8
+ - **adaptive request throttling**: `RequestLane` now starts at zero cadence and auto-backs-off only when the server returns 429 / rate-limit errors, then gradually recovers to zero delay on success
9
+ - **concurrent file transfers**: up to 3 files now upload/download in parallel (configurable via `maxConcurrentFiles`)
10
+ - **enhanced shell line editor**: cursor movement (←→), command history (↑↓), Home/End, Delete key, Ctrl+A/E/U/K/W/L shortcuts
11
+ - **colorized shell output**: stderr renders in red, non-zero exit codes in yellow, prompt in bold blue
12
+ - **running indicator**: shell shows `⏳ Running...` during command execution
13
+ - **file manager sort**: click column headers (Name, Size, Modified, Type) to sort; folders always appear first
14
+ - **file manager multi-select**: Ctrl+Click to toggle, Shift+Click for range selection
15
+ - **file type icons**: emoji icons for 50+ file extensions (📁📜🐍📋📦🖼️🎵🎬 etc.)
16
+ - **formatted file sizes**: human-readable display (B, KB, MB, GB)
17
+ - **date column**: shows file modification timestamps
18
+ - **status bar**: shows item count, selection summary, and total size
19
+ - **detail pane toggle**: hide/show the preview panel to maximize file list space
20
+ - **URL domain input**: settings page now shows `https://` [domain] `/mcp` — user only needs to paste the domain
21
+
22
+ ### Changed
23
+ - **upload chunk default**: 32 KiB → 64 KiB (halves HTTP round-trips)
24
+ - **download chunk default**: 128 KiB → 256 KiB
25
+ - **worker cadence default**: 100ms → 0ms (adaptive throttling handles rate-limiting)
26
+ - **download pipeline**: independent flusher coroutine eliminates head-of-line blocking where all workers stalled waiting for ordered disk writes
27
+ - **file manager UI**: complete redesign with Windows 11 Fluent-inspired dark theme (Mica-style backdrop, rounded corners, segmented toolbar, immersive layout)
28
+ - **settings page**: simplified from 6 cards to 3 focused sections; advanced settings in collapsible areas; MCP snippet now masks the API key
29
+ - **config field**: `url` replaced by `domain` — existing `url` values are auto-migrated on first load
30
+
31
+ ### Removed
32
+ - `settings.enabled` config (removed in 0.5.4, cleanup completed)
33
+ - `minIntervalMs` config (replaced by adaptive cadence)
34
+
35
+ ## [0.5.4] - 2026-03-23
36
+
37
+ ### Fixed
38
+ - `private baseName()` made public so Angular AOT compilation can access it from templates
39
+ - `Ctrl+Shift+N` shortcut was unreachable because `Ctrl+N` handler fired first; reordered to check shift-modified combo first
40
+ - `RequestLane` workers now stop cleanly when the scheduler is reconfigured, preventing leaked infinite loops
41
+ - `cancelTransfer` now handles `queued` transfers in addition to `running` ones
42
+ - `super.onFrontendReady()` is now properly awaited in `BianbuCloudShellTabComponent`
43
+
44
+ ### Removed
45
+ - dead `readFileAsBase64` method (was never called)
46
+ - dead `shellTab.component.pug` template (component uses `BaseTerminalTabComponent.template`)
47
+ - unused `minIntervalMs` config default (was never read)
48
+ - non-functional `settings.enabled` toggle (no code gated on it)
49
+
50
+ ### Changed
51
+ - parallel chunked upload/download workers now use `offsets.shift()` instead of a shared mutable counter for clearer single-threaded safety
52
+
53
+ ### Known security considerations
54
+ - API key (`X-API-KEY`) is transmitted in an HTTP header; when using plaintext `http://` URLs the key is sent unencrypted — users should prefer HTTPS endpoints
55
+ - `as_root=true` on any MCP tool bypasses `FILE_ROOT` path restrictions and executes commands via `sudo -n`
56
+ - the "Copyable MCP snippet" in settings exposes the real API key — avoid sharing it in bug reports
57
+ - `pug@2.x` has known prototype pollution advisories; it is used only at build time and does not affect runtime
58
+
59
+ ## [0.5.3] - 2026-03-20
60
+
61
+ ### Added
62
+ - downloadable local maintenance session logs with timestamps and stable session names
63
+ - downloadable remote maintenance logs that bundle the status file and remote installer log into one timestamped file
64
+
65
+ ### Changed
66
+ - detached maintenance sessions now pass an explicit session name into `bianbu_agent_proxy.sh`
67
+ - remote installer logs now include UTC timestamps and the maintenance session name on every line
68
+
5
69
  ## [0.5.2] - 2026-03-20
6
70
 
7
71
  ### Fixed
package/README.md CHANGED
@@ -1,116 +1,422 @@
1
- # tabby-bianbu-mcp
1
+ <div align="center">
2
2
 
3
- A Tabby plugin for Bianbu Cloud remote shell and file operations over MCP.
3
+ # <img src="https://img.icons8.com/fluency/48/cloud-development.png" width="32" height="32" /> tabby-bianbu-mcp
4
4
 
5
- It adds a dedicated Bianbu MCP settings page, a shell-like terminal tab, a file manager tab, remote health diagnostics, and a bundled installer push-upgrade flow for the matching Bianbu Cloud MCP server.
5
+ **Tabby terminal plugin for Bianbu Cloud &mdash; Shell & File Manager over MCP**
6
6
 
7
- ## Features
7
+ **Bianbu Cloud 的 Tabby 终端插件 &mdash; 基于 MCP 的远程 Shell 和文件管理器**
8
8
 
9
- - Bianbu MCP settings page inside Tabby
10
- - Bianbu Cloud Shell and Bianbu Cloud Files profiles
11
- - shell experience backed by MCP `run_command` and logical shell sessions
12
- - file explorer backed by MCP file tools
13
- - remote diagnostics: health, versions, capabilities, FILE_ROOT, transport mode
14
- - packaged remote installer asset with SHA-256 metadata and integrity verification
15
- - push latest installer to the remote host and trigger `up` or `repair`
16
- - chunked upload and download support for larger files
17
- - 32-slot request scheduling with 2 reserved interactive lanes and up to 30 transfer lanes
18
- - one active file transfer at a time with queued follow-up uploads/downloads
19
- - parallel offset-based file chunk transfers against the matching remote installer
20
- - atomic rename support through MCP `rename_path`
21
- - remote backup and `restore-latest` recovery support in the installer
9
+ [![npm version](https://img.shields.io/npm/v/tabby-bianbu-mcp?style=flat-square&color=cb3837&logo=npm&logoColor=white)](https://www.npmjs.com/package/tabby-bianbu-mcp)
10
+ [![license](https://img.shields.io/npm/l/tabby-bianbu-mcp?style=flat-square&color=blue)](LICENSE)
11
+ [![node](https://img.shields.io/node/v/tabby-bianbu-mcp?style=flat-square&color=339933&logo=node.js&logoColor=white)](package.json)
12
+ [![npm downloads](https://img.shields.io/npm/dm/tabby-bianbu-mcp?style=flat-square&color=orange)](https://www.npmjs.com/package/tabby-bianbu-mcp)
13
+ [![GitHub stars](https://img.shields.io/github/stars/niver2002/tabby-bianbu-mcp?style=flat-square&logo=github)](https://github.com/niver2002/tabby-bianbu-mcp)
22
14
 
23
- ## What this plugin is not
15
+ ---
24
16
 
25
- - not native SSH
26
- - not native SFTP
27
- - not a replacement for the upstream Bianbu Cloud gateway authentication layer
17
+ [English](#-overview) &nbsp;&bull;&nbsp; [中文](#-概述)
28
18
 
29
- The plugin talks to a Bianbu Cloud MCP endpoint such as:
19
+ </div>
30
20
 
31
- `https://<domain>/mcp`
21
+ <br/>
32
22
 
33
- Authentication relies on the existing upstream `X-API-KEY` layer. The plugin does not add a second proxy token layer.
23
+ ## <img src="https://img.icons8.com/fluency/24/info.png" width="20" /> Overview
34
24
 
35
- ## Settings
25
+ > A [Tabby](https://tabby.sh) plugin that brings **cloud shell** and **file manager** experiences to Bianbu Cloud virtual machines,
26
+ > powered by the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/).
27
+ > No SSH keys. No SFTP setup. Just MCP over HTTPS.
36
28
 
37
- The plugin stores these main settings under `bianbuMcp`:
29
+ <br/>
38
30
 
39
- - `enabled`
40
- - `name`
41
- - `url`
42
- - `apiKey`
43
- - `interactiveConcurrency`
44
- - `transferConcurrency`
45
- - `workerCadenceMs`
46
- - `maxRetries`
47
- - `retryBaseMs`
48
- - `uploadChunkBytes`
49
- - `downloadChunkBytes`
50
- - `notes`
51
- - `installerRemotePath`
52
- - `maintenanceAsRoot`
53
- - `reconnectPollMs`
54
- - `upgradeHealthTimeoutMs`
31
+ ## <img src="https://img.icons8.com/fluency/24/info.png" width="20" /> 概述
55
32
 
56
- ## Remote maintenance flow
33
+ > 一款 [Tabby](https://tabby.sh) 插件,为算能板卡宇宙(Bianbu Cloud) 虚拟机提供**云端 Shell** 和**文件管理器**体验,
34
+ > 基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 通信。
35
+ > 无需 SSH 密钥,无需 SFTP,仅需 HTTPS + MCP。
57
36
 
58
- The plugin package contains a bundled copy of `bianbu_agent_proxy.sh` plus release metadata.
37
+ <br/>
59
38
 
60
- When you click `Push latest installer + upgrade`:
39
+ ---
61
40
 
62
- 1. the plugin uploads the bundled installer to `installerRemotePath`
63
- 2. it makes the script executable remotely
64
- 3. it starts the installer in the background with `up` or `repair`
65
- 4. the launcher writes a remote status file when the installer exits, including the exit code and log path
66
- 5. the plugin waits for both installer completion and the expected remote health/version report before declaring success
67
- 6. if the cutover fails, the installer auto-rolls back to the previous backup instead of leaving the remote half-upgraded
41
+ ## Features / 功能特性
68
42
 
69
- This is the intended commercial-release upgrade path because the client and remote installer ship together.
43
+ <table>
44
+ <thead>
45
+ <tr>
46
+ <th width="50%">English</th>
47
+ <th width="50%">中文</th>
48
+ </tr>
49
+ </thead>
50
+ <tbody>
51
+ <tr>
52
+ <td>
70
53
 
71
- The remote installer now defaults `ENABLE_PASSWORDLESS_SUDO=false`. If you want unattended `as_root=true` maintenance through MCP, opt in explicitly and understand the security trade-off.
54
+ **🖥 Cloud Shell**
55
+ - Full terminal experience via MCP shell sessions
56
+ - Persistent sessions with working directory tracking
57
+ - Character-at-a-time input with prompt detection
72
58
 
73
- ## Build
59
+ </td>
60
+ <td>
61
+
62
+ **🖥 云端 Shell**
63
+ - 通过 MCP Shell 会话实现完整终端体验
64
+ - 持久会话,自动跟踪工作目录
65
+ - 逐字符输入,智能提示符检测
66
+
67
+ </td>
68
+ </tr>
69
+ <tr>
70
+ <td>
71
+
72
+ **📁 File Manager**
73
+ - Browse, create, rename, delete files & directories
74
+ - Inline text editor with save support
75
+ - Drag-and-drop file upload
76
+ - Keyboard shortcuts (F2, F5, Del, Ctrl+N, Ctrl+Shift+N)
77
+
78
+ </td>
79
+ <td>
80
+
81
+ **📁 文件管理器**
82
+ - 浏览、新建、重命名、删除文件和目录
83
+ - 内联文本编辑器,支持保存
84
+ - 拖拽上传文件
85
+ - 快捷键(F2 重命名 / F5 刷新 / Del 删除 / Ctrl+N 新文件 / Ctrl+Shift+N 新文件夹)
86
+
87
+ </td>
88
+ </tr>
89
+ <tr>
90
+ <td>
91
+
92
+ **⚡ High-Performance Transfers**
93
+ - Parallel chunked upload & download
94
+ - 32-slot request scheduler (2 interactive + 30 transfer)
95
+ - Configurable chunk sizes and concurrency
96
+ - Transfer queue with cancel support
97
+
98
+ </td>
99
+ <td>
100
+
101
+ **⚡ 高性能传输**
102
+ - 并行分块上传和下载
103
+ - 32 槽位请求调度器(2 交互 + 30 传输)
104
+ - 可配置分块大小和并发数
105
+ - 传输队列,支持取消
106
+
107
+ </td>
108
+ </tr>
109
+ <tr>
110
+ <td>
111
+
112
+ **🔧 Remote Maintenance**
113
+ - One-click push-upgrade from Tabby
114
+ - Auto-rollback on failed deployments
115
+ - Remote health diagnostics & version tracking
116
+ - Downloadable session logs (local + remote)
117
+
118
+ </td>
119
+ <td>
120
+
121
+ **🔧 远程维护**
122
+ - Tabby 内一键推送升级
123
+ - 部署失败自动回滚
124
+ - 远程健康诊断和版本追踪
125
+ - 可下载会话日志(本地 + 远端)
126
+
127
+ </td>
128
+ </tr>
129
+ </tbody>
130
+ </table>
131
+
132
+ <br/>
133
+
134
+ ---
135
+
136
+ ## 📦 Installation / 安装
137
+
138
+ <table>
139
+ <tr>
140
+ <td><b>npm (recommended)</b></td>
141
+ <td>
74
142
 
75
143
  ```bash
76
- npm install
77
- npm run build
144
+ npm install tabby-bianbu-mcp
78
145
  ```
79
146
 
80
- ## Test
147
+ </td>
148
+ </tr>
149
+ <tr>
150
+ <td><b>Tabby Plugin Manager</b></td>
151
+ <td>
81
152
 
82
- ```bash
83
- npm test
153
+ Search for `tabby-bianbu-mcp` in **Settings → Plugins → Install from npm**
154
+
155
+ 在 **设置 → 插件 → 从 npm 安装** 中搜索 `tabby-bianbu-mcp`
156
+
157
+ </td>
158
+ </tr>
159
+ </table>
160
+
161
+ <br/>
162
+
163
+ ---
164
+
165
+ ## 🚀 Quick Start / 快速上手
166
+
167
+ ### 1. Configure / 配置
168
+
169
+ Open **Settings → Bianbu MCP** in Tabby and fill in:
170
+
171
+ 在 Tabby 中打开 **设置 → Bianbu MCP**,填写:
172
+
173
+ | Field / 字段 | Description / 说明 | Example / 示例 |
174
+ |:---|:---|:---|
175
+ | **MCP URL** | Your MCP endpoint / MCP 端点地址 | `https://your-domain.example.com/mcp` |
176
+ | **X-API-KEY** | API key from Bianbu Cloud / API 密钥 | `your-api-key` |
177
+ | **Profile Name** | Display name / 显示名称 | `bianbu` |
178
+
179
+ ### 2. Connect / 连接
180
+
181
+ Click **"Test Connection"** to verify. Then use:
182
+
183
+ 点击 **"Test connection"** 验证。然后使用:
184
+
185
+ - **"Open Bianbu Cloud Shell"** — for terminal access / 打开终端
186
+ - **"Open Bianbu Cloud Files"** — for file management / 打开文件管理器
187
+
188
+ ### 3. MCP Snippet / MCP 配置片段
189
+
190
+ Copy the auto-generated JSON config for other MCP clients:
191
+
192
+ 复制自动生成的 JSON 配置,用于其他 MCP 客户端(如 Claude Desktop):
193
+
194
+ ```json
195
+ {
196
+ "mcpServers": {
197
+ "bianbu": {
198
+ "type": "http",
199
+ "url": "https://your-domain.example.com/mcp",
200
+ "headers": {
201
+ "X-API-KEY": "your-api-key"
202
+ }
203
+ }
204
+ }
205
+ }
84
206
  ```
85
207
 
86
- ## Release verification
208
+ <br/>
209
+
210
+ ---
211
+
212
+ ## ⚙️ Settings Reference / 配置参考
213
+
214
+ <details>
215
+ <summary><b>Click to expand full settings table / 点击展开完整配置表</b></summary>
216
+
217
+ <br/>
218
+
219
+ | Key / 键 | Default / 默认值 | Description (EN) | 说明 (中文) |
220
+ |:---|:---|:---|:---|
221
+ | `name` | `bianbu` | Profile display name | 配置显示名称 |
222
+ | `url` | *(empty)* | MCP endpoint URL | MCP 端点 URL |
223
+ | `apiKey` | *(empty)* | `X-API-KEY` header value | API 密钥 |
224
+ | `interactiveConcurrency` | `2` | Interactive request slots | 交互请求并发槽位数 |
225
+ | `transferConcurrency` | `30` | Transfer request slots | 传输请求并发槽位数 |
226
+ | `workerCadenceMs` | `100` | Dispatch cycle interval (ms) | 调度周期间隔 (毫秒) |
227
+ | `maxRetries` | `2` | Max retry attempts | 最大重试次数 |
228
+ | `retryBaseMs` | `1000` | Base delay between retries (ms) | 重试基础间隔 (毫秒) |
229
+ | `uploadChunkBytes` | `32768` | Upload chunk size (bytes) | 上传分块大小 (字节) |
230
+ | `downloadChunkBytes` | `131072` | Download chunk size (bytes) | 下载分块大小 (字节) |
231
+ | `notes` | *(empty)* | User notes | 用户备注 |
232
+ | `installerRemotePath` | `/tmp/bianbu_agent_proxy.sh` | Remote installer path | 远端安装脚本路径 |
233
+ | `maintenanceAsRoot` | `true` | Run maintenance as root | 以 root 执行维护 |
234
+ | `reconnectPollMs` | `2000` | Health poll interval during upgrade | 升级时健康检测间隔 |
235
+ | `upgradeHealthTimeoutMs` | `120000` | Max wait time for upgrade (ms) | 升级最大等待时间 |
236
+
237
+ </details>
238
+
239
+ <br/>
240
+
241
+ ---
242
+
243
+ ## 🔄 Remote Maintenance / 远程维护
244
+
245
+ <table>
246
+ <tr><td width="50%">
247
+
248
+ ### English
249
+
250
+ The plugin bundles `bianbu_agent_proxy.sh` — a self-contained MCP server installer with **blue/green deployment** and **automatic rollback**.
251
+
252
+ **Upgrade flow:**
253
+ 1. Upload bundled installer → remote host
254
+ 2. Launch detached `up` or `repair` process
255
+ 3. Installer stages the new release, validates with `node`, then swaps atomically
256
+ 4. Plugin polls remote health until expected version appears
257
+ 5. On failure: previous installation is auto-restored
258
+
259
+ **After maintenance**, download session logs from the Settings page for debugging.
260
+
261
+ > **Note:** `ENABLE_PASSWORDLESS_SUDO` defaults to `false`. Opt in explicitly if needed.
262
+
263
+ </td><td width="50%">
264
+
265
+ ### 中文
266
+
267
+ 插件内置了 `bianbu_agent_proxy.sh` — 一个自包含的 MCP 服务器安装脚本,支持**蓝绿部署**和**自动回滚**。
268
+
269
+ **升级流程:**
270
+ 1. 上传内置安装脚本到远端主机
271
+ 2. 后台启动 `up` 或 `repair` 进程
272
+ 3. 安装脚本在暂存区准备新版本,用 `node` 验证后原子切换
273
+ 4. 插件持续轮询远端健康状态,直到出现预期版本号
274
+ 5. 如果失败:自动恢复到之前的安装
275
+
276
+ **维护完成后**,可在设置页面下载会话日志用于调试。
277
+
278
+ > **注意:** `ENABLE_PASSWORDLESS_SUDO` 默认为 `false`。如需无密码 sudo,请明确开启并了解安全影响。
279
+
280
+ </td></tr>
281
+ </table>
282
+
283
+ <br/>
284
+
285
+ ---
286
+
287
+ ## 🏗 Architecture / 架构
87
288
 
88
- ```bash
89
- npm run sync:remote-assets
90
- npm test
91
- npm run build
92
- npm pack --dry-run
93
289
  ```
290
+ ┌───────────────────────────────────────────────────────┐
291
+ │ Tabby Terminal │
292
+ │ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │
293
+ │ │ Shell Tab │ │ Files Tab │ │ Settings Tab│ │
294
+ │ └──────┬───────┘ └──────┬───────┘ └──────┬──────┘ │
295
+ │ │ │ │ │
296
+ │ ┌──────┴─────────────────┴──────────────────┴──────┐ │
297
+ │ │ BianbuMcpService │ │
298
+ │ │ ┌─────────────────┐ ┌────────────────────────┐ │ │
299
+ │ │ │ Interactive Lane│ │ Transfer Lane │ │ │
300
+ │ │ │ (2 slots) │ │ (30 slots) │ │ │
301
+ │ │ └────────┬────────┘ └───────────┬────────────┘ │ │
302
+ │ │ └───────────┬───────────┘ │ │
303
+ │ │ │ │ │
304
+ │ │ JSON-RPC / HTTP(S) │ │
305
+ │ └───────────────────────┼──────────────────────────┘ │
306
+ └──────────────────────────┼─────────────────────────────┘
307
+
308
+ ┌──────▼──────┐
309
+ │ X-API-KEY │
310
+ │ Gateway │
311
+ └──────┬──────┘
312
+
313
+ ┌──────────▼──────────┐
314
+ │ bianbu-mcp-server │
315
+ │ (Express + MCP) │
316
+ │ │
317
+ │ 20 MCP Tools: │
318
+ │ health, shell, │
319
+ │ files, chunked │
320
+ │ transfers ... │
321
+ └─────────────────────┘
322
+ ```
323
+
324
+ <br/>
325
+
326
+ ---
94
327
 
95
- ## Publish
328
+ ## 🛠 Development / 开发
96
329
 
97
330
  ```bash
98
- npm publish --access public
331
+ # Clone / 克隆
332
+ git clone https://github.com/niver2002/tabby-bianbu-mcp.git
333
+ cd tabby-bianbu-mcp
334
+
335
+ # Install dependencies / 安装依赖
336
+ npm install
337
+
338
+ # Build (sync assets → types → webpack)
339
+ npm run build
340
+
341
+ # Watch mode / 监视模式
342
+ npm run watch
343
+
344
+ # Run tests / 运行测试
345
+ npm test
346
+
347
+ # Full release verification / 完整发布验证
348
+ npm run verify
99
349
  ```
100
350
 
101
- ## Files included in the package
351
+ <br/>
352
+
353
+ ---
354
+
355
+ ## ⚠️ Security Considerations / 安全注意事项
356
+
357
+ <table>
358
+ <thead>
359
+ <tr>
360
+ <th width="50%">English</th>
361
+ <th width="50%">中文</th>
362
+ </tr>
363
+ </thead>
364
+ <tbody>
365
+ <tr>
366
+ <td>
367
+
368
+ - **Always use HTTPS** — API key is sent in `X-API-KEY` header; HTTP transmits it in plaintext
369
+ - **`as_root=true`** bypasses `FILE_ROOT` restrictions and uses `sudo -n`
370
+ - The **MCP snippet** in settings shows the real API key — don't share it publicly
371
+ - `pug@2.x` has known prototype pollution CVEs; this is a **build-time-only** dependency
372
+
373
+ </td>
374
+ <td>
375
+
376
+ - **始终使用 HTTPS** — API 密钥通过 `X-API-KEY` 头传输,HTTP 会明文传输
377
+ - **`as_root=true`** 会绕过 `FILE_ROOT` 限制,使用 `sudo -n` 执行
378
+ - 设置页的 **MCP 配置片段**会显示真实 API 密钥 — 不要公开分享
379
+ - `pug@2.x` 有已知的原型链污染漏洞,但这只是**构建时依赖**,不影响运行时
380
+
381
+ </td>
382
+ </tr>
383
+ </tbody>
384
+ </table>
385
+
386
+ <br/>
387
+
388
+ ---
389
+
390
+ ## 📋 Changelog / 变更日志
391
+
392
+ See [CHANGELOG.md](CHANGELOG.md) for the full release history.
393
+
394
+ 完整版本历史请查看 [CHANGELOG.md](CHANGELOG.md)。
395
+
396
+ <br/>
397
+
398
+ ---
399
+
400
+ ## 📄 License / 许可证
401
+
402
+ [MIT](LICENSE) &copy; [niver2002](https://github.com/niver2002)
403
+
404
+ ---
405
+
406
+ <div align="center">
407
+
408
+ **Made with** ❤️ **for the Bianbu Cloud community**
409
+
410
+ **为算能板卡宇宙社区倾心打造**
102
411
 
103
- - `dist/`
104
- - `assets/bianbu_agent_proxy.sh`
105
- - `assets/bianbu_agent_proxy.meta.json`
106
- - `README.md`
107
- - `LICENSE`
108
- - `CHANGELOG.md`
412
+ <br/>
109
413
 
110
- ## Source repository
414
+ <sub>
111
415
 
112
- https://github.com/niver2002/tabby-bianbu-mcp
416
+ [Report Bug / 反馈问题](https://github.com/niver2002/tabby-bianbu-mcp/issues) &nbsp;&bull;&nbsp;
417
+ [npm Package](https://www.npmjs.com/package/tabby-bianbu-mcp) &nbsp;&bull;&nbsp;
418
+ [Tabby Terminal](https://tabby.sh)
113
419
 
114
- ## License
420
+ </sub>
115
421
 
116
- MIT
422
+ </div>
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "fileName": "bianbu_agent_proxy.sh",
3
3
  "sourceFile": "bianbu_agent_proxy.sh",
4
- "scriptVersion": "1.2.1",
4
+ "scriptVersion": "1.2.2",
5
5
  "serverVersion": "1.2.0",
6
- "sha256": "2579a96d69100625feef3ac205a877a3b742c62adec1db2ee284dcd3cc834fb4",
7
- "bytes": 67586,
8
- "generatedAt": "2026-03-20T04:59:13.343Z"
6
+ "sha256": "729442eb8fa2311e67415ed78d5dbf0c12e58281e075cd3cc43cbb74c595e5b9",
7
+ "bytes": 67756,
8
+ "generatedAt": "2026-03-23T02:58:26.632Z"
9
9
  }
@@ -4,7 +4,7 @@ set -Eeuo pipefail
4
4
  umask 077
5
5
 
6
6
  SCRIPT_NAME="$(basename "$0")"
7
- SCRIPT_VERSION="${SCRIPT_VERSION:-1.2.1}"
7
+ SCRIPT_VERSION="${SCRIPT_VERSION:-1.2.2}"
8
8
  SERVER_VERSION="${SERVER_VERSION:-1.2.0}"
9
9
  APP_NAME="bianbu-mcp-server"
10
10
  INSTALL_ROOT="/opt/${APP_NAME}"
@@ -28,6 +28,8 @@ MAX_REQUEST_BODY_MB="${MAX_REQUEST_BODY_MB:-8}"
28
28
  TLS_CERT_FILE="${TLS_CERT_FILE:-}"
29
29
  TLS_KEY_FILE="${TLS_KEY_FILE:-}"
30
30
  MCP_TRANSPORT_MODE="${MCP_TRANSPORT_MODE:-stateless}"
31
+ DEFAULT_SESSION_NAME="manual-$(date -u +%Y%m%dT%H%M%SZ)"
32
+ SESSION_NAME="${SESSION_NAME:-$DEFAULT_SESSION_NAME}"
31
33
 
32
34
  LAST_BACKUP_DIR=""
33
35
  ROLLBACK_ON_EXIT=0
@@ -36,7 +38,7 @@ ROLLBACK_STAGING_ROOT=""
36
38
  ROLLBACK_PREVIOUS_ROOT=""
37
39
 
38
40
  log() {
39
- printf '[%s] %s\n' "$SCRIPT_NAME" "$*"
41
+ printf '[%s] [%s] [%s] %s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$SCRIPT_NAME" "$SESSION_NAME" "$*"
40
42
  }
41
43
 
42
44
  die() {
@@ -3,11 +3,9 @@ import { ConfigProvider } from 'tabby-core';
3
3
  export declare class BianbuMcpConfigProvider extends ConfigProvider {
4
4
  defaults: {
5
5
  bianbuMcp: {
6
- enabled: boolean;
7
6
  name: string;
8
- url: string;
7
+ domain: string;
9
8
  apiKey: string;
10
- minIntervalMs: number;
11
9
  maxRetries: number;
12
10
  retryBaseMs: number;
13
11
  interactiveConcurrency: number;
@@ -15,6 +13,7 @@ export declare class BianbuMcpConfigProvider extends ConfigProvider {
15
13
  workerCadenceMs: number;
16
14
  uploadChunkBytes: number;
17
15
  downloadChunkBytes: number;
16
+ maxConcurrentFiles: number;
18
17
  notes: string;
19
18
  installerRemotePath: string;
20
19
  maintenanceAsRoot: boolean;
@@ -48,6 +48,12 @@ export declare class BianbuCloudFilesTabComponent extends BaseTabComponent {
48
48
  private transferSeq;
49
49
  private transferQueue;
50
50
  private transferQueueRunning;
51
+ sortKey: 'name' | 'size' | 'date' | 'type';
52
+ sortAsc: boolean;
53
+ selectedIndices: Set<number>;
54
+ lastClickIndex: number;
55
+ detailPaneVisible: boolean;
56
+ advancedTransfersExpanded: boolean;
51
57
  constructor(injector: Injector, mcp: BianbuMcpService, notifications: NotificationsService, platform: PlatformService);
52
58
  ngOnInit(): void;
53
59
  get breadcrumbs(): string[];
@@ -56,6 +62,7 @@ export declare class BianbuCloudFilesTabComponent extends BaseTabComponent {
56
62
  onKeyDown(event: KeyboardEvent): void;
57
63
  refresh(): Promise<void>;
58
64
  applyFilter(): void;
65
+ sortItems(): void;
59
66
  navigateToInput(): void;
60
67
  navigate(path: string, pushHistory?: boolean): void;
61
68
  navigateBreadcrumb(index: number): void;
@@ -63,7 +70,7 @@ export declare class BianbuCloudFilesTabComponent extends BaseTabComponent {
63
70
  goForward(): void;
64
71
  goUp(): void;
65
72
  moveSelection(delta: number): void;
66
- selectItem(item: any): void;
73
+ selectItem(item: any, event?: MouseEvent): void;
67
74
  openItem(item: any): Promise<void>;
68
75
  saveSelected(): Promise<void>;
69
76
  openCreateDirectoryPrompt(): void;
@@ -93,12 +100,21 @@ export declare class BianbuCloudFilesTabComponent extends BaseTabComponent {
93
100
  private pumpTransferQueue;
94
101
  private runUploadTransfer;
95
102
  private runDownloadTransfer;
103
+ formatSize(bytes: number | null | undefined): string;
104
+ formatDate(iso: string | null | undefined): string;
105
+ fileIcon(item: any): string;
106
+ fileType(item: any): string;
107
+ toggleSort(key: 'name' | 'size' | 'date' | 'type'): void;
108
+ sortIndicator(key: string): string;
109
+ get totalSize(): string;
110
+ get selectionSummary(): string;
111
+ isSelected(index: number): boolean;
112
+ toggleDetailPane(): void;
96
113
  private clearPreview;
97
- private baseName;
114
+ baseName(path: string): string;
98
115
  private isTextLike;
99
116
  private joinPath;
100
117
  private uint8ToBase64;
101
118
  private base64ToUint8;
102
- private readFileAsBase64;
103
119
  }
104
120
  export {};