dsh-crossterm 0.9.9 → 0.9.11
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 +18 -0
- package/MAINTAINERS.md +39 -24
- package/README.md +19 -10
- package/components/session/manifest.json +1 -1
- package/lib/bus.js +20 -1
- package/lib/index.js +6 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## 0.9.11 — 2026-10-20
|
|
2
|
+
|
|
3
|
+
### 负责人变更(只改文档,无代码改动)
|
|
4
|
+
|
|
5
|
+
- 负责人变更:`b6aa099b`(互通插件主维护)→ `3195b037`(「插件—互通插件负责人001」,工作区 `H:\dshGZQ\dsh-crossterm`),时间 2026-10-20 19:55,依据机主指令「负责人交接,权限交接:插件—互通插件负责人001」。
|
|
6
|
+
- 发版权限一并移交:此后版本号、备份、npm 发布、zip、云盘上传、重启都由新负责人执行。
|
|
7
|
+
- `MAINTAINERS.md` 的 `current` / `previous[]` / `modules` / 任期表已同步;助手 `ccf34a5a` 随交接暂停派活,去留由新负责人决定。
|
|
8
|
+
- 组件版本不变(跨会话仍 0.5.2 等),本版只变更归属。
|
|
9
|
+
|
|
10
|
+
## 0.9.10 — 2026-10-20
|
|
11
|
+
|
|
12
|
+
### 修复:无主链台账收口(清除所有特征码的最后一步)
|
|
13
|
+
|
|
14
|
+
- 现象:本机 `links` 里没有某串码的记录、`chains/<code>.json` 里只剩别的机器早已下线的成员,`term_unlink all=true` 只能回「本终端没有接在特征码上」,台账留在磁盘上没人清。
|
|
15
|
+
- 修法:`lib/bus.js` 新增 `dropChainIfOrphan(code, nodeId)` —— 本节点不在链上、且链上所有成员节点都离线(超过 `offlineAfterMs * 3`)时删掉该链文件;`unlinkChain()` 的 ghost 分支在上一步没摘到成员时调用它,成功返回 `{ ok:true, droppedChain:true }`。
|
|
16
|
+
- 安全性:本节点是成员、或有任一成员在线时一律不删;探针 `probe-0910.mjs` 10 项覆盖四种分支。
|
|
17
|
+
- 组件版本:跨会话 `0.5.1` → `0.5.2`。
|
|
18
|
+
|
|
1
19
|
## 0.9.9 — 2026-10-20
|
|
2
20
|
|
|
3
21
|
### 修复:幽灵链成员退不掉(YOCE_C 报告)
|
package/MAINTAINERS.md
CHANGED
|
@@ -7,14 +7,15 @@
|
|
|
7
7
|
<!-- maintainers
|
|
8
8
|
{
|
|
9
9
|
"current": {
|
|
10
|
-
"session": "session-
|
|
11
|
-
"short": "
|
|
12
|
-
"name": "
|
|
10
|
+
"session": "session-3195b037-9ebd-4e9a-83dd-fb6acfc8a77c",
|
|
11
|
+
"short": "3195b037",
|
|
12
|
+
"name": "插件—互通插件负责人001",
|
|
13
13
|
"role": "负责人",
|
|
14
14
|
"terminal": "TS-01",
|
|
15
15
|
"nodeId": "ts-01-a52535",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
16
|
+
"workspace": "H:\\dshGZQ\\dsh-crossterm",
|
|
17
|
+
"since": "2026-10-20T19:55:00+08:00",
|
|
18
|
+
"basis": "机主指令:「负责人交接,权限交接:插件—互通插件负责人001」"
|
|
18
19
|
},
|
|
19
20
|
"assistant": {
|
|
20
21
|
"session": "session-ccf34a5a-ad6d-4423-9fa8-fd6ffc44052b",
|
|
@@ -24,47 +25,59 @@
|
|
|
24
25
|
"terminal": "TS-01",
|
|
25
26
|
"nodeId": "ts-01-a52535",
|
|
26
27
|
"since": "2026-10-18T00:00:00+08:00",
|
|
27
|
-
"scope": "按负责人派活改 lib/*.js;不得改版本号、总线状态、重启、C 盘写入、AGENTS.md"
|
|
28
|
+
"scope": "按负责人派活改 lib/*.js;不得改版本号、总线状态、重启、C 盘写入、AGENTS.md",
|
|
29
|
+
"status": "2026-10-20 19:55 随负责人交接暂停派活;是否续用由新负责人 3195b037 决定"
|
|
28
30
|
},
|
|
29
31
|
"modules": {
|
|
30
32
|
"ui": {
|
|
31
|
-
"session": "session-
|
|
32
|
-
"short": "
|
|
33
|
+
"session": "session-3195b037-9ebd-4e9a-83dd-fb6acfc8a77c",
|
|
34
|
+
"short": "3195b037",
|
|
33
35
|
"role": "入口/自更新组件负责人(= 插件负责人)",
|
|
34
36
|
"since": "2026-10-20",
|
|
35
37
|
"scope": "components/ui/**、client/**、lib/web.js 的卡片与自动更新、locale/**"
|
|
36
38
|
},
|
|
37
39
|
"session": {
|
|
38
|
-
"session": "session-
|
|
39
|
-
"short": "
|
|
40
|
+
"session": "session-3195b037-9ebd-4e9a-83dd-fb6acfc8a77c",
|
|
41
|
+
"short": "3195b037",
|
|
40
42
|
"role": "跨会话组件负责人(= 插件负责人)",
|
|
41
43
|
"since": "2026-10-20",
|
|
42
44
|
"scope": "components/session/**、lib/bus.js 的链/邮件/收件箱"
|
|
43
45
|
},
|
|
44
46
|
"terminal": {
|
|
45
|
-
"session": "session-
|
|
46
|
-
"short": "
|
|
47
|
+
"session": "session-3195b037-9ebd-4e9a-83dd-fb6acfc8a77c",
|
|
48
|
+
"short": "3195b037",
|
|
47
49
|
"role": "跨工作区组件负责人(= 插件负责人)",
|
|
48
50
|
"since": "2026-10-20",
|
|
49
51
|
"scope": "components/terminal/**、本机 presence / term_send / term_send_files"
|
|
50
52
|
},
|
|
51
53
|
"device": {
|
|
52
|
-
"session": "session-
|
|
53
|
-
"short": "
|
|
54
|
+
"session": "session-3195b037-9ebd-4e9a-83dd-fb6acfc8a77c",
|
|
55
|
+
"short": "3195b037",
|
|
54
56
|
"role": "跨设备组件负责人(= 插件负责人)",
|
|
55
57
|
"since": "2026-10-20",
|
|
56
58
|
"scope": "components/device/**、lib/cloud/**(中转站、备份、layout)"
|
|
57
59
|
},
|
|
58
60
|
"restart": {
|
|
59
|
-
"session": "session-
|
|
60
|
-
"short": "
|
|
61
|
+
"session": "session-3195b037-9ebd-4e9a-83dd-fb6acfc8a77c",
|
|
62
|
+
"short": "3195b037",
|
|
61
63
|
"role": "自动重启组件负责人(暂由插件负责人直管,等后续交接时任命新的)",
|
|
62
64
|
"since": "2026-10-20",
|
|
63
65
|
"scope": "components/restart/ 下的 core.js、runtime.js、scripts/**",
|
|
64
|
-
"rule": "原负责人 a3e9f80e 已于 2026-10-20 19:33 交回维护权(机主指示:转给插件负责人,等负责人任命新的);暂由
|
|
66
|
+
"rule": "原负责人 a3e9f80e 已于 2026-10-20 19:33 交回维护权(机主指示:转给插件负责人,等负责人任命新的);暂由 3195b037 直管,只改 components/restart/** 时把组件版本号(现 0.3.29)加一,仍由插件负责人统一发版"
|
|
65
67
|
}
|
|
66
68
|
},
|
|
67
69
|
"previous": [
|
|
70
|
+
{
|
|
71
|
+
"session": "session-b6aa099b-cfa6-42b7-961c-10f720236219",
|
|
72
|
+
"short": "b6aa099b",
|
|
73
|
+
"name": "互通插件主维护(第三任)",
|
|
74
|
+
"role": "负责人",
|
|
75
|
+
"terminal": "TS-01",
|
|
76
|
+
"nodeId": "ts-01-a52535",
|
|
77
|
+
"from": "2026-10-18T00:59:27+08:00",
|
|
78
|
+
"to": "2026-10-20T19:55:00+08:00",
|
|
79
|
+
"reason": "机主指令交接给「插件—互通插件负责人001」"
|
|
80
|
+
},
|
|
68
81
|
{
|
|
69
82
|
"session": "session-6ef6da30-a7f1-4a4e-...",
|
|
70
83
|
"short": "6ef6da30",
|
|
@@ -86,11 +99,11 @@
|
|
|
86
99
|
|
|
87
100
|
| 组件(插件页顺序) | 当前版本 | 负责人 | 范围 | 规矩 |
|
|
88
101
|
|---|---|---|---|---|
|
|
89
|
-
| ① 跨端互通(自更新) | v0.9.3 | `
|
|
90
|
-
| ② 跨会话 | v0.5.
|
|
91
|
-
| ③ 跨工作区 | v0.1.0 | `
|
|
92
|
-
| ④ 跨设备 | v0.4.0 | `
|
|
93
|
-
| ⑤ 自动重启 | v0.3.29 | `
|
|
102
|
+
| ① 跨端互通(自更新) | v0.9.3 | `3195b037` | `components/ui/**`、`client/**`、`locale/**`、`lib/web.js` | 组件版本号在 `components/ui/manifest.json` |
|
|
103
|
+
| ② 跨会话 | v0.5.2 | `3195b037` | `components/session/**`、`lib/bus.js` 的链/邮件 | 同上 |
|
|
104
|
+
| ③ 跨工作区 | v0.1.0 | `3195b037` | `components/terminal/**`、presence / `term_send` | 同上 |
|
|
105
|
+
| ④ 跨设备 | v0.4.0 | `3195b037` | `components/device/**`、`lib/cloud/**` | 同上 |
|
|
106
|
+
| ⑤ 自动重启 | v0.3.29 | `3195b037`(暂管;原 `a3e9f80e` 已于 2026-10-20 19:33 交回) | `components/restart/**`(`core.js` / `runtime.js` / `scripts/**`) | 不单独发版;新负责人等后续交接时任命;只动它就把它的版本号加一 |
|
|
94
107
|
|
|
95
108
|
**组件版本号怎么升**:只在该组件自己的文件改动时升它(在 `components/<part>/manifest.json` 的 `version`),
|
|
96
109
|
跟着插件一起发版;插件总版本仍按发版技能的三分位规则。插件页与 `GET /crossterm/api/about` 的 `components[].version` 读的就是这里。
|
|
@@ -108,9 +121,10 @@
|
|
|
108
121
|
| 起(本地时间) | 止(本地时间) | 会话 | 终端 / nodeId | 角色 | 交接依据 |
|
|
109
122
|
| --- | --- | --- | --- | --- | --- |
|
|
110
123
|
| 2026-10-17 20:30 | 2026-10-18 01:09 | `session-6ef6da30…`(初版负责人) | TS-01 / `ts-01-a52535` | 负责人 | 会话故障,转录停止增长、投递不消费;用户改派 |
|
|
111
|
-
| 2026-10-18 00:59 |
|
|
124
|
+
| 2026-10-18 00:59 | 2026-10-20 19:55 | `session-b6aa099b…`(互通插件主维护) | TS-01 / `ts-01-a52535` | 负责人 | 用户首条指令:「你现在是互通插件的新负责人」;交卸依据:机主「负责人交接,权限交接」 |
|
|
125
|
+
| 2026-10-20 19:55 | 至今 | `session-3195b037…`(插件—互通插件负责人001) | TS-01 / `ts-01-a52535`(工作区 `H:\dshGZQ\dsh-crossterm`) | 负责人 | 机主指令:「负责人交接,权限交接:插件—互通插件负责人001」 |
|
|
112
126
|
| 2026-10-20 19:33 | 2026-10-20 19:33 | `session-a3e9f80e…`(自动重启组件) | TS-01 / `ts-01-a52535` | 组件负责人 | 交回:机主指示「将组件权限转给插件负责人,等负责人任命新的」 |
|
|
113
|
-
| 2026-10-17 21:44 |
|
|
127
|
+
| 2026-10-17 21:44 | 2026-10-20 19:55(随交接暂停派活,去留由新负责人定) | `session-ccf34a5a…`(同端多会话2) | TS-01 / `ts-01-a52535` | 助手 | 用户:「指定同端多会话2为你的助手,部分修改可让他进行」 |
|
|
114
128
|
|
|
115
129
|
时间口径:接手取该会话转录 `session.v4.jsonl.zstd` 的**创建时间**,交卸取其**最后写入时间**(本机 `C:\Users\Administrator\.dsh\sessions\--F-dsh-001X--\<会话>\`)。
|
|
116
130
|
|
|
@@ -126,6 +140,7 @@
|
|
|
126
140
|
|
|
127
141
|
```json
|
|
128
142
|
{"at":"2026-10-18T00:59:27+08:00","from":"6ef6da30","to":"b6aa099b","role":"负责人","basis":"用户交接:原负责人会话故障"}
|
|
143
|
+
{"at":"2026-10-20T19:55:00+08:00","from":"b6aa099b","to":"3195b037","role":"负责人","basis":"机主指令:负责人交接,权限交接:插件—互通插件负责人001"}
|
|
129
144
|
```
|
|
130
145
|
|
|
131
146
|
## 规则(与 AGENTS.md §7 一致)
|
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ A 终端看不到 B 终端里有哪个会话、在干什么,也没法把一条
|
|
|
19
19
|
| 顺序 | 组件名称 | 版本 | 作用 | 工具 |
|
|
20
20
|
|---|---|---|---|---|
|
|
21
21
|
| ① | 跨端互通(入口/自更新) | v0.9.3 | 自更新开关:打开后定期检查 npm 新版本并自动安装(默认关;装完要重启 DSH 生效)。关掉它只失去卡片与自动更新,下面四个组件照常工作。裸包名行,承载插件标题/简介与配置卡片,不挂工具 | — |
|
|
22
|
-
| ② | 跨会话 | v0.5.
|
|
22
|
+
| ② | 跨会话 | v0.5.2 | 同一终端里的多个会话之间互通:特征码链、内联邮件、收件箱 | `term_link` `term_unlink` `term_broadcast` `term_inbox` `term_config` |
|
|
23
23
|
| ③ | 跨工作区 | v0.1.0 | 在本机不同工作区、不同会话之间互发邮件与文件(跨终端本轮不做,暂无条件) | `term_whoami` `term_list` `term_send` `term_send_files` |
|
|
24
24
|
| ④ | 跨设备 | v0.4.0 | 经云端中转站,在多台机器的 DSH 之间互发邮件与文件 | `term_cloud` |
|
|
25
25
|
| ⑤ | 自动重启 | v0.3.29 | 改完插件/配置后让 DSH 自己重启一次,并自动拉起离线会话(原 `dsh-restart` 插件,0.9.0 起并入) | `dsh_restart` |
|
|
@@ -30,7 +30,21 @@ A 终端看不到 B 终端里有哪个会话、在干什么,也没法把一条
|
|
|
30
30
|
>
|
|
31
31
|
> 组件版本号怎么升:**只在该组件自己的文件改动时升它**,跟着插件一起发版(例:只改自动重启 → `components/restart` 的 `0.3.28` → `0.3.29`,其余四个不动)。插件总版本仍按发版技能的三分位规则。
|
|
32
32
|
|
|
33
|
-
**本版更新(0.9.
|
|
33
|
+
**本版更新(0.9.11)**
|
|
34
|
+
|
|
35
|
+
- **负责人交接**:本插件维护权与发版权限由 `b6aa099b` 移交给 `3195b037`(显示名「插件—互通插件负责人001」,工作区 `H:\dshGZQ\dsh-crossterm`),时间 2026-10-20 19:55,依据机主「负责人交接,权限交接」。
|
|
36
|
+
- 本版只改文档:`MAINTAINERS.md`(`current` / `previous[]` / `modules` / 任期表)、`AGENTS.md` §7、发版技能、`README` 负责人段。
|
|
37
|
+
- 助手 `ccf34a5a`(同端多会话2)随交接暂停派活,是否续用由新负责人决定;其他会话仍只读。
|
|
38
|
+
- 功能零变化:跨会话 0.5.2 / 跨工作区 0.1.0 / 跨设备 0.4.0 / 自动重启 0.3.29 / 入口 0.9.3。
|
|
39
|
+
|
|
40
|
+
**上一版(0.9.10)**
|
|
41
|
+
|
|
42
|
+
- **「清除所有特征码」最后一步收口**:本终端已经不在某串码上、links 里也没有记录、而这串码上的成员全部离线时,`term_unlink ... all=true` 现在会把这份无主台账一并删掉(返回 `droppedChain:true`),不用再人工去删 `chains/<code>.json`。
|
|
43
|
+
- 判定很保守:本节点还在链上、或有任何一个成员节点在线(含刚心跳过),都**不会**删;只清「谁都不在线」的残档。
|
|
44
|
+
- 起因:0.9.9 修好了「台账有本机成员却退不掉」,但还有一种「本机根本没有成员、别的机器早解散了」的残档,之前只能人工删文件(C 盘写入要审批)。
|
|
45
|
+
- 组件版本:跨会话 0.5.1 → **0.5.2**,其余组件不动。
|
|
46
|
+
|
|
47
|
+
**上一版(0.9.9)**
|
|
34
48
|
|
|
35
49
|
- **修「幽灵链成员」退不掉**(YOCE_C 2026-10-20 报的坑):`term_unlink ... all=true` 以前只遍历内存里的 links,遇到「链台账里还留着本终端成员、但 links 已没有这条记录」就永远退不掉(一直回「本终端没有接在特征码上」)。
|
|
36
50
|
- 现在 `all=true` 在 links 为空时也会按 **nodeId** 把本终端在这串码上的成员从台账里摘掉,返回值带 `ghosts`;成员清空时链文件自动删除。
|
|
@@ -38,14 +52,9 @@ A 终端看不到 B 终端里有哪个会话、在干什么,也没法把一条
|
|
|
38
52
|
- 显式传 `sessionId` 的行为不变——只退那一个,不动其它会话(笔误不会误删)。
|
|
39
53
|
- 组件版本:跨会话 0.5.0 → **0.5.1**,其余组件不动。
|
|
40
54
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- **自动重启组件交回维护权**:原负责人会话「自动重启」按机主指示即日起停止改动,`components/restart/**` 暂由插件负责人 `b6aa099b` 直管;新负责人等后续交接时再任命(`MAINTAINERS.md` 的 `modules.restart` 已改,旧负责人记入任期)。
|
|
44
|
-
- 它交回时留了两条观察,已记进 `MAINTAINERS.md` 的「待定事项」,下次动这个组件前先定口径。
|
|
45
|
-
- 只改 `MAINTAINERS.md` / `CHANGELOG.md` / README,代码与组件版本都不动。
|
|
46
|
-
|
|
47
|
-
**更早(0.9.7 / 0.9.6 / 0.9.5 / 0.9.4 / 0.9.3 / 0.9.2 / 0.9.0 / 0.8.14 / 0.8.13 / 0.8.12 / 0.8.11 / 0.8.10 / 0.8.9 / 0.8.8 / 0.8.7 / 0.8.6 / 0.8.5 / 0.8.0)**
|
|
55
|
+
**更早(0.9.8 / 0.9.7 / 0.9.6 / 0.9.5 / 0.9.4 / 0.9.3 / 0.9.2 / 0.9.0 / 0.8.14 / 0.8.13 / 0.8.12 / 0.8.11 / 0.8.10 / 0.8.9 / 0.8.8 / 0.8.7 / 0.8.6 / 0.8.5 / 0.8.0)**
|
|
48
56
|
|
|
57
|
+
- 0.9.8:自动重启组件维护权交回、暂由插件负责人直管;只改文档。
|
|
49
58
|
- 0.9.7:组件版本按机主要求重新定起点(跨会话 v0.5.0 / 跨设备 v0.4.0 / 跨工作区 v0.1.0)。
|
|
50
59
|
- 0.9.6:去掉「跨账号」组件,插件页变成 5 个组件。
|
|
51
60
|
- 0.9.5:组件「跨终端」改名「跨工作区」(跨终端本轮不做)。
|
|
@@ -499,7 +508,7 @@ dsh/
|
|
|
499
508
|
共享盘方式下,谁能写这个目录,谁就能往你的会话里塞话。
|
|
500
509
|
- 文件落地目录可被 agent 读写,`inboxDir` 建议指向专门目录而非系统目录。
|
|
501
510
|
- **谁能改这个插件**:看仓库根目录的 [`MAINTAINERS.md`](./MAINTAINERS.md)。当前负责人是
|
|
502
|
-
`session-
|
|
511
|
+
`session-3195b037…`(「插件—互通插件负责人001」,TS-01 / `ts-01-a52535`,自 2026-10-20 19:55),助手是 `session-ccf34a5a…`
|
|
503
512
|
(同端多会话2,只能按负责人派活改 `lib/*.js`)。其他会话(QQ 会话、别的终端/窗口)默认只读,
|
|
504
513
|
可协助测试与报 bug;**要改代码必须经用户明确点名允许**(见工作区 `AGENTS.md` 第 7 条)。
|
|
505
514
|
|
package/lib/bus.js
CHANGED
|
@@ -23,7 +23,7 @@ import path from 'node:path'
|
|
|
23
23
|
import crypto from 'node:crypto'
|
|
24
24
|
import { rotateIfNeeded } from './logs.js'
|
|
25
25
|
|
|
26
|
-
export const VERSION = '0.9.
|
|
26
|
+
export const VERSION = '0.9.11'
|
|
27
27
|
|
|
28
28
|
/** DSH 的家目录:与宿主其它状态(sessions / profiles)同一个根,多终端天然共享 */
|
|
29
29
|
export function dshHome() {
|
|
@@ -544,6 +544,25 @@ export class Bus {
|
|
|
544
544
|
return { code, removed, found: true }
|
|
545
545
|
}
|
|
546
546
|
|
|
547
|
+
/**
|
|
548
|
+
* 无主台账清理:本节点不在链上、且链上所有成员所属节点都离线 / 过期时,把这串码的本地台账删掉。
|
|
549
|
+
* 场景:别的机器早就解散了链,本机 links 里也没有它,但 chains/<code>.json 还留着离线成员记录 ——
|
|
550
|
+
* 以前只能人工删文件(C 盘写入要审批),0.9.10 让 term_unlink all=true 顺手收口。
|
|
551
|
+
*/
|
|
552
|
+
async dropChainIfOrphan(code, nodeId) {
|
|
553
|
+
const file = this.chainFile(code)
|
|
554
|
+
const chain = await readJson(file)
|
|
555
|
+
if (!chain || !Array.isArray(chain.members)) return { code, dropped: false, reason: 'no-chain' }
|
|
556
|
+
if (chain.members.some((m) => m.nodeId === nodeId)) return { code, dropped: false, reason: 'self-member' }
|
|
557
|
+
const nodes = await this.listNodes().catch(() => [])
|
|
558
|
+
const alive = new Map(nodes.map((n) => [n.nodeId, Number(n.updatedAt) || 0]))
|
|
559
|
+
const limit = Date.now() - this.cfg.offlineAfterMs * 3
|
|
560
|
+
const anyAlive = chain.members.some((m) => (alive.get(m.nodeId) || 0) >= limit)
|
|
561
|
+
if (anyAlive) return { code, dropped: false, reason: 'member-online', members: chain.members.length }
|
|
562
|
+
await fsp.unlink(file).catch(() => {})
|
|
563
|
+
return { code, dropped: true, members: chain.members.length }
|
|
564
|
+
}
|
|
565
|
+
|
|
547
566
|
/** 剔掉已经不存在的成员(进程退出 / 长时间没心跳) */
|
|
548
567
|
async pruneChain(code, nodes) {
|
|
549
568
|
const chain = await readJson(this.chainFile(code))
|
package/lib/index.js
CHANGED
|
@@ -1191,6 +1191,12 @@ class CrossTerm {
|
|
|
1191
1191
|
await this.note(`unlinked ${norm} [ghost ${ghost.removed}]`)
|
|
1192
1192
|
return { ok: true, code: norm, removed: ghost.removed, ghosts: ghost.removed, empty: !!ghost.empty, sessions: [] }
|
|
1193
1193
|
}
|
|
1194
|
+
// 本终端在台账里也没有成员:如果这串码上的成员全部离线,就当无主台账清掉(0.9.10)
|
|
1195
|
+
const orphan = await this.bus.dropChainIfOrphan(norm, this.nodeId).catch(() => undefined)
|
|
1196
|
+
if (orphan && orphan.dropped) {
|
|
1197
|
+
await this.note(`unlinked ${norm} [orphan chain, ${orphan.members} 个离线成员]`)
|
|
1198
|
+
return { ok: true, code: norm, removed: 0, droppedChain: true, empty: true, sessions: [] }
|
|
1199
|
+
}
|
|
1194
1200
|
}
|
|
1195
1201
|
return { ok: false, detail: `本终端${scope.length ? `的会话 ${this.labelOf(scope[0])}` : ''}没有接在特征码「${norm}」上` }
|
|
1196
1202
|
}
|