tabby-group-server-stats 1.7.2 → 1.7.4

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/NOTICE CHANGED
@@ -1,11 +1,12 @@
1
- Tabby Group Server Stats 1.7.1
1
+ Tabby Group Server Stats
2
2
 
3
3
  This project is a modified fork of Tabby Server Stats:
4
4
  https://github.com/kasuganosoras/tabby-server-stats
5
5
 
6
6
  Original work: Copyright (c) 2023 Akkariin Meiko.
7
7
  Original package author: Akkariin.
8
- Fork maintainer: lishuainan0209.
8
+ Fork author and maintainer: lishuainan0209.
9
+ Fork modifications: Copyright (c) 2026 lishuainan0209.
9
10
  Fork repository: https://github.com/lishuainan0209/tabby-group-server-stats
10
11
 
11
12
  The original MIT license and copyright notice are preserved in LICENSE.
@@ -1,8 +1,10 @@
1
1
  # 打包、本地测试与发布
2
2
 
3
- 本文面向 `tabby-group-server-stats 1.7.2` 的维护者。源码目录为 `D:\tabby-group-server-stats`;功能与预设说明见 [中文 README](README.md) / [English README](README.en.md)。
3
+ 本文面向 `tabby-group-server-stats 1.7.4` 的维护者。源码目录为 `D:\tabby-group-server-stats`;功能与预设说明见 [中文 README](README.md) / [English README](README.en.md)。
4
4
 
5
- 1.7.2 修正网速 MB/s 三位小数、底栏紧凑竖排和容量数字分列对齐。
5
+ 1.7.4 增加布局分屏独立范围与持久化底栏开关,组编辑默认折叠,改进标签卡片与删除确认,并统一 GB 单位显示。个人布局启动命令不包含在插件包中。
6
+
7
+ 1.7.3 统一 fork 作者和维护者为 lishuainan0209,加入预设重复添加保护,并完善中英文搜索元数据与安装说明;保留上游 MIT 版权与贡献声明,包含 1.7.2 的显示修正。
6
8
 
7
9
  1.7.0 增加 GitHub 预设导入、内置项持久化排序、清晰分区与卡片边框、紧凑组分隔,并更新磁盘汇总、登录会话名单、双向网络速率及累计量和默认颜色阈值。版本号不表示已经推送或发布。
8
10
 
@@ -46,10 +48,10 @@ TypeScript、Angular 和 Webpack 使用项目内依赖,不需要全局安装
46
48
  ```powershell
47
49
  npm.cmd pack --dry-run
48
50
  npm.cmd pack
49
- tar -tf .\tabby-group-server-stats-1.7.2.tgz
51
+ tar -tf .\tabby-group-server-stats-1.7.4.tgz
50
52
  ```
51
53
 
