dsh-crossterm 0.7.3 → 0.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/CHANGELOG.md +16 -0
- package/README.md +7 -9
- package/lib/bus.js +1 -1
- package/lib/index.js +11 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# dsh-crossterm 变更记录
|
|
2
2
|
|
|
3
|
+
## 0.7.4 — 2026-10-19
|
|
4
|
+
|
|
5
|
+
### 没写收件人的信封不再卡死:回落「最近活跃会话」
|
|
6
|
+
|
|
7
|
+
- 现象:0.7.3 的跨设备 `term_send` 只写 `to.device`、不写会话名时,对方中转站收到信却**投不出去** ——
|
|
8
|
+
`relayDeliver()` 一看收件人列表为空就返回「信封里没有收件人(要填会话名)」,按设计「失败留件」,
|
|
9
|
+
于是信一直躺在对方 `shared/<设备>/inbox/` 里。实测:本机 17:44 与 17:52 发给 YOCE_C 的两封都还在它 inbox 里、`done/` 是空的。
|
|
10
|
+
- 修法(`lib/index.js` 的 `relayDeliver`):收件人为空时不再直接失败,改为取本机会话列表里
|
|
11
|
+
**活跃会话优先、否则第一个**(`const latest = list.find((s) => s && s.active) || list[0]`),
|
|
12
|
+
用它做收件人并把「(信封没写收件人,按「最近活跃会话」投给「X」)」写进正文;
|
|
13
|
+
连一个会话都没有时才回「信封里没有收件人,本机也没有可投递的会话」。
|
|
14
|
+
- 效果:别的设备直接 `term_send` 到本机(不指会话)也能进到当前在聊的那个会话;发信侧照旧只写设备名即可。
|
|
15
|
+
- 探针 `probe-relay-fallback.mjs`:5 项全 PASS(fallback 分支、活跃会话优先、无会话明确失败、提示文案、名字回落短号);
|
|
16
|
+
`probe-cloud-send.mjs` 24 项不回归。
|
|
17
|
+
- 要不要跟着动手:**要** —— 收信方必须 ≥0.7.4 才能接住「没写收件人」的信;发信方 0.7.3 就够。
|
|
18
|
+
|
|
3
19
|
## 0.7.3 — 2026-10-19
|
|
4
20
|
|
|
5
21
|
### 跨设备 term_send:本机总线找不到时自动走云端信封
|
package/README.md
CHANGED
|
@@ -28,15 +28,13 @@ A 终端看不到 B 终端里有哪个会话、在干什么,也没法把一条
|
|
|
28
28
|
> `locatePkgJson()` 对子路径行返回 undefined),而插件页顶部标题与这一行共用同一份 `locale/zh.json` 的 meta,
|
|
29
29
|
> 所以它单独做总开关,标题带「(总开关)」;卡片头用 `shortTitle` 显示短名「跨端互通」。
|
|
30
30
|
|
|
31
|
-
**本版更新(0.7.
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
- 已知边界:跨设备**一发多投**(`term_broadcast` 走特征码)仍只在本机总线上扩散,云端群发后续再做。
|
|
39
|
-
- 要不要跟着动手:**不用** —— 但两边都要 ≥0.7.3 才能互相 `term_send`。
|
|
31
|
+
**本版更新(0.7.4)**
|
|
32
|
+
|
|
33
|
+
- **没写收件人的信不再卡住**:别的设备直接 `term_send` 到本机(只写设备名、不指会话)时,收信方会投给
|
|
34
|
+
**最近活跃的会话**,并在正文注明「信封没写收件人,按最近活跃会话投给 X」;连一个会话都没有才留件。
|
|
35
|
+
- 起因:0.7.3 发信只写设备名,对方 `relayDeliver()` 见收件人为空就判失败、按设计留件 —— 实测两封信在对方 inbox 里躺了半小时。
|
|
36
|
+
- 只改收信侧:发信方 0.7.3 就够,**收信方要 ≥0.7.4**。
|
|
37
|
+
- 要不要跟着动手:**要** —— 至少把收信的那台升上来。
|
|
40
38
|
|
|
41
39
|
## 一、安装与卸载
|
|
42
40
|
|
package/lib/bus.js
CHANGED
package/lib/index.js
CHANGED
|
@@ -816,10 +816,18 @@ class CrossTerm {
|
|
|
816
816
|
|
|
817
817
|
/** 中转站投递:把云端收件箱里的一封信投进本机对应会话(按收件人会话名) */
|
|
818
818
|
async relayDeliver({ to, envelope = {}, files = [] }) {
|
|
819
|
-
|
|
819
|
+
let targets = (Array.isArray(to) ? to : String(to || '').split(/[,,;;\s]+/))
|
|
820
820
|
.map((s) => String(s || '').trim())
|
|
821
821
|
.filter(Boolean)
|
|
822
|
-
|
|
822
|
+
let fallbackNote = ''
|
|
823
|
+
if (!targets.length) {
|
|
824
|
+
// 信封里没写收件人(例如别的设备直接 term_send 到本机、没指会话)→ 投给最近活跃会话
|
|
825
|
+
const list = this.sessions()
|
|
826
|
+
const latest = list.find((s) => s && s.active) || list[0]
|
|
827
|
+
if (!latest) return { ok: false, reason: '信封里没有收件人,本机也没有可投递的会话' }
|
|
828
|
+
targets = [latest.name || latest.short]
|
|
829
|
+
fallbackNote = `(信封没写收件人,按「最近活跃会话」投给「${targets[0]}」)`
|
|
830
|
+
}
|
|
823
831
|
const controller = this.sessionController()
|
|
824
832
|
if (!controller || typeof controller.prompt !== 'function') {
|
|
825
833
|
return { ok: false, reason: '本 Host 没有 sessionController.prompt,中转站只能留件' }
|
|
@@ -837,6 +845,7 @@ class CrossTerm {
|
|
|
837
845
|
const bad = files.filter((f) => !f || !f.local)
|
|
838
846
|
if (bad.length) lines.push('', `(有 ${bad.length} 个附件没下载下来:${bad.map((f) => (f && f.name) || '未知').join('、')})`)
|
|
839
847
|
lines.push('', `(这封信由云端中转站投递;收件人:${targets.join('、')}。回复用 term_send。)`)
|
|
848
|
+
if (fallbackNote) lines.push(fallbackNote)
|
|
840
849
|
const text = lines.join('\n')
|
|
841
850
|
const delivered = []
|
|
842
851
|
const failed = []
|