dsh-crossterm 0.9.0 → 0.9.1
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 +11 -0
- package/README.md +12 -18
- package/cordis.patch.yml +69 -69
- package/lib/bus.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# dsh-crossterm 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.9.1 — 2026-10-20
|
|
4
|
+
|
|
5
|
+
**修 0.9.0 的致命笔误:`cordis.patch.yml` 注释少写两个 `#`,整份 overlay 解析失败**
|
|
6
|
+
|
|
7
|
+
- 现象:升级到 0.9.0 的机器启动时 `YAMLException: end of the stream or a document separator is expected (41:1)`,
|
|
8
|
+
`dsh plugin list` 报 `Cannot validate installed package dsh-crossterm`,插件整包不加载(卡片、总线、工具全没了)。
|
|
9
|
+
- 根因:加第 ⑥ 行说明时把两行注释写成了正文(缩进 4 空格、没有 `#`),YAML 走到 `- insert:` 就认为文档已结束。
|
|
10
|
+
- 修法:这两行补回 `#`;`js-yaml` 解析校验 `insert` 共 6 行,id 依次为
|
|
11
|
+
`crossterm-ui / crossterm-session / crossterm-terminal / crossterm-device / crossterm-account / crossterm-restart`。
|
|
12
|
+
- **教训(写进发版流程)**:改完 `cordis.patch.yml` 必须真实解析一次(`js-yaml` 读一遍、看 `insert` 行数与 id),
|
|
13
|
+
光靠肉眼看注释块不够 —— 这类错误会让插件启动即失效,而且探针只测文本、测不出解析失败。
|
|
3
14
|
## 0.9.0 — 2026-10-20
|
|
4
15
|
|
|
5
16
|
**自动重启并进互通插件(插件页第 6 个组件)**
|
package/README.md
CHANGED
|
@@ -29,26 +29,20 @@ A 终端看不到 B 终端里有哪个会话、在干什么,也没法把一条
|
|
|
29
29
|
> `locatePkgJson()` 对子路径行返回 undefined),而插件页顶部标题与这一行共用同一份 `locale/zh.json` 的 meta,
|
|
30
30
|
> 所以它单独做入口(配置卡片 + 自动更新开关),标题带「(自更新)」;卡片头用 `shortTitle` 显示短名「跨端互通」。
|
|
31
31
|
|
|
32
|
-
**本版更新(0.9.
|
|
32
|
+
**本版更新(0.9.1)**
|
|
33
|
+
|
|
34
|
+
- **修 0.9.0 的启动即失效**:`cordis.patch.yml` 里第 ⑥ 行的两行说明漏了开头的 `#`,
|
|
35
|
+
整份 overlay 解析失败,插件整包不加载(卡片、总线、工具全没有)。0.9.1 补回注释符;
|
|
36
|
+
发版流程加了一条硬规矩:**改完 `cordis.patch.yml` 必须用 `js-yaml` 真解析一次,核对 `insert` 行数与 id**。
|
|
37
|
+
- 0.9.0 的 npm 包与安装 zip 都带这份坏 YAML,请直接装 0.9.1。
|
|
38
|
+
|
|
39
|
+
**上一版(0.9.0)**
|
|
33
40
|
|
|
34
|
-
- **升级当次就能提示「待重启」**:以前这一步要等服务端换成新版才认得出来(YOCE_C 回归的第 3/4 步就是这样「看不见」)。
|
|
35
|
-
现在浏览器 client 自己带版本号(`CLIENT_VERSION`),点完更新就从 `/update` 响应的 `installed` / `before` 判断,
|
|
36
|
-
立刻把卡片切成「已装待重启」;渲染时还会按「磁盘版本 > 进程版本」持续推导,旧进程也提示得出来。
|
|
37
|
-
- `/check` 多返回一个 `running`(= 进程版本),与 `current` 并列,旧客户端也能照常解析。
|
|
38
41
|
- **自动重启并进来当第 6 个组件**:原 `dsh-restart` 插件的 `dsh_restart` 工具与 8 个 helper 脚本并入 `lib/restart/`,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
- 旧的 `dsh-restart-module` 插件还装着时会重复注册 `dsh_restart`,需在 profile 里摘掉它(本机另行处理)。
|
|
44
|
-
- 本机是 `link:` 源码版,没有这层差别;以上对用 npm 安装的设备生效。
|
|
45
|
-
|
|
46
|
-
**上一版(0.8.15)**
|
|
47
|
-
|
|
48
|
-
- **「更新」按钮不再看起来没用**:装完新版但还没重启时,卡片多一行「待重启」、
|
|
49
|
-
更新按钮变成不可点的「已装待重启」,接口 `/check` 改回 `needRestart=true` 而不是继续报「有更新」。
|
|
50
|
-
- 根因是状态表达:宿主进程里还是旧版本号,而磁盘上已经装了新版 —— 现在这两个版本分开显示。
|
|
51
|
-
- 本机是 `link:` 源码版(磁盘版本永远等于源码版本),所以这行只会在 npm 安装的设备上出现。
|
|
42
|
+
插件页多一行「自动重启」;脚本首次启动时同步到 `<总线目录>/restart-module/`(默认 `C:\Users\<你>\.dsh\crossterm\restart-module`)。
|
|
43
|
+
- 该模块不参与总线,只往每个会话挂 `dsh_restart`;由原 `dsh-restart` 会话(`a3e9f80e`,会话名「自动重启」)继续维护,
|
|
44
|
+
**不再单独发版**,改完报主维护会话、由主维护会话并入本插件一起发。
|
|
45
|
+
- 旧的 `dsh-restart-module` 插件若还装着会重复注册 `dsh_restart`,需在 profile 里摘掉。
|
|
52
46
|
|
|
53
47
|
**更早(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)**
|
|
54
48
|
|
package/cordis.patch.yml
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
# ============================================================================
|
|
2
|
-
# dsh-crossterm —— DSH bundle patch
|
|
3
|
-
# ============================================================================
|
|
4
|
-
# 安装(本地目录,对每个要互通的 profile 各装一次):
|
|
5
|
-
# dsh plugin --profile desktop add link:F:\dsh\001X\dsh-crossterm
|
|
6
|
-
# dsh plugin --profile web add link:F:\dsh\001X\dsh-crossterm
|
|
7
|
-
# 卸载:
|
|
8
|
-
# dsh plugin --profile desktop remove dsh-crossterm
|
|
9
|
-
#
|
|
10
|
-
# 每个 insert 行在 DSH「插件 → 跨端互通 → 包含的组件」里是一行组件,可单独开关。
|
|
11
|
-
# 五行指向同一个包,只是走不同子路径 / 不同 config.part:
|
|
12
|
-
#
|
|
13
|
-
# ① dsh-crossterm 自更新(入口):插件页标题/简介/配置卡片,不挂任何工具
|
|
14
|
-
# (config.part: ui)。0.8.9 起它不再是总开关 —— 关掉它只失去
|
|
15
|
-
# 卡片与「自动更新」,下面四个组件照常跑。
|
|
16
|
-
# 自动更新默认关,开关在卡片里,值落 config.json 的 autoUpdate。
|
|
17
|
-
# ② dsh-crossterm/parts/session 跨会话:term_link / term_unlink / term_broadcast / term_inbox / term_config
|
|
18
|
-
# ③ dsh-crossterm/parts/terminal 跨终端:term_whoami / term_list / term_send / term_send_files
|
|
19
|
-
# ④ dsh-crossterm/parts/device 跨设备:term_cloud(云端总线同步)
|
|
20
|
-
# ⑤ dsh-crossterm/parts/account 跨账号:预留占位,暂不挂工具
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
#
|
|
24
|
-
# 组件名来自 package.json 的 exports 映射:
|
|
25
|
-
# "./parts/session/package.json" -> "./parts/session.manifest.json"
|
|
26
|
-
# 每个组件显示自己的中文名,实际加载的仍是 lib/index.js,靠 config.part 决定挂哪组工具。
|
|
27
|
-
#
|
|
28
|
-
# 为什么入口行必须用「裸包名」:浏览器的 client 半端只对裸包名行生效
|
|
29
|
-
# (dsh-client-modules 的 locatePkgJson 对子路径行直接返回 undefined),而插件页顶部标题
|
|
30
|
-
# 与裸包名行共用同一份 locale/zh.json 的 meta —— 所以裸包名行单独做入口(卡片 + 自动更新),
|
|
31
|
-
# 标题写「跨端互通(自更新)」,四个业务组件排在它后面、名字仍是跨会话/跨终端/跨设备/跨账号。
|
|
32
|
-
#
|
|
33
|
-
# 0.8.9 起五个组件互不依赖:谁都不用 provide/inject 别人,各挂各的工具与开销。
|
|
34
|
-
# 关掉入口行只失去「配置卡片 + 自动更新」,四个业务组件照常工作、各自仍可单独关。
|
|
35
|
-
# 之前(0.7.x–0.8.8)是 ui 行 provide('crossterm')、其余四行 inject 它,关入口会连坐——已废弃。
|
|
36
|
-
#
|
|
37
|
-
# 前五个组件在同一 DSH 进程里共用一份总线实例(自动重启不参与,它只挂自己的工具):心跳只起一次,云同步只在 device 组件启用
|
|
38
|
-
# 且 config.json 里 cloudEnabled=true 时才跑。安装/改动后需重启对应的 DSH 进程。
|
|
39
|
-
# ============================================================================
|
|
40
|
-
|
|
41
|
-
- insert:
|
|
42
|
-
- id: crossterm-ui
|
|
43
|
-
# 入口(自更新):裸包名,浏览器半端的配置卡片 + 插件页标题/简介 + 「自动更新」开关。
|
|
44
|
-
# 关掉这一行只失去卡片与自动更新,四个业务组件不受影响;它自己不挂工具。
|
|
45
|
-
name: dsh-crossterm
|
|
46
|
-
config:
|
|
47
|
-
part: ui
|
|
48
|
-
- id: crossterm-session
|
|
49
|
-
name: dsh-crossterm/parts/session
|
|
50
|
-
config:
|
|
51
|
-
part: session
|
|
52
|
-
- id: crossterm-terminal
|
|
53
|
-
name: dsh-crossterm/parts/terminal
|
|
54
|
-
config:
|
|
55
|
-
part: terminal
|
|
56
|
-
- id: crossterm-device
|
|
57
|
-
name: dsh-crossterm/parts/device
|
|
58
|
-
config:
|
|
59
|
-
part: device
|
|
60
|
-
- id: crossterm-account
|
|
61
|
-
name: dsh-crossterm/parts/account
|
|
62
|
-
config:
|
|
63
|
-
part: account
|
|
64
|
-
- id: crossterm-restart
|
|
65
|
-
# 自动重启(原 dsh-restart 插件):不参与总线,只挂 dsh_restart 工具。
|
|
66
|
-
# helper 脚本随包分发在 lib/restart/scripts/,启动时复制到 <busDir>/restart-module/。
|
|
67
|
-
name: dsh-crossterm/parts/restart
|
|
68
|
-
config:
|
|
69
|
-
part: restart
|
|
1
|
+
# ============================================================================
|
|
2
|
+
# dsh-crossterm —— DSH bundle patch
|
|
3
|
+
# ============================================================================
|
|
4
|
+
# 安装(本地目录,对每个要互通的 profile 各装一次):
|
|
5
|
+
# dsh plugin --profile desktop add link:F:\dsh\001X\dsh-crossterm
|
|
6
|
+
# dsh plugin --profile web add link:F:\dsh\001X\dsh-crossterm
|
|
7
|
+
# 卸载:
|
|
8
|
+
# dsh plugin --profile desktop remove dsh-crossterm
|
|
9
|
+
#
|
|
10
|
+
# 每个 insert 行在 DSH「插件 → 跨端互通 → 包含的组件」里是一行组件,可单独开关。
|
|
11
|
+
# 五行指向同一个包,只是走不同子路径 / 不同 config.part:
|
|
12
|
+
#
|
|
13
|
+
# ① dsh-crossterm 自更新(入口):插件页标题/简介/配置卡片,不挂任何工具
|
|
14
|
+
# (config.part: ui)。0.8.9 起它不再是总开关 —— 关掉它只失去
|
|
15
|
+
# 卡片与「自动更新」,下面四个组件照常跑。
|
|
16
|
+
# 自动更新默认关,开关在卡片里,值落 config.json 的 autoUpdate。
|
|
17
|
+
# ② dsh-crossterm/parts/session 跨会话:term_link / term_unlink / term_broadcast / term_inbox / term_config
|
|
18
|
+
# ③ dsh-crossterm/parts/terminal 跨终端:term_whoami / term_list / term_send / term_send_files
|
|
19
|
+
# ④ dsh-crossterm/parts/device 跨设备:term_cloud(云端总线同步)
|
|
20
|
+
# ⑤ dsh-crossterm/parts/account 跨账号:预留占位,暂不挂工具
|
|
21
|
+
# ⑥ dsh-crossterm/parts/restart 自动重启:dsh_restart(原 dsh-restart 插件,0.9.0 起并入)
|
|
22
|
+
# 它不碰总线,只把 dsh_restart 工具挂到每个会话上。
|
|
23
|
+
#
|
|
24
|
+
# 组件名来自 package.json 的 exports 映射:
|
|
25
|
+
# "./parts/session/package.json" -> "./parts/session.manifest.json"
|
|
26
|
+
# 每个组件显示自己的中文名,实际加载的仍是 lib/index.js,靠 config.part 决定挂哪组工具。
|
|
27
|
+
#
|
|
28
|
+
# 为什么入口行必须用「裸包名」:浏览器的 client 半端只对裸包名行生效
|
|
29
|
+
# (dsh-client-modules 的 locatePkgJson 对子路径行直接返回 undefined),而插件页顶部标题
|
|
30
|
+
# 与裸包名行共用同一份 locale/zh.json 的 meta —— 所以裸包名行单独做入口(卡片 + 自动更新),
|
|
31
|
+
# 标题写「跨端互通(自更新)」,四个业务组件排在它后面、名字仍是跨会话/跨终端/跨设备/跨账号。
|
|
32
|
+
#
|
|
33
|
+
# 0.8.9 起五个组件互不依赖:谁都不用 provide/inject 别人,各挂各的工具与开销。
|
|
34
|
+
# 关掉入口行只失去「配置卡片 + 自动更新」,四个业务组件照常工作、各自仍可单独关。
|
|
35
|
+
# 之前(0.7.x–0.8.8)是 ui 行 provide('crossterm')、其余四行 inject 它,关入口会连坐——已废弃。
|
|
36
|
+
#
|
|
37
|
+
# 前五个组件在同一 DSH 进程里共用一份总线实例(自动重启不参与,它只挂自己的工具):心跳只起一次,云同步只在 device 组件启用
|
|
38
|
+
# 且 config.json 里 cloudEnabled=true 时才跑。安装/改动后需重启对应的 DSH 进程。
|
|
39
|
+
# ============================================================================
|
|
40
|
+
|
|
41
|
+
- insert:
|
|
42
|
+
- id: crossterm-ui
|
|
43
|
+
# 入口(自更新):裸包名,浏览器半端的配置卡片 + 插件页标题/简介 + 「自动更新」开关。
|
|
44
|
+
# 关掉这一行只失去卡片与自动更新,四个业务组件不受影响;它自己不挂工具。
|
|
45
|
+
name: dsh-crossterm
|
|
46
|
+
config:
|
|
47
|
+
part: ui
|
|
48
|
+
- id: crossterm-session
|
|
49
|
+
name: dsh-crossterm/parts/session
|
|
50
|
+
config:
|
|
51
|
+
part: session
|
|
52
|
+
- id: crossterm-terminal
|
|
53
|
+
name: dsh-crossterm/parts/terminal
|
|
54
|
+
config:
|
|
55
|
+
part: terminal
|
|
56
|
+
- id: crossterm-device
|
|
57
|
+
name: dsh-crossterm/parts/device
|
|
58
|
+
config:
|
|
59
|
+
part: device
|
|
60
|
+
- id: crossterm-account
|
|
61
|
+
name: dsh-crossterm/parts/account
|
|
62
|
+
config:
|
|
63
|
+
part: account
|
|
64
|
+
- id: crossterm-restart
|
|
65
|
+
# 自动重启(原 dsh-restart 插件):不参与总线,只挂 dsh_restart 工具。
|
|
66
|
+
# helper 脚本随包分发在 lib/restart/scripts/,启动时复制到 <busDir>/restart-module/。
|
|
67
|
+
name: dsh-crossterm/parts/restart
|
|
68
|
+
config:
|
|
69
|
+
part: restart
|
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.1'
|
|
27
27
|
|
|
28
28
|
/** DSH 的家目录:与宿主其它状态(sessions / profiles)同一个根,多终端天然共享 */
|
|
29
29
|
export function dshHome() {
|