52
- `prepack` 自动执行类型检查、普通测试和正式构建;任一失败会阻止打包。浏览器测试需另外运行。产物为 `tabby-group-server-stats-1.7.2.tgz`,后续本地验收与发布应使用同一份已检查的包。[npm pack 文档](https://docs.npmjs.com/cli/v11/commands/npm-pack/)
54
+ `prepack` 自动执行类型检查、普通测试和正式构建;任一失败会阻止打包。浏览器测试需另外运行。产物为 `tabby-group-server-stats-1.7.4.tgz`,后续本地验收与发布应使用同一份已检查的包。[npm pack 文档](https://docs.npmjs.com/cli/v11/commands/npm-pack/)
53
55
 
54
56
  确认包内包含:
55
57
 
@@ -59,7 +61,7 @@ tar -tf .\tabby-group-server-stats-1.7.2.tgz
59
61
 
60
62
  离线预设会随构建打入插件,无需联网即可使用。用户点击“从 GitHub 导入”时才从当前 fork 的 `main/presets.json` 获取并合并预览,保留本地和此前导入的其他条目;远端内容以实际推送状态为准,不保证已包含本地新改动。检查包中没有 SSH 凭据、连接地址、用户配置、私有配置 ID 或开发用整个 `node_modules`。共享标签库也应只包含可公开的命令、说明和连接名称,不包含真实连接参数。
61
63
 
62
- `LICENSE` 必须保留原 MIT 全文及 Copyright (c) 2023 Akkariin Meiko;`NOTICE` 保留来源与 fork 修改说明。`package.json` 保留原作者,通过 `contributors` 标注 fork 维护者。依赖许可证继续分别适用。
64
+ `LICENSE` 必须保留原 MIT 全文及 Copyright (c) 2023 Akkariin Meiko;`NOTICE` 保留来源、原作者与 fork 修改说明。`package.json` 的 `author` 标注本 fork 作者和维护者 lishuainan0209,`contributors` 保留上游作者 Akkariin。依赖许可证继续分别适用。
63
65
 
64
66
  ## 在独立便携版 Tabby 中安装
65
67
 
@@ -72,7 +74,7 @@ Tabby 1.0.238 在发现 `Tabby.exe` 同级的 `data` 目录时将用户数据放
72
74
  ```powershell
73
75
  Set-Location -LiteralPath 'D:\tabby-group-server-stats'
74
76
  $testRoot = Join-Path (Get-Location).Path 'work\tabby-portable-test'
75
- $archive = (Resolve-Path -LiteralPath '.\tabby-group-server-stats-1.7.2.tgz').Path
77
+ $archive = (Resolve-Path -LiteralPath '.\tabby-group-server-stats-1.7.4.tgz').Path
76
78
 
77
79
  if (-not (Test-Path -LiteralPath (Join-Path $testRoot 'Tabby.exe'))) {
78
80
  throw '请先将 Tabby 便携版解压到测试目录。'
@@ -108,8 +110,9 @@ npm.cmd install --prefix "$pluginRoot" --omit=dev --legacy-peer-deps "$archive"
108
110
  10. **范围生命周期**:重命名保持关联;删除后不转为全局,同名新连接不继承。指定范围为空仍不显示。仅针对整个布局绑定,未标记的旧布局或刚保存的新布局重开一次,再检查恢复、分屏和移动窗格。
109
111
  11. **离线与 GitHub 库**:20 项(12 单标签、8 组)可离线搜索、加载和添加;GitHub 与 JSON 导入均只预览、点击添加才生效,保留当前及此前导入的条目并按同 ID 更新。检查 15 秒超时、2 MiB 上限、HTTP/JSON 错误时原列表不变。导出/导入保留类型、颜色规则、开关、来源与双语描述,不携带本地范围 ID。缺失或重名连接提示补选,保持指定范围为空而非全局。
110
112
  12. **磁盘与 GPU**:所有磁盘组主标签为总余量、系统盘为第一子标签;只汇总可读有效文件系统,同一文件系统的绑定挂载不重复计数。P1 宿主模板只绑定 P1(ai)、仅系统盘;P1 容器模板绑定 P1(s_lsn)、包含 `/public`。P0/P2/P4 检查 `/data`,P3 检查 `/data` 和 `/lsn_disk1`。GPU 主值为显存占比,详情用 `memory.free / 1024` 的 GiB;无设备主标签提示、缺失子 GPU 隐藏。
111
- 13. **登录用户与网络**:登录用户主值包含正常 tty/pts/console 会话,悬停按用户名稳定汇总;空数据为 `0`/`-`,命令失败不冒充空数据。网络按默认路由网卡优先、无路由时回退非回环网卡;Linux/macOS 下载和上传分别验证速率 KiB/s、累计 GiB 与网卡名称。累计量自接口建立或计数器重置起算,不是本次 SSH 登录后的流量。
113
+ 13. **登录用户与网络**:登录用户主值包含正常 tty/pts/console 会话,悬停按用户名稳定汇总;空数据为 `0`/`-`,命令失败不冒充空数据。网络按默认路由网卡优先、无路由时回退非回环网卡;Linux/macOS 下载和上传分别验证原始速率 KiB/s、显示速率 MB/s(三位小数)、累计 GiB 与网卡名称,颜色判断保持使用原始速率。累计量自接口建立或计数器重置起算,不是本次 SSH 登录后的流量。
112
114
  14. **阈值与双语**:红色规则先于橙色。逐一验证边界:单盘 20/40 GiB、总余量 50/100 GiB、GPU 显存 50/80%、RAM 60/80%、CPU 1min/5min 负载 100/150%;比较方向与包含边界应符合 README 表格。检查中英文切换、26 个图标搜索分类及自定义 SVG。
115
+ 15. **预设重复添加**:同来源、同稳定 ID 的单标签或标签组只添加一次;改名和禁用后仍能识别。旧配置结合命令与显示范围匹配,不仅凭标题去重;不同范围的旧配置不能被误判。防止新增重复项与清理历史副本分别验收,清理本地副本前保留配置备份。
113
116
 
114
117
  ## 发布到 npm
115
118
 
@@ -126,7 +129,7 @@ npm.cmd whoami --registry=https://registry.npmjs.org/
126
129
  验收通过后,手动发布刚才测试的同一个包:
127
130
 
128
131
  ```powershell
129
- npm.cmd publish .\tabby-group-server-stats-1.7.2.tgz --access public --registry=https://registry.npmjs.org/
132
+ npm.cmd publish .\tabby-group-server-stats-1.7.4.tgz --access public --registry=https://registry.npmjs.org/
130
133
  npm.cmd view tabby-group-server-stats version dist.tarball --registry=https://registry.npmjs.org/
131
134
  ```
132
135
 
@@ -136,4 +139,13 @@ npm.cmd view tabby-group-server-stats version dist.tarball --registry=https://re
136
139
 
137
140
  Tabby 1.0.238 的插件管理器通过 npm 的 `tabby-plugin` 关键词搜索,并过滤以 `tabby-` 开头的包名。本项目使用非 scoped 的 `tabby-group-server-stats`,且包含所需关键词。[插件管理器源码](https://github.com/Eugeny/tabby/blob/v1.0.238/tabby-plugin-manager/src/services/pluginManager.service.ts)
138
141
 
139
- 发布成功且 npm 搜索索引更新后,在 Tabby 设置 → 插件搜索 `group-server-stats`,安装并重启。索引可能不会立即更新;先用 `npm view` 确认版本和元数据,再刷新插件列表。推送 GitHub 或上传 GitHub Release 本身不会发布 npm 包。[Tabby 插件开发说明](https://github.com/Eugeny/tabby/blob/master/HACKING.md#plugins)
142
+ 发布成功且 npm 搜索索引更新后,在 Tabby 设置 → 插件 → 可用中搜索 **`maintainer:lishuainan0209`**,选择 **`group-server-stats`** 安装并重启。也可搜索包名,但新包可能排在大量结果后面;Tabby 的显示名称省略了 `tabby-` 前缀。先用 `npm view` 确认公开版本和元数据,再刷新插件列表。推送 GitHub 或上传 GitHub Release 本身不会发布 npm 包。[Tabby 插件开发说明](https://github.com/Eugeny/tabby/blob/master/HACKING.md#plugins)
143
+
144
+ 发布验收可以直接查询 Tabby 使用的搜索接口,确认结果包含目标版本:
145
+
146
+ ```powershell
147
+ $searchUrl = 'https://registry.npmjs.com/-/v1/search?text=keywords%3Atabby-plugin%20maintainer%3Alishuainan0209&size=250'
148
+ (Invoke-RestMethod -Uri $searchUrl).objects.package | Select-Object name, version
149
+ ```
150
+
151
+ `description` 和 `keywords` 只填写项目实际功能;本项目覆盖 Tabby、SSH 服务器监控、CPU、内存、GPU 显存、磁盘、网络、自定义指标和多标签组。npm 根据包名、描述、README 和关键词进行匹配,排序由 npm 决定。维护相关元数据有助于表达用途,但不能保证名次或索引更新时间;不要把下载量、GitHub 星标或重复发布写成必然提升排名的方法。[npm 搜索说明](https://docs.npmjs.com/searching-for-and-choosing-packages-to-download/)
package/README.en.md CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  [中文](README.md) | English
4
4
 
5
- Editable server metrics, hover details and metric groups for [Tabby](https://github.com/Eugeny/tabby). The current version is **1.7.2**, with more compact static rows, three-decimal MB/s rates, and aligned capacity columns.
5
+ SSH server monitoring for [Tabby](https://github.com/Eugeny/tabby): CPU load, memory, disk capacity, network rates and GPU memory metrics. Add custom shell commands, hover details and metric groups with overview, carousel or static layouts. The current version is **1.7.4**, adding duplicate-preset protection while retaining compact rows, three-decimal MB/s rates and aligned capacity columns.
6
6
 
7
- This is an MIT-licensed fork of [Akkariin's tabby-server-stats](https://github.com/kasuganosoras/tabby-server-stats). The version number alone does not mean that the package has been published to npm.
7
+ Fork author and maintainer: [lishuainan0209](https://github.com/lishuainan0209). This is an MIT-licensed fork of [Akkariin's tabby-server-stats](https://github.com/kasuganosoras/tabby-server-stats). The version number alone does not mean that the package has been published to npm.
8
+
9
+ **1.7.4 updates:** individual layout-pane scopes, linked checks for the same connection ID with individual opt-outs, bottom-bar-only display and a separate lower-left toggle in every pane.
8
10
 
9
11
  **The SSH hotfix from 1.6.1 is retained.** Previously, oversized SSH execution requests could disconnect the entire connection when many metrics were enabled. A fixed short command now receives the script through standard input in 8 KiB chunks, retaining the bounded completion acknowledgment. Transfer failures close only the statistics channel, without deliberately closing the terminal session or automatically rerunning user commands.
10
12
 
@@ -20,15 +22,17 @@ The preview uses example configuration data and the Chinese interface.
20
22
  - **Independent switches:** disable a standalone label, an entire group, its main label or individual children without deleting commands or color rules.
21
23
  - **Connection scopes:** select saved connections or layouts; each pane in a mixed layout retains its own connection identity.
22
24
  - **Editable, reorderable built-ins:** customize CPU, memory, disk and network definitions, move them up or down in both panels, or restore one built-in's defaults.
23
- - **Offline and GitHub library:** 20 bundled presets—12 standalone labels and 8 groups—with imports from this fork, JSON import/export and search.
25
+ - **Offline and GitHub library:** 20 bundled presets—12 standalone labels and 8 groups—with imports from this fork, JSON import/export and search; repeated clicks do not add another copy of an existing preset.
24
26
  - **Clear section and card borders:** separate built-ins, presets, standalone labels and groups; compact line separators between displayed groups.
25
27
  - **English/Chinese UI and 26 original monitoring icons:** searchable categories, existing icon support and custom SVGs.
26
28
 
27
- The bottom bar and floating panel share the same label renderer. Built-ins use the same checks, colors, scopes and details as custom metrics.
29
+ Display is fixed to the bottom status bar, with an enable switch in settings. Legacy floating-panel preferences automatically use the bottom bar. Built-ins use the same checks, colors, scopes and details as custom metrics. Group hover-detail popups remain available.
28
30
 
29
31
  ## Create a label
30
32
 
31
- Open Tabby Settings → Server Stats, then choose **Add single label**, or find a library preset and click **Add**. Importing from GitHub or JSON loads choices into the library; adding a preset puts it into the active configuration. Use the pencil button to edit an existing item. Within a group, each main/child label opens its own editor.
33
+ Open Tabby Settings → Bottom Status Bar, then choose **Add single label**, or find a library preset and click **Add**. Importing from GitHub or JSON loads choices into the library; adding a preset puts it into the active configuration. Use the pencil button to edit an existing item. Within a group, each main/child label opens its own editor.
34
+
35
+ Group cards place the main label and child labels on separate adjacent rows. The group's pencil button opens its editor with every member collapsed; clicking a bordered label button opens that member directly. Delete buttons sit at the lower right of their cards and ask for confirmation with the item's name. Deleting a child takes effect only after saving the whole group.
32
36
 
33
37
  New labels default to **text** and checks default to **output-text comparison**. Configure commands in this order:
34
38
 
@@ -81,11 +85,13 @@ Disabling the main label does not disable its children. Disabling one child leav
81
85
 
82
86
  CPU, memory and disk are standalone labels. Network is a vertical static group with download/upload children; its main label starts disabled. All use the common commands, checks, details, scopes and color rules rather than a separate hardcoded chart collector.
83
87
 
84
- Use each card's up/down buttons to reorder CPU, memory, disk and network. The order is persisted in `builtinOrder`, shared by the bottom bar and floating panel, and retained after restarting. Custom labels and groups retain their existing relative order.
88
+ Use each card's up/down buttons to reorder CPU, memory, disk and network. The order is persisted in `builtinOrder` and retained after restarting. Custom labels and groups retain their existing relative order.
85
89
 
86
90
  **Restore defaults** removes only the selected built-in's override, preserving its top-level enable switch and ordering, and leaving other built-ins and custom labels untouched. Restoring network resets that group's main/child definitions to their factory configuration.
87
91
 
88
- Built-in CPU, memory, disk and network commands support Linux/macOS; most other library presets target Linux. Download and upload show the current received/sent rates in decimal MB/s with three fractional digits and thousands separators. Commands still return KiB/s; thresholds continue to use raw values. Each direction's hover detail shows its own cumulative GiB and the interfaces included. Default-route interfaces are preferred; without a usable default route, eligible non-loopback interfaces are used. **Totals cover the time since interface creation or counter reset, not since the current SSH login.**
92
+ Built-in CPU, memory, disk and network commands support Linux/macOS; most other library presets target Linux. Download and upload show the current received/sent rates in decimal MB/s with three fractional digits and thousands separators. Commands still return KiB/s; thresholds continue to use raw values. Each direction's hover detail shows its own cumulative GB and the interfaces included. Default-route interfaces are preferred; without a usable default route, eligible non-loopback interfaces are used. **Totals cover the time since interface creation or counter reset, not since the current SSH login.**
93
+
94
+ Capacity and cumulative traffic use the **GB** label while retaining the existing base-1024 calculation (1024³ bytes per displayed unit). Only the unit name changes; readings and alert thresholds stay the same. Network rates in MB/s remain decimal.
89
95
 
90
96
  The target system needs `timeout`, `gtimeout` or `setsid` for bounded command execution.
91
97
 
@@ -95,6 +101,8 @@ The shipped library works offline. **Import from GitHub** reads [this fork's mai
95
101
 
96
102
  GitHub and JSON imports only preview entries: they do not execute commands or add status-bar items until you click **Add**. GitHub downloads have a 15-second timeout and a 2 MiB size limit, and do not upload local configuration or connection information. Search or export the current custom standalone labels and groups; exports omit built-in overrides. The format supports `kind: "metric"` and `kind: "group"`, and accepts the original flat metric array.
97
103
 
104
+ **Add each preset once.** Newly added standalone labels and groups record their source and stable preset ID. Renaming or disabling an item does not allow another copy to be added from the same preset. Legacy configuration without source markers is checked using commands and display scope rather than its name alone. This protection does not automatically delete historical duplicates: back up local configuration before removing unwanted copies.
105
+
98
106
  The 12 standalone presets cover uptime, temperature, system load, logged-in users, Docker containers, GPU memory, SSH sessions, SSH latency, I/O wait, CPU steal, failed services and service state. The 8 groups are:
99
107
 
100
108
  **Laboratory-specific presets: P0磁盘, P1磁盘, P1容器磁盘, P2磁盘, P3磁盘 and P4磁盘 are for the author's laboratory only. Other users: please do not download or use these presets.** Their mount paths and saved connection names are specific to the author's laboratory; they are not generic server templates. This usage-scope notice does not apply to the general GPU or CPU-load presets and does not change the rights granted by the MIT license.
@@ -110,11 +118,11 @@ The 12 standalone presets cover uptime, temperature, system load, logged-in user
110
118
  | GPU memory | Aggregate GPU memory; eight children GPU 0–7 | All panes |
111
119
  | CPU load | Thread count; 1-minute and 5-minute load | All panes |
112
120
 
113
- Each disk group's main label shows **aggregate free GiB** across its readable system and mounted data filesystems, deduplicating filesystems so bind mounts are not counted twice. The system disk is the first child, followed by data mounts; hover shows free/total capacity. Missing mounts are omitted from the aggregate while their child labels retain a notice by default. No readable valid filesystem produces an error, not a misleading zero.
121
+ Each disk group's main label shows **aggregate free GB** across its readable system and mounted data filesystems, deduplicating filesystems so bind mounts are not counted twice. The system disk is the first child, followed by data mounts; hover shows free/total capacity. Missing mounts are omitted from the aggregate while their child labels retain a notice by default. No readable valid filesystem produces an error, not a misleading zero.
114
122
 
115
123
  The **Users** preset counts system login records from `who`, including normal tty, pts and console sessions. Hover groups and sorts counts by username, for example `alice ×2, bob ×1`. Empty records produce a primary value of `0` and a detail of `-`; missing tools or execution failures remain errors. This is neither the current connection's username nor a count of every TCP or background SSH connection.
116
124
 
117
- GPU percentages mean **VRAM usage** (`memory.used / memory.total`), not `utilization.gpu`. Details query `memory.free` directly and divide by 1024 to display free/total GiB. The main GPU label keeps a no-GPU notice; nonexistent GPU children are hidden in every view by default.
125
+ GPU percentages mean **VRAM usage** (`memory.used / memory.total`), not `utilization.gpu`. Details query `memory.free` directly, retain the division by 1024, and show free/total memory with the GB label. The main GPU label keeps a no-GPU notice; nonexistent GPU children are hidden in every view by default.
118
126
 
119
127
  The P1 host and container are separate presets bound to separate saved connections. They must not be merged merely because they share a host address and use different ports.
120
128
 
@@ -128,8 +136,8 @@ The corresponding built-ins and presets use green `#00ff00`, orange `#ffa500` an
128
136
 
129
137
  | Metric | Red | Orange | Green |
130
138
  | --- | --- | --- | --- |
131
- | Free capacity per disk (GiB) | `< 20` | `20 ≤ x ≤ 40` | `> 40` |
132
- | Total free disk capacity (GiB) | `< 50` | `50 ≤ x ≤ 100` | `> 100` |
139
+ | Free capacity per disk (GB) | `< 20` | `20 ≤ x ≤ 40` | `> 40` |
140
+ | Total free disk capacity (GB) | `< 50` | `50 ≤ x ≤ 100` | `> 100` |
133
141
  | GPU memory usage (%) | `> 80` | `50 < x ≤ 80` | `≤ 50` |
134
142
  | RAM usage (%) | `> 80` | `60 < x ≤ 80` | `≤ 60` |
135
143
  | Normalized CPU 1min / 5min load (%) | `> 150` | `100 < x ≤ 150` | `≤ 100` |
@@ -138,17 +146,29 @@ GPU thresholds measure VRAM use, not GPU compute utilization. CPU load is normal
138
146
 
139
147
  ## Connection scopes and mixed panes
140
148
 
141
- A standalone label or whole group can select multiple saved connections or layouts. The default unrestricted scope covers every supported terminal pane. Group members inherit the group's scope; an unmatched pane does not run even the object's check.
149
+ A standalone label or whole group can select saved connections, whole layouts or individual panes within layouts. Layouts expand by default with indented pane entries. A pane remains selectable after its original connection profile is deleted, as long as the saved layout retains its copy. The default unrestricted scope covers every supported terminal pane. Group members inherit the group's scope; an unmatched pane does not run even the object's check.
142
150
 
143
- Matching uses each pane's **original saved connection ID**, not the focused pane, tab title, host address or a sibling connection. In a `P1 / P2 / P1` layout, P1-bound metrics appear in both P1 panes and P2-bound metrics only in the middle pane. A layout-bound metric applies to all three, executing independently in each session. Multiple selections form a union: choosing P1 plus the whole layout also includes its P2 pane.
151
+ Checking a connection selects every entry with the **same original connection ID**; unchecking affects only that entry. Per-pane opt-outs override connection-wide or layout-wide selections and survive saving, reopening and JSON export/import. A layout checkbox selects or clears only its own panes. Equal names with different IDs do not link selections.
152
+
153
+ Matching prioritizes each pane's **original saved connection ID**, not the focused pane, tab title or a sibling connection. If an old saved layout retains an obsolete connection ID, the plugin looks for exactly one current SSH profile with the same host, port, username and jump/proxy route. Missing or ambiguous matches do not inherit a scope. Hosts and containers on different ports remain separate. This compatibility fix is included in 1.7.4.
154
+
155
+ In a `P1 / P2 / P1` layout, P1-bound metrics appear in both P1 panes and P2-bound metrics only in the middle pane. A layout-bound metric applies to all three, executing independently in each session. Multiple selections form a union: choosing P1 plus the whole layout also includes its P2 pane.
144
156
 
145
157
  Renaming preserves the association. Deleted profiles remain marked unavailable and stop matching; a new profile with the same name does not inherit the old ID. Removing the last selection does not make the metric global—you must explicitly choose all terminal panes.
146
158
 
147
- Saved layouts have IDs separate from the connections inside them. The plugin records a layout's origin when it is opened and retains that marker in recovery data. For **whole-layout bindings only**, an unmarked layout already open before installation, or a newly saved layout, must be reopened once from the saved-profile list. Direct connection-ID bindings need no such reopening.
159
+ Saved layouts have IDs separate from the connections inside them. The plugin records a layout's origin when it is opened and retains that marker in recovery data. Whole-layout and individual-pane bindings require an unmarked layout already open before installation, or a newly saved layout, to be reopened once from the saved-profile list. Direct connection-ID bindings need no such reopening.
160
+
161
+ Individual pane bindings also require that layout-origin marker; reopen an unmarked old window from its saved layout once. Pane targets combine the layout ID, saved position and original connection ID, so repeated connections can be unchecked individually. After editing a saved layout or removing/replacing panes, review unavailable scope entries and select the intended targets again.
162
+
163
+ The small lower-left button in each pane controls only that pane's entire status bar. The button remains available when the bar is hidden. Saved layouts remember visibility separately for each occurrence: three identical connections can retain an off/off/on pattern when reopened, without affecting other layouts.
148
164
 
149
165
  ## Install, develop and publish
150
166
 
151
- After publication, search for `tabby-group-server-stats` in Tabby's plugin settings. Before publication, test a local `.tgz`. A GitHub fork, a successful build, npm publication and Tabby's search index are separate steps.
167
+ In **Tabby Settings → Plugins → Available**, search for **`maintainer:lishuainan0209`**, install **`group-server-stats`**, then restart Tabby. Filtering by maintainer makes the package easier to find when a newly published package appears low in a long result list. You can also search for `tabby-group-server-stats`; Tabby omits the `tabby-` prefix from the displayed name.
168
+
169
+ The description and keywords cover server monitoring, GPU memory, disk, network and metric groups. npm matches package names, descriptions, README content and keywords; npm controls result ordering, so metadata changes do not guarantee a particular ranking or immediate visibility. [npm search documentation](https://docs.npmjs.com/searching-for-and-choosing-packages-to-download/)
170
+
171
+ See the [npm package page](https://www.npmjs.com/package/tabby-group-server-stats) for public versions. Test unpublished local versions with a `.tgz`. A GitHub fork, a successful build, npm publication and Tabby's search index are separate steps.
152
172
 
153
173
  Development needs Node.js, npm, Git and Tabby. Global Angular CLI/Webpack installations and Python are not required for this project. Keep the lockfile and `.npmrc`, then run from the repository root:
154
174
 
@@ -161,7 +181,7 @@ npm.cmd run test:ui
161
181
  npm.cmd pack
162
182
  ```
163
183
 
164
- `npm pack` reruns type checking, unit tests and the production build, producing `tabby-group-server-stats-1.7.2.tgz`; compiled files are in `dist/`. Browser tests use real Angular components with simulated data, while command tests use a local shell. Live SSH command validation and desktop split-pane acceptance need their own recorded results.
184
+ `npm pack` reruns type checking, unit tests and the production build, producing `tabby-group-server-stats-1.7.4.tgz`; compiled files are in `dist/`. Browser tests use real Angular components with simulated data, while command tests use a local shell. Live SSH command validation and desktop split-pane acceptance need their own recorded results.
165
185
 
166
186
  This fork retains `plugin.serverStats` configuration compatibility. **Enable either the upstream plugin or this fork in a Tabby instance**, to avoid duplicate collection. An isolated portable Tabby installation is recommended for initial testing. See the [packaging, local-installation and publishing guide (Chinese)](PUBLISHING.zh-CN.md) for commands and acceptance checks.
167
187
 
@@ -176,3 +196,17 @@ Report problems or suggest improvements through [this project's Issues](https://
176
196
  - Convert KiB/s readings to MB/s with three fractional digits.
177
197
  - Remove gaps between static vertical rows, add thin separators, and reduce bottom-bar padding.
178
198
  - Right-align numeric columns and both sides of capacity ratios; hover popups retain comfortable spacing.
199
+
200
+ ### 1.7.3 attribution, duplicate presets and discovery
201
+
202
+ - Identify lishuainan0209 as this fork's author and maintainer, including fork preset sources.
203
+ - Retain Akkariin's upstream MIT copyright, source links and contributor credit.
204
+ - Prevent duplicate preset additions using source and stable ID, including renamed or disabled items; use commands and scope to recognize legacy entries.
205
+ - Add relevant bilingual metadata and document installation through maintainer search, without promising a search ranking.
206
+
207
+ ### 1.7.4 pane controls and editing
208
+
209
+ - Bind individual saved-layout panes, link checks for matching connection IDs and allow individual opt-outs, including legacy layout profiles.
210
+ - Use a fixed bottom bar with a persistent, independent lower-left toggle for each pane.
211
+ - Put main/child buttons together for direct editing; collapse group editors initially and move named deletion confirmations to the lower right.
212
+ - Display capacity as GB while retaining base-1024 readings and thresholds, with compatibility for legacy GiB configuration.
package/README.md CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  中文 | [English](README.en.md)
4
4
 
5
- 为 [Tabby](https://github.com/Eugeny/tabby) 提供可编辑的服务器指标、悬停详情和多标签组。当前版本为 **1.7.2**,进一步压缩静态底栏高度,支持网速 MB/s 三位小数及容量数字分列对齐。
5
+ 为 [Tabby](https://github.com/Eugeny/tabby) 提供 SSH 服务器监控(server monitoring):CPU 负载、内存、磁盘容量、网络速率和 GPU 显存指标。支持自定义 Shell 命令、悬停详情,以及概览、轮播、静态显示的多标签组(metric groups)。当前版本为 **1.7.4**,加入预设重复添加保护,保留紧凑底栏、MB/s 三位小数及容量数字分列对齐。
6
6
 
7
- 本项目基于 [Akkariin 的 tabby-server-stats](https://github.com/kasuganosoras/tabby-server-stats) 二次开发,继续使用 MIT 许可证。版本号不代表已经发布到 npm。
7
+ 本 fork 作者及维护者:[lishuainan0209](https://github.com/lishuainan0209)。本项目基于 [Akkariin 的 tabby-server-stats](https://github.com/kasuganosoras/tabby-server-stats) 二次开发,继续使用 MIT 许可证。版本号不代表已经发布到 npm。
8
+
9
+ **1.7.4 更新**:布局内分屏可独立选择;同连接 ID 勾选联动、取消逐项生效;固定底部栏,每个分屏左下角提供独立显示开关。
8
10
 
9
11
  **保留 1.6.1 的 SSH 热修复**:此前指标较多时,超长 SSH 执行请求可能导致整个连接断开。执行请求已改为固定短命令,脚本通过标准输入按 8 KiB 分块传输,保留完整接收后的有时限确认。传输失败只关闭本次统计通道,不主动关闭终端会话,也不会自动重跑用户命令。
10
12
 
@@ -18,17 +20,19 @@
18
20
  - **三条命令**:对象校验 → Shell 功能命令 → 悬停扩展信息;校验失败时不执行后两条。
19
21
  - **标签组**:主标签与多个子标签,支持概览、轮播、静态横排和静态竖排。
20
22
  - **分别启用**:单标签、整个标签组、组内主标签和每个子标签都能独立开关,配置及颜色规则保留。
21
- - **按连接显示**:多选保存的连接或布局,正确区分混合分屏中的每个会话。
22
- - **可编辑、可排序的内置指标**:CPU、内存、磁盘和网络可修改命令与样式,使用上下移按钮调整两种面板的显示顺序,也可单独恢复默认。
23
- - **离线与 GitHub 标签库**:内附 20 个预设(12 个单标签、8 个标签组),支持从本 fork 的 GitHub 导入、JSON 导入导出和搜索。
23
+ - **按连接或布局分屏显示**:多选保存的连接、整个布局或布局内单个分屏;同连接 ID 勾选联动,取消可逐个进行。
24
+ - **可编辑、可排序的内置指标**:CPU、内存、磁盘和网络可修改命令与样式,使用上下移按钮调整底部状态栏的显示顺序,也可单独恢复默认。
25
+ - **离线与 GitHub 标签库**:内附 20 个预设(12 个单标签、8 个标签组),支持从本 fork 的 GitHub 导入、JSON 导入导出和搜索;已添加的预设不会因重复点击而产生副本。
24
26
  - **清晰的区域与卡片边框**:内置指标、预设库、单标签、多标签组四块区域分别显示;状态栏组间采用紧凑细线分隔。
25
27
  - **中英文界面与 26 款原创图标**:图标按用途分类、可搜索,也支持原有图标和自定义 SVG。
26
28
 
27
- 底部状态栏与悬浮窗使用同一个标签显示组件,内置指标也遵循相同的校验、颜色、范围和悬停规则。
29
+ 显示方式固定为底部状态栏,设置页提供启用开关;旧配置中的浮动面板模式自动按底部栏处理。内置指标遵循与自定义标签相同的校验、颜色、范围和悬停规则,标签组的悬停详情弹窗仍保留。
28
30
 
29
31
  ## 从一个标签开始
30
32
 
31
- 在 Tabby 设置 → 服务器状态中,点击“添加单标签”,或从标签库选择一个预设后点击“添加”。从 GitHub 或 JSON 导入都只加载可选条目;点击“添加”才把对应条目加入当前配置。已有项目使用铅笔按钮编辑,组内主、子标签点击后分别展开编辑框。
33
+ 在 Tabby 设置 → 底部状态栏中,点击“添加单标签”,或从标签库选择一个预设后点击“添加”。从 GitHub 或 JSON 导入都只加载可选条目;点击“添加”才把对应条目加入当前配置。已有项目使用铅笔按钮编辑,组内主、子标签点击后分别展开编辑框。
34
+
35
+ 标签组卡片中,主标签与子标签分两行排列。点击标签组的铅笔按钮进入编辑时,主、子标签默认全部折叠;点击带边框的标签按钮则直接展开并编辑对应项目。删除按钮位于各自卡片右下角,并弹出包含名称的确认提示;子标签删除后仍需保存整个标签组才会生效。
32
36
 
33
37
  新建标签默认使用**文本值**,校验默认比较**输出文本**。每个标签的命令顺序为:
34
38
 
@@ -81,11 +85,13 @@ printf '%s\n' "$data" | awk 'NR==2 {print "available " $4 " / used " $3}'
81
85
 
82
86
  CPU、内存、磁盘是单标签;网络是静态竖排标签组,默认显示下载和上传,主标签默认关闭。它们与自定义项目使用相同的命令编辑、对象校验、扩展信息、显示范围和颜色规则,不再另走硬编码图表采集路径。
83
87
 
84
- 使用卡片右侧上下移按钮调整 CPU、内存、磁盘和网络的顺序。顺序保存在 `builtinOrder` 中,底部状态栏与悬浮窗一致,重开后保留;自定义单标签和标签组仍按各自原有顺序排列。
88
+ 使用卡片右侧上下移按钮调整 CPU、内存、磁盘和网络的顺序。顺序保存在 `builtinOrder` 中,重开后保留;自定义单标签和标签组仍按各自原有顺序排列。
85
89
 
86
90
  “恢复默认”只删除当前内置项的自定义覆盖,保留它的顶层启用开关和排列顺序,不影响其他内置项或自定义标签。网络恢复默认会恢复该组的出厂主、子标签配置。
87
91
 
88
- 内置 CPU、内存、磁盘和网络均包含 Linux/macOS 适配,多数其他离线预设面向 Linux。网络下载、上传主值分别是当前接收、发送速率,显示单位为 MB/s(十进制),固定三位小数并带千位逗号;采集命令仍输出 KiB/s,颜色规则继续按原始数值判断;各自悬停显示对应方向的累计 GiB 和参与统计的网卡。默认优先选择默认路由网卡,没有可用默认路由时回退到符合条件的非回环网卡。**累计量从接口建立或计数器重置起计算,不是本次 SSH 登录后的流量**。
92
+ 内置 CPU、内存、磁盘和网络均包含 Linux/macOS 适配,多数其他离线预设面向 Linux。网络下载、上传主值分别是当前接收、发送速率,显示单位为 MB/s(十进制),固定三位小数并带千位逗号;采集命令仍输出 KiB/s,颜色规则继续按原始数值判断;各自悬停显示对应方向的累计 GB 和参与统计的网卡。默认优先选择默认路由网卡,没有可用默认路由时回退到符合条件的非回环网卡。**累计量从接口建立或计数器重置起计算,不是本次 SSH 登录后的流量**。
93
+
94
+ 容量和累计流量统一标为 **GB**,沿用现有的 1024 进制计算口径(每单位 1024³ 字节),仅调整单位名称,数值和告警阈值保持不变;网络速率 MB/s 仍使用十进制。
89
95
 
90
96
  目标系统需要提供 `timeout`、`gtimeout` 或 `setsid` 之一,用于命令超时保护。
91
97
 
@@ -95,6 +101,8 @@ CPU、内存、磁盘是单标签;网络是静态竖排标签组,默认显
95
101
 
96
102
  从 GitHub 或 JSON 导入仅预览,不执行命令,也不自动添加到状态栏;逐项点击“添加”才生效。GitHub 获取具有 15 秒超时和 2 MiB 大小上限,不上传本地配置或连接信息。设置页还支持搜索和导出当前自定义单标签/标签组;导出不包含内置指标覆盖。JSON 同时支持 `kind: "metric"`、`kind: "group"`,也兼容原版的平铺单标签数组。
97
103
 
104
+ **同一预设只添加一次。** 新添加的单标签和标签组会记录来源与预设的稳定 ID;即使之后改名或禁用,再次点击同一预设也不会创建重复项。没有来源标记的旧配置,会结合命令和显示范围识别已有项目,避免仅凭名称误判。重复添加保护不会自动删除历史副本;清理已有重复项时,应先备份本地配置,再保留需要的那一份。
105
+
98
106
  12 个单标签覆盖运行时间、温度、系统负载、登录用户、Docker 容器、GPU 显存、SSH 会话、SSH 延迟、I/O 等待、CPU Steal、失败服务和服务状态。8 个标签组如下:
99
107
 
100
108
  **实验室专用预设说明:P0磁盘、P1磁盘、P1容器磁盘、P2磁盘、P3磁盘、P4磁盘均为作者实验室自用,其他人请勿下载使用。** 这些预设依赖作者实验室的挂载路径和连接配置,不是通用服务器模板。通用 GPU、CPU 负载等预设不受此适用范围提示影响。此提示用于说明适用环境,不改变 MIT 许可证授予的权利。
@@ -110,11 +118,11 @@ CPU、内存、磁盘是单标签;网络是静态竖排标签组,默认显
110
118
  | GPU 显存 | 全部 GPU 汇总;GPU 0–7 八个子标签 | 所有窗格 |
111
119
  | CPU负载 | 线程数;1 分钟、5 分钟负载 | 所有窗格 |
112
120
 
113
- 磁盘组主标签为**磁盘总余量 GiB**,汇总系统盘及该组有效挂载的数据盘,按文件系统去重,避免绑定挂载重复计数。系统盘是第一子标签,后接数据盘;每项悬停显示剩余/总容量。掉盘不进入汇总,其子标签默认保留“未挂载”提示;没有任何可读取的有效文件系统时显示错误,而不是伪装为 0。
121
+ 磁盘组主标签为**磁盘总余量 GB**,汇总系统盘及该组有效挂载的数据盘,按文件系统去重,避免绑定挂载重复计数。系统盘是第一子标签,后接数据盘;每项悬停显示剩余/总容量。掉盘不进入汇总,其子标签默认保留“未挂载”提示;没有任何可读取的有效文件系统时显示错误,而不是伪装为 0。
114
122
 
115
123
  “登录用户”主值统计 `who` 中的系统登录会话,包含正常 tty、pts 和控制台登录;悬停按用户名汇总并排序,例如 `alice ×2, bob ×1`。无人登录时主值为 `0`、详情为 `-`;工具缺失或执行失败保持错误提示。它不是当前连接用户名,也不等于所有 TCP 或后台 SSH 连接数。
116
124
 
117
- GPU 百分比是**显存使用率**(`memory.used / memory.total`),不是 `utilization.gpu` 计算利用率;悬停直接查询 `memory.free`,除以 1024 转为 GiB 后显示剩余/总显存。GPU 主标签无设备时保留提示,不存在的 GPU 子标签默认在所有视图隐藏。
125
+ GPU 百分比是**显存使用率**(`memory.used / memory.total`),不是 `utilization.gpu` 计算利用率;悬停直接查询 `memory.free`,沿用除以 1024 的计算口径,以 GB 标签显示剩余/总显存。GPU 主标签无设备时保留提示,不存在的 GPU 子标签默认在所有视图隐藏。
118
126
 
119
127
  整机 GPU 查询被异常设备阻断时,汇总命令会逐一查询 GPU 0–7,只汇总可读取的设备;没有可读取设备时显示“无GPU”。该提示表示查询不可用,不等同于确认机器未安装显卡。
120
128
 
@@ -128,8 +136,8 @@ P1 宿主与容器是两个独立模板,分别绑定各自连接;不能仅
128
136
 
129
137
  | 指标 | 红色 | 橙色 | 绿色 |
130
138
  | --- | --- | --- | --- |
131
- | 单盘剩余容量(GiB) | `< 20` | `20 ≤ x ≤ 40` | `> 40` |
132
- | 磁盘总剩余容量(GiB) | `< 50` | `50 ≤ x ≤ 100` | `> 100` |
139
+ | 单盘剩余容量(GB) | `< 20` | `20 ≤ x ≤ 40` | `> 40` |
140
+ | 磁盘总剩余容量(GB) | `< 50` | `50 ≤ x ≤ 100` | `> 100` |
133
141
  | GPU 显存使用率(%) | `> 80` | `50 < x ≤ 80` | `≤ 50` |
134
142
  | 内存使用率(%) | `> 80` | `60 < x ≤ 80` | `≤ 60` |
135
143
  | CPU 1min / 5min 归一化负载(%) | `> 150` | `100 < x ≤ 150` | `≤ 100` |
@@ -138,17 +146,29 @@ GPU 阈值衡量显存占用,不是 GPU 计算利用率;CPU 负载按逻辑
138
146
 
139
147
  ## 连接范围与混合分屏
140
148
 
141
- 单标签和整个标签组可以多选保存的连接或布局,默认“不限制范围”会在所有受支持的终端窗格显示。主、子标签继承组范围,范围不匹配时连校验命令也不运行。
149
+ 单标签和整个标签组可以多选保存的连接、整个布局或布局内单个分屏,默认“不限制范围”会在所有受支持的终端窗格显示。布局默认展开,分屏缩进显示;即使原连接配置已删除,只要布局中仍保留连接副本,就可以直接选择该分屏。主、子标签继承组范围,范围不匹配时连校验命令也不运行。
142
150
 
143
- 关联依据每个窗格实际使用的**原始连接配置 ID**,不依据窗口标题、当前焦点、主机地址或其他窗格。一个 `P1 / P2 / P1` 混合布局中,只绑定 P1 的指标在两个 P1 窗格出现;只绑定 P2 的指标只在中间窗格出现。绑定整个保存布局的公共指标在三格生效,各自在自己的会话采集。多选是并集:同时选择 P1 和整个布局会覆盖布局内的 P2。
151
+ 勾选一项连接时,列表中**原始连接 ID 相同**的所有对应项一起选中;取消时只取消当前项。单个分屏的取消优先于连接或整个布局的选择,保存、重开和 JSON 导入导出均保留此例外。布局复选框仅用于全选或取消本布局内的分屏。相同名称但不同 ID 不会联动。
152
+
153
+ 关联优先依据每个窗格实际使用的**原始连接配置 ID**,不依据窗口标题、当前焦点或其他窗格。旧保存布局中的连接 ID 已失效时,插件会按 SSH 地址、端口、用户名及跳板/代理路径查找唯一的现有连接;找不到或存在多个候选时不自动关联。宿主机和容器使用不同端口时不会混淆。此兼容修复已包含在 1.7.4 中。
154
+
155
+ 一个 `P1 / P2 / P1` 混合布局中,只绑定 P1 的指标在两个 P1 窗格出现;只绑定 P2 的指标只在中间窗格出现。绑定整个保存布局的公共指标在三格生效,各自在自己的会话采集。多选是并集:同时选择 P1 和整个布局会覆盖布局内的 P2。
144
156
 
145
157
  重命名不影响 ID 关联;删除连接后保留失效选择并停止匹配,同名新连接不会自动继承。删去最后一个选择也不会自动变为全局,必须明确切回“所有终端窗格”。
146
158
 
147
- 保存布局拥有独立于内部连接的 ID。插件会在打开已保存布局时记录布局来源并随恢复信息保存。只有**绑定整个布局**时,安装前已打开的未标记布局、或刚从当前分屏新保存的布局,需要从配置列表重新打开一次。按原始连接 ID 绑定不受此限制。
159
+ 保存布局拥有独立于内部连接的 ID。插件会在打开已保存布局时记录布局来源并随恢复信息保存。绑定整个布局或布局内单个分屏时,安装前已打开的未标记布局、或刚从当前分屏新保存的布局,需要从配置列表重新打开一次。按原始连接 ID 绑定不受此限制。
160
+
161
+ 布局内单个分屏的绑定也需要已记录的布局来源;未标记的旧窗口请从保存布局重新打开一次。分屏选项按布局 ID、保存时的位置和原始连接 ID 区分,同一连接重复出现也可逐个取消。修改保存布局、删除或替换分屏后,请检查范围列表中的失效项并重新选择。
162
+
163
+ 每个分屏左下角的小图标仅切换该分屏的整条状态栏。关闭后只保留图标,便于再次开启。保存布局内的开关状态按分屏独立持久化:三个相同连接可设为“关、关、开”,再次打开该布局仍保留这些状态,其他布局不受影响。
148
164
 
149
165
  ## 安装、开发与发布
150
166
 
151
- 正式发布后可在 Tabby 插件页搜索 `tabby-group-server-stats`。未发布时使用本地 `.tgz` 包测试。GitHub fork、构建成功、npm 发布和 Tabby 搜索索引是不同步骤。
167
+ 在 Tabby 设置 → 插件 → 可用中,搜索 **`maintainer:lishuainan0209`**,找到 **`group-server-stats`** 后安装并重启。这种按维护者筛选的方式可避免新包在大量搜索结果中排得靠后;也可搜索包名 `tabby-group-server-stats`。插件页显示名称会省略 `tabby-` 前缀。
168
+
169
+ 包的介绍和关键词包含服务器监控、GPU 显存、磁盘、网络与多标签组,便于按实际功能查找。npm 会匹配包名、描述、README 和关键词,但搜索位置由 npm 决定,元数据调整不保证排名或立即生效。[npm 搜索说明](https://docs.npmjs.com/searching-for-and-choosing-packages-to-download/)
170
+
171
+ 公开版本见 [npm 包页面](https://www.npmjs.com/package/tabby-group-server-stats)。尚未发布的本地版本使用 `.tgz` 包测试;GitHub fork、构建成功、npm 发布和 Tabby 搜索索引是不同步骤。
152
172
 
153
173
  开发需要 Node.js、npm、Git 和 Tabby;无需全局安装 Angular CLI、Webpack 或 Python。保留仓库锁文件及 `.npmrc`,在仓库根目录执行:
154
174
 
@@ -161,7 +181,7 @@ npm.cmd run test:ui
161
181
  npm.cmd pack
162
182
  ```
163
183
 
164
- `npm pack` 会再次执行类型检查、普通测试和正式构建,生成 `tabby-group-server-stats-1.7.2.tgz`;构建文件在 `dist/`。浏览器测试使用真实 Angular 组件与模拟数据,命令测试在本机 shell 运行;真实 SSH 命令验证与 Tabby 分屏验收需要分别记录结果。
184
+ `npm pack` 会再次执行类型检查、普通测试和正式构建,生成 `tabby-group-server-stats-1.7.4.tgz`;构建文件在 `dist/`。浏览器测试使用真实 Angular 组件与模拟数据,命令测试在本机 shell 运行;真实 SSH 命令验证与 Tabby 分屏验收需要分别记录结果。
165
185
 
166
186
  本 fork 继续使用 `plugin.serverStats` 配置,方便沿用已有指标。**同一个 Tabby 实例只启用原版或本 fork 其中一个**,避免重复采集。推荐先使用独立便携版测试。完整的本地安装命令、验收项目和 npm/Tabby 发布步骤见 [打包、测试与发布](PUBLISHING.zh-CN.md)。
167
187
 
@@ -176,3 +196,17 @@ npm.cmd pack
176
196
  - 网速由 KiB/s 换算为 MB/s,固定三位小数。
177
197
  - 静态竖排标签取消行间空隙,用细线分隔;底栏上下留白缩小。
178
198
  - 同组数值右对齐,容量详情中斜杠两侧数字分别对齐,悬停弹窗保留较宽松行距。
199
+
200
+ ### 1.7.3 署名、预设去重与搜索说明
201
+
202
+ - 本 fork 的作者和维护者统一为 lishuainan0209,预设来源同步标注。
203
+ - 保留上游作者 Akkariin 的 MIT 版权、来源链接和贡献声明。
204
+ - 预设按来源和稳定 ID 防止重复添加,改名或禁用后仍能识别;旧配置以命令与显示范围辅助匹配。
205
+ - 补充中英文功能描述与相关关键词,并说明按维护者搜索安装的方法;不承诺搜索排名。
206
+
207
+ ### 1.7.4 分屏控制与编辑体验
208
+
209
+ - 布局内分屏可独立绑定,同连接 ID 勾选联动、取消逐项生效,兼容旧布局的连接副本。
210
+ - 固定底部状态栏,每个分屏左下角独立开关,保存布局重新打开后保持各自状态。
211
+ - 主、子标签按钮相邻排列,可直接编辑对应成员;组编辑默认折叠,删除移至右下角并确认名称。
212
+ - 容量统一显示 GB,保留原有 1024 进制数值与告警阈值,兼容旧 GiB 配置。