@oatelauser/crosschat 1.3.2 → 1.3.3
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 +21 -0
- package/README.md +164 -15
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/send.js +100 -11
- package/dist/commands/send.js.map +1 -1
- package/dist/envelope.js +2 -1
- package/dist/envelope.js.map +1 -1
- package/dist/federation.js +242 -0
- package/dist/federation.js.map +1 -0
- package/dist/platform/machine-id.js +38 -0
- package/dist/platform/machine-id.js.map +1 -0
- package/dist/ref.js +188 -7
- package/dist/ref.js.map +1 -1
- package/package.json +1 -1
- package/skills/crosschat/SKILL.md +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,27 @@
|
|
|
3
3
|
本项目的全部显著变更记录于此。格式参照 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本遵循 [SemVer](https://semver.org/lang/zh-CN/)。
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
|
+
## [1.3.3] - 2026-10-07
|
|
7
|
+
|
|
8
|
+
### 跨机联邦 v1(ssh + 远端 CLI,全矩阵实测)
|
|
9
|
+
|
|
10
|
+
- `--via ssh:<别名>` 跨机发送:远端 CLI 全权(名字/id8 解析、投递、发件箱都在对端),body 走 stdin 免三方 shell 引号地狱,回执三态透传(delivered/queued/parked 带 `@对端` 后缀)
|
|
11
|
+
- 三层错误码:远端业务错**同码重抛**(`[via 对端]` 前缀,自纠指引原样有效)/ REMOTE_FAILED / SSH_TRANSPORT_FAILED(附 `ssh 对端 crosschat --version` 探活指引);BatchMode 防首连交互卡死(实测 1.6s 快速失败)
|
|
12
|
+
- **回复闭环**:信封回复命令自动带 `--via`(取自 ref 机器字段),照抄即回;`--conversation` 缺 `--via` 时按 ref 自动补全
|
|
13
|
+
- **mc2_ 紧凑会话引用**:296→83 字符(3.6×),每轮双方上下文直省;mc1_ 永久兼容
|
|
14
|
+
- **machine-id 双身份**:m(hostname) 管路由别名、mid(机器指纹) 管同机判定——**两台同名机器照常互通**(别名命名空间自解 + ⚠ 同名警告),自环模式(ssh localhost 测自己)与跨机两全
|
|
15
|
+
- 发起侧审计:跨机发送本机 send-log 补记(含失败),`--conversations` 自然显示己方跨机端对
|
|
16
|
+
- 修复:跨机回复无限 ssh 乒乓(自动补全只认呼叫方对端,B11);origin 全 id 过线(ref 可路由,B8)
|
|
17
|
+
- 部署:README 联邦节手册化——两端 ssh config 逐行样例、密钥五步(管理员组/`wsl -u root` 解鸡生蛋/keyscan 非标端口)、别名=对端 hostname 规则、自环测试步骤、win 收件腿 codex 不可用(AF_UNIX 会话隔离)注记
|
|
18
|
+
- 完整剧本重写:任务下达/汇报/复核/验收全程消息往返,零文件载体
|
|
19
|
+
- 实测档案:localhost 全链路 + win↔WSL 双腿 + 用户亲测三轮(drill-reports 三份)
|
|
20
|
+
|
|
21
|
+
### 其他
|
|
22
|
+
|
|
23
|
+
- `TARGET_NOT_FOUND` / `CALLER_NOT_IN_CONVERSATION` 错误文案补 `--to` 自动接续自愈指引(实地反馈响应)
|
|
24
|
+
- send-log 容量上限(超 5MiB 保尾 1MiB 整行重写,此前无限增长)
|
|
25
|
+
- CI 挂 macos-latest 观察位(continue-on-error);FAQ 补"改名后需发一条消息激活才可见于 status"
|
|
26
|
+
|
|
6
27
|
|
|
7
28
|
## [1.3.2] - 2026-10-06
|
|
8
29
|
|
package/README.md
CHANGED
|
@@ -77,13 +77,13 @@ crosschat send --to alice --body "你好 alice!"
|
|
|
77
77
|
|
|
78
78
|
### 完整剧本:codex 当领导派活给 claude(多任务循环的经典形态)
|
|
79
79
|
|
|
80
|
-
**任务目标**:codex
|
|
80
|
+
**任务目标**:codex(领导)命 claude(工人)统计当前目录的 `.md` 文件数并报回数字,领导自行复核后验收——**全程信息只经 crosschat 消息流动,不走文件**。
|
|
81
81
|
|
|
82
82
|
**第 1 步 · 左窗启动 claude(接收方先开机;先启动 ≠ 先说话)**
|
|
83
83
|
```
|
|
84
84
|
D:\workspace\demo> crosschat claude
|
|
85
85
|
```
|
|
86
|
-
进入后输入 `/rename worker
|
|
86
|
+
进入后输入 `/rename worker`,再随便发一条消息(如"收到")激活一轮——**改名要过一轮才进 `crosschat status`**。待命。
|
|
87
87
|
|
|
88
88
|
**第 2 步 · 右窗启动 codex(领导)并贴题词**
|
|
89
89
|
```
|
|
@@ -91,15 +91,15 @@ D:\workspace\demo> codex
|
|
|
91
91
|
```
|
|
92
92
|
```
|
|
93
93
|
你是领导。用 crosschat(先 status 确认名字)给 claude 会话「worker」下发任务:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
统计当前目录下有多少个 .md 文件,把数字报回来。
|
|
95
|
+
收到报告后,你自己也数一遍复核;数字一致则回复"验收通过,任务结束"并停止;
|
|
96
|
+
不一致则把你的数字发回去要求返工。
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
**第 3 步 · 右窗屏幕——任务由 codex 发出**
|
|
100
100
|
```
|
|
101
101
|
● exec: crosschat status
|
|
102
|
-
● exec: crosschat send --to worker --body "任务1
|
|
102
|
+
● exec: crosschat send --to worker --body "任务1:统计当前目录的 .md 文件数,报回数字"
|
|
103
103
|
● delivered to worker (turn 1) ← 任务飞进左窗,发起方是 codex
|
|
104
104
|
```
|
|
105
105
|
|
|
@@ -109,24 +109,25 @@ D:\workspace\demo> codex
|
|
|
109
109
|
```
|
|
110
110
|
📨 来自另一会话的消息:
|
|
111
111
|
<cross-session-message from-name="codex/01a…" turn="1">
|
|
112
|
-
任务1
|
|
113
|
-
回复请运行: crosschat send --conversation
|
|
112
|
+
任务1:统计当前目录的 .md 文件数,报回数字
|
|
113
|
+
回复请运行: crosschat send --conversation mc2_xxx --body "<你的回复>"
|
|
114
114
|
</cross-session-message>
|
|
115
115
|
|
|
116
|
-
⏺
|
|
117
|
-
⏺ Bash: crosschat send --conversation
|
|
116
|
+
⏺ Bash: ls *.md | wc -l → 7
|
|
117
|
+
⏺ Bash: crosschat send --conversation mc2_xxx --body "报告:当前目录共 7 个 .md 文件"
|
|
118
118
|
⏺ delivered (turn 2) ← 报告发回给 codex
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
-
**第 6 步 · 自动发生**:报告落进 codex 线程 → codex
|
|
121
|
+
**第 6 步 · 自动发生**:报告落进 codex 线程 → codex 自己数一遍(7 个,一致)→ 验收结论又出现在左窗。
|
|
122
122
|
|
|
123
|
-
**第 7 步 · 左窗收到"验收通过,任务结束"
|
|
123
|
+
**第 7 步 · 左窗收到"验收通过,任务结束"——收工**。任务的下达、汇报、复核、验收全部是 crosschat 消息;想看领导的复核细节:开右窗 `codex resume` 翻历史。
|
|
124
124
|
|
|
125
125
|
## 📋 命令列表
|
|
126
126
|
|
|
127
127
|
```
|
|
128
128
|
crosschat send --to <名字> --body "<正文>" # 新消息(名字含空格加引号;未命名 codex 线程可用 id8 或完整 id 寻址,status 可见)
|
|
129
129
|
crosschat send --conversation <ref> --body "<正文>" # 回复(ref 照抄收到的信封)
|
|
130
|
+
crosschat send --via ssh:<对端hostname> --to <名/id8> --body "…" # 跨机发送(联邦,见 🌐 节)
|
|
130
131
|
echo … | crosschat send --to <名字> # 正文走 stdin
|
|
131
132
|
crosschat status [--json] [--conversations] # 双侧总览(名字/目录/时间/状态)
|
|
132
133
|
crosschat doctor # 一键环境体检(有 ❌ 时退出码 1)
|
|
@@ -139,6 +140,145 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
139
140
|
|
|
140
141
|
`status --conversations` 另看对话总览:每对端点的最近方向、相对时间、轮次、末条状态与滞留数(与 `--json` 组合输出同结构数组)。
|
|
141
142
|
|
|
143
|
+
## 🌐 跨机联邦(ssh v1)
|
|
144
|
+
|
|
145
|
+
一句话:**跨机 = 单机的一切 + 一个 `--via ssh:<对端系统hostname>` 旗标**。消息经 ssh 到对端机器上执行同一条 crosschat——远端 CLI 全权(名字解析、投递、发件箱、它自己的 send-log),回执带 `@<host>` 后缀,**信封自动携带回程路条,接收方照抄即可回复**,无需知道网络结构。
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
crosschat send --via ssh:build01 --to worker2 --body "跑一次构建,产物清单发回来"
|
|
149
|
+
# → delivered to worker2@build01 (turn 1)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 使用:题词与命令形态(按场景)
|
|
153
|
+
|
|
154
|
+
**场景 A · 让本机 agent 发起跨机对话**——给 agent 的题词(角色只写任务,协议靠 skill 与信封自带):
|
|
155
|
+
|
|
156
|
+
> 使用 crosschat 发送消息给 beta2 问好,消息要求经过 ssh 管道送到(send 时加 --via ssh:<对端系统hostname>)。需要对方回复并停止。
|
|
157
|
+
|
|
158
|
+
agent 据此跑出的命令形态:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
crosschat send --via ssh:build01 --to beta2 --body "你好 beta2…"
|
|
162
|
+
# → delivered to beta2@build01 (turn 1)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**场景 B · 对端接收**——**无需任何题词**。对端会话里自动出现信封:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
📨 来自另一会话的消息:
|
|
169
|
+
<cross-session-message from-name="claude/boss@win-dev" turn="1">
|
|
170
|
+
你好 beta2…
|
|
171
|
+
回复请运行: crosschat send --via ssh:win-dev --conversation mc2_… --body "<你的回复>"
|
|
172
|
+
</cross-session-message>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**场景 C · 对端回复**——对 agent 说"照抄来信里的回复命令,替换占位符后执行"即可;命令形态(回程 `--via` 由信封自动携带):
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
crosschat send --via ssh:win-dev --conversation mc2_… --body "收到,任务完成"
|
|
179
|
+
# → delivered to claude/boss@win-dev (turn 2) ← 回到发起机
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**场景 D · 同机自环测试**(不跨机也要走一遍 ssh 管道时):
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# win 上(sshd 已跑在 22):
|
|
186
|
+
crosschat send --via ssh:localhost --to <本机会话名> --body "自环测试"
|
|
187
|
+
# WSL 上(先给 ~/.ssh/config 加自指别名,一次性):
|
|
188
|
+
cat >> ~/.ssh/config << 'EOF'
|
|
189
|
+
Host self
|
|
190
|
+
HostName localhost
|
|
191
|
+
Port 2222
|
|
192
|
+
EOF
|
|
193
|
+
ssh-keyscan -p 2222 localhost >> ~/.ssh/known_hosts # 播种 host key
|
|
194
|
+
crosschat send --via ssh:self --to <本机会话名> --body "自环测试"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
要点:
|
|
198
|
+
|
|
199
|
+
- 名字在**目标机**上解析(本机同名会话不干扰);跨机对端不在本机 `status` 里,看对端:`ssh <对端> crosschat status`
|
|
200
|
+
- 对端忙 → 远端 `queued` / `parked` 语义与单机一致(parked 的 mailbox 路径标注"位于 `<host>`");远端业务错误**同码透传**(前缀 `[via <host>]`,自纠指引照常有效)
|
|
201
|
+
- ssh 不通/超时报 `SSH_TRANSPORT_FAILED` / `SSH_TRANSPORT_TIMEOUT`——先 `ssh <对端> crosschat --version` 探活(顺带验版本),超时后**勿盲目重发**
|
|
202
|
+
- 会话引用(`mc2_`)自带双方机器名+机器指纹(machine-id,同名机器也不混),信封回复命令自动带 `--via` 回程;手敲漏了 CLI 也会按引用自动补全
|
|
203
|
+
- 单条上限 16KiB 对跨机同样生效(内容过长落盘发路径)
|
|
204
|
+
|
|
205
|
+
### 部署:对端 ssh 信息怎么配(win ↔ WSL 完整实例)
|
|
206
|
+
|
|
207
|
+
前提:**双向可达**(同一 LAN/VPN;对端在 NAT 后、只能单向发起的环境等 broker 堡垒机形态)。以下以 win(hostname `yang`)↔ WSL(hostname `yangwsl`)为例,逐台照抄。
|
|
208
|
+
|
|
209
|
+
**第 1 步 · 每台机装 crosschat + 生成密钥**:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
npm i -g @oatelauser/crosschat && crosschat install-skills
|
|
213
|
+
ssh-keygen -t ed25519 # 无口令(机器通道);已有密钥则跳过
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**第 2 步 · 写两端的 ~/.ssh/config(核心)**——每台机写"怎么连对端":
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# win 侧(%USERPROFILE%\.ssh\config)——认得 WSL:
|
|
220
|
+
Host yangwsl wsl # 一行多名:真实 hostname + 顺手短名,都指向同一配置
|
|
221
|
+
HostName 127.0.0.1
|
|
222
|
+
Port 2222 # WSL sshd 用非 22 端口(镜像网络下 22 被 win 占)
|
|
223
|
+
User root
|
|
224
|
+
|
|
225
|
+
# WSL 侧(~/.ssh/config)——认得 win:
|
|
226
|
+
Host yang
|
|
227
|
+
HostName localhost
|
|
228
|
+
Port 22
|
|
229
|
+
User yangsheng # WSL 默认 root,反向连 win 必须显式写 win 用户名
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
规则:**别名推荐直接用"对端系统 hostname"**(信封回程路条自动取它,`--via ssh:yang` / `--via ssh:yangwsl` 天然成立);别名≠hostname 也能用,但两个名字都要能解析(一行多名 `Host yang wsl` 即可)。hostname 用 `hostname` 命令查(两端各查一次、互抄)。
|
|
233
|
+
|
|
234
|
+
**第 3 步 · 互推公钥**:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# 常规(Linux/Mac 对端):推公钥,输一次现有密码(密码登录共存不受影响)
|
|
238
|
+
ssh-copy-id yangwsl # 或手动追加到对端 ~/.ssh/authorized_keys
|
|
239
|
+
|
|
240
|
+
# win 对端 + 你是管理员组用户:公钥必须进专用文件并修 ACL(管理员 PowerShell)
|
|
241
|
+
$kf = "$env:ProgramData\ssh\administrators_authorized_keys"
|
|
242
|
+
Add-Content $kf -Value (Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" -Raw)
|
|
243
|
+
icacls $kf /inheritance:r /grant "SYSTEM:(F)" /grant "BUILTIN\Administrators:(F)"
|
|
244
|
+
|
|
245
|
+
# WSL 对端:不走 ssh 推(鸡生蛋),从 win 直写其文件系统
|
|
246
|
+
wsl -u root sh -c 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys' < $env:USERPROFILE\.ssh\id_ed25519.pub
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**第 4 步 · 收件侧 sshd 与端口**:
|
|
250
|
+
|
|
251
|
+
| 收件腿 | 一次性准备 |
|
|
252
|
+
|---|---|
|
|
253
|
+
| Linux | sshd 开箱即有 |
|
|
254
|
+
| win | 管理员装 OpenSSH Server(`Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0` + `Start-Service sshd`);npm 全局 bin 须在**系统** PATH(sshd 默认 shell 只见 Machine PATH)。**收件腿限制:codex 侧不可用(AF_UNIX 跨登录会话隔离,实测定论),claude 侧实测可用** |
|
|
255
|
+
| WSL(镜像网络) | sshd 换非标端口:`sed -i 's/^#*Port .*/Port 2222/' /etc/ssh/sshd_config`,`systemctl enable --now ssh`;host key 播种 `ssh-keyscan -p 2222 localhost >> ~/.ssh/known_hosts`(win 侧同款命令一次) |
|
|
256
|
+
| Mac | 系统设置开"远程登录" |
|
|
257
|
+
|
|
258
|
+
**第 5 步 · 自证(双向各跑一次)**:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
ssh -o BatchMode=yes yangwsl crosschat --version # win → WSL
|
|
262
|
+
ssh -o BatchMode=yes yang crosschat --version # WSL → win;出版本号 = 通 + 版本一致
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
失败对照:`Host key verification failed` → 第 4 步的 keyscan 没做;`Permission denied (publickey)` → 第 3 步公钥没进对(win 管理员组走专用文件);`Connection refused` → 对端 sshd 没跑/端口不对。
|
|
266
|
+
|
|
267
|
+
可选提速:`~/.ssh/config` 加 `ControlMaster auto`(复用连接,摊薄每次握手 100-300ms)。版本偏斜:旧版对端收到新旗标报 `USAGE [via <host>] unknown option …`——对端升级即愈。
|
|
268
|
+
|
|
269
|
+
**大内容怎么办(>16KiB)**:消息照旧走 crosschat、块数据走 ssh 自己的文件通道——scp 与 `--via` **共用同一份 ssh config/别名/密钥**,配一次全通:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
# 发去对端(引用的是对端本地路径):
|
|
273
|
+
scp big-analysis.txt wsl:/tmp/big-analysis.txt
|
|
274
|
+
crosschat send --via ssh:wsl --to beta2 --body "分析 /tmp/big-analysis.txt,结论报回来"
|
|
275
|
+
|
|
276
|
+
# 对端回传大结果(题词形态):
|
|
277
|
+
# 把结果写入 result.txt,用 scp result.txt yang:/tmp/ 发回,然后用 crosschat 告诉我路径
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
win ↔ WSL 这对还有更省的捷径——文件根本不用过网络:`cp result.txt /mnt/c/Users/<你>/AppData/Local/Temp/`(WSL 直写 win 盘)。大文件用完即删(`/tmp` 卫生,agent 侧纪律)。
|
|
281
|
+
|
|
142
282
|
## 📖 对话生命周期(规则总纲)
|
|
143
283
|
|
|
144
284
|
### 三种发起方式
|
|
@@ -149,6 +289,7 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
149
289
|
| **codex** | 会话内 agent 跑 `crosschat send --to <claude 会话名> --body "…"` | 发送随意;回信开窗关窗都能收(daemon 0.160+) |
|
|
150
290
|
| **人** | 任意终端直接 `crosschat send --to <名字> --body "…"` | 身份是 human:**能发、不能被回复**(单向指令) |
|
|
151
291
|
| **脚本(headless)** | `codex exec "<题词>"` 建线程,然后 `crosschat send --to <id8> --body "…"` | codex 原生命令:建线程 + 跑一轮自动硬化 + 退出,角色题词随行;**线程 id 就在输出头 `session id:` 行**(并发多路各拿各的,零歧义);`crosschat status` 里 originator 为 `codex_exec`、cwd 列可辨。跨机预置(联邦就绪后):`ssh <host> codex exec "<题词>"` |
|
|
292
|
+
| **跨机(联邦)** | `crosschat send --via ssh:<对端hostname> --to <名/id8> --body "…"` | 远端 CLI 全权(名字在对端解析);回执带 `@<host>`;信封自动携带回程路条,接收方照抄即回 |
|
|
152
293
|
|
|
153
294
|
第一条消息永远用 `--to`(此刻生成对话引用 reply-ref);对方名字用 `status` 查。`--to` 不必只用于第一条:对同一端对的重复 `--to` 发送会**自动接续你们最近的对话**(turn 递增,本地记账,无需手带引用);要另起线程时用 `--conversation` 显式切换即可。
|
|
154
295
|
|
|
@@ -200,10 +341,12 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
200
341
|
- [x] 👀 status 标注 TUI 占用线程(`thread-writer-locks` 锁文件信号源:行尾 `TUI占用` 标记、JSON `held` 字段、锁住未列入线程补行)
|
|
201
342
|
- 专用信箱线程机制化 → **评估后不做**:命名由双侧原生 `/rename` 与 id8 寻址承接,crosschat 不拥有会话生命周期(决策记录见 [map 007](docs/wayfinder/map.md));headless 建线程用 `codex exec`(见对话生命周期表)
|
|
202
343
|
|
|
344
|
+
**已完成(v1.3.3)**
|
|
345
|
+
- [x] 🌐 跨机联邦 ssh v1:`--via ssh:<对端hostname>`、mc2_ 紧凑会话引用(296→83 字符)、信封自动回程路条、三层错误码同码透传、发起侧审计补记账;localhost 与 win↔WSL 真机验证(win 收件腿 codex 侧受 AF_UNIX 限制,见联邦节);tcp/broker 传输见路线图
|
|
346
|
+
|
|
203
347
|
**计划中**
|
|
204
|
-
- [ ]
|
|
205
|
-
- [ ]
|
|
206
|
-
- [ ] 📦 常驻 broker(忙时持久队列、异步回执、投递状态机——embassy 完整集对齐;堡垒机形态)
|
|
348
|
+
- [ ] 🐧 mac 平台适配(unix 代码路径已共享,待实机验证;CI mac 观察位已挂)
|
|
349
|
+
- [ ] 📦 常驻 broker(忙时持久队列、异步回执、投递状态机——embassy 完整集对齐;堡垒机形态);tcp 直连传输(局域网 + 极简预共享鉴权)
|
|
207
350
|
- [ ] 🖼️ TUI 看板与服务安装(开机自启)
|
|
208
351
|
- [ ] 🤖 新 agent 适配器(GLM 等;有原生唤醒通道则原生,否则论证降级)
|
|
209
352
|
|
|
@@ -235,6 +378,12 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
235
378
|
|
|
236
379
|
**Q:消息历史在哪看?** claude 侧=会话 transcript;codex 侧=开窗 resume 线程。
|
|
237
380
|
|
|
381
|
+
**Q:跨机怎么看不到对端的会话?** `status` 只列**本机**会话;跨机看对端用 `ssh <对端> crosschat status`。
|
|
382
|
+
|
|
383
|
+
**Q:会话经常重启,名字对不上?** claude 重启后自动编号会漂移;常重启的会话进去先 `/rename` 固定一个稳定名字——名字稳定,`--to` 自动接续就不会断。
|
|
384
|
+
|
|
385
|
+
**Q:`/rename` 改名后 status 里还是旧名/没有它?** 改名(claude 与 codex TUI 同理)要**再发送一条消息激活一轮**,crosschat 才看得到新名——codex 新建线程同理(零轮次不入列表)。操作顺序:`/rename 名字` → 随便发一条 → 再 `crosschat status`。
|
|
386
|
+
|
|
238
387
|
## 🔧 故障恢复
|
|
239
388
|
|
|
240
389
|
| 症状 | 动作 |
|
package/dist/cli.js
CHANGED
|
@@ -14,6 +14,8 @@ import { defaultOutboxDir, drain } from './outbox.js';
|
|
|
14
14
|
import { runWatchdog, spawnWatchdog as ensureWatchdog } from './watchdog.js';
|
|
15
15
|
import { appendSendLog, confirmInRollout, defaultSendLogFile } from './send-log.js';
|
|
16
16
|
import { defaultConversationsFile } from './conversations.js';
|
|
17
|
+
import { defaultSshExec } from './federation.js';
|
|
18
|
+
import { machineId } from './platform/machine-id.js';
|
|
17
19
|
import { conversationSummaries } from './conversation-summary.js';
|
|
18
20
|
import { codexHomeDir, listWriterLocks } from './codex/rollout-meta.js';
|
|
19
21
|
import { listClaudeSessions } from './claude/registry.js';
|
|
@@ -24,9 +26,11 @@ const version = JSON.parse(readFileSync(new URL('../package.json', import.meta.u
|
|
|
24
26
|
const usage = `usage: crosschat <command> [options]
|
|
25
27
|
|
|
26
28
|
commands:
|
|
27
|
-
send --to <name> | --conversation <ref>
|
|
29
|
+
send [--via ssh:<host>] --to <name> | --conversation <ref>
|
|
28
30
|
send a message (--body <text> or stdin);
|
|
29
|
-
quote <name> if it contains spaces
|
|
31
|
+
quote <name> if it contains spaces;
|
|
32
|
+
--via sends to a peer machine (host = ~/.ssh/config
|
|
33
|
+
alias, peer resolves names on its side)
|
|
30
34
|
status [--conversations] show claude/codex session status, or per-pair
|
|
31
35
|
conversation overview with --conversations
|
|
32
36
|
doctor environment health check (exits 1 on any ❌)
|
|
@@ -41,10 +45,10 @@ options:
|
|
|
41
45
|
-v, --version print version and exit
|
|
42
46
|
--help | help show this help and exit
|
|
43
47
|
`;
|
|
44
|
-
/** Hand-rolled send arg parsing (no dependency): --to/--conversation/--body take values, --json is a flag. */
|
|
48
|
+
/** Hand-rolled send arg parsing (no dependency): --to/--conversation/--body/--via/--origin take values, --json is a flag. --origin is machine-injected (008) and stays out of usage. */
|
|
45
49
|
export function parseSendArgs(argv) {
|
|
46
50
|
const args = {};
|
|
47
|
-
const valueOpts = new Set(['--to', '--conversation', '--body']);
|
|
51
|
+
const valueOpts = new Set(['--to', '--conversation', '--body', '--via', '--origin']);
|
|
48
52
|
for (let i = 0; i < argv.length; i++) {
|
|
49
53
|
const token = argv[i];
|
|
50
54
|
if (token === undefined || !token.startsWith('--')) {
|
|
@@ -68,6 +72,10 @@ export function parseSendArgs(argv) {
|
|
|
68
72
|
args.to = value;
|
|
69
73
|
else if (name === '--conversation')
|
|
70
74
|
args.conversation = value;
|
|
75
|
+
else if (name === '--via')
|
|
76
|
+
args.via = value;
|
|
77
|
+
else if (name === '--origin')
|
|
78
|
+
args.origin = value;
|
|
71
79
|
else
|
|
72
80
|
args.bodyArg = value;
|
|
73
81
|
}
|
|
@@ -134,6 +142,10 @@ function realSendDeps(stdinText) {
|
|
|
134
142
|
appendLog: (entry) => appendSendLog(defaultSendLogFile(), entry),
|
|
135
143
|
confirmReceipt: (threadId, marker) => confirmInRollout(codexHomeDir(), threadId, marker),
|
|
136
144
|
conversationStateFile: defaultConversationsFile(),
|
|
145
|
+
// Federation (008/B1): real transport + machine name for --origin.
|
|
146
|
+
sshExec: (argv, input, timeoutMs) => defaultSshExec(argv, input, timeoutMs),
|
|
147
|
+
// B10: stable per-install id — same-machine decisions survive hostname collisions.
|
|
148
|
+
machineId: () => machineId(),
|
|
137
149
|
};
|
|
138
150
|
}
|
|
139
151
|
function realStatusDeps() {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/send.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { hostname as osHostname } from 'node:os';
|
|
2
3
|
import { MultichatError } from '../errors.js';
|
|
3
4
|
import { checkAndRecord, rateKey } from '../rate-limit.js';
|
|
4
5
|
import { mailboxFileFor, outboxCount, park } from '../outbox.js';
|
|
5
6
|
import { endpointOfIdentity, identityKey, identityMatchesEndpoint, resolveCallerIdentity, } from '../identity.js';
|
|
6
7
|
import { resolveTargetByName } from '../resolve.js';
|
|
7
8
|
import { composeEnvelope } from '../envelope.js';
|
|
9
|
+
import { decodeOriginIdentity, isSameMachine, runViaSend } from '../federation.js';
|
|
8
10
|
import { continueConversation, continueFromRef, recordConversation } from '../conversations.js';
|
|
9
11
|
import { decodeRef, encodeRef, newConversationRef, nextTurnRef, } from '../ref.js';
|
|
10
12
|
/** Hard body limit (ticket 004): 16KiB, enforced synchronously, never truncated. */
|
|
@@ -16,8 +18,49 @@ export async function runSend(args, deps) {
|
|
|
16
18
|
if (size > MAX_BODY_BYTES) {
|
|
17
19
|
throw new MultichatError('MESSAGE_TOO_LARGE', `Body is ${size} bytes; the limit is ${MAX_BODY_BYTES}. Write the content to a file and send the path instead.`);
|
|
18
20
|
}
|
|
21
|
+
// Federation (008 B2, design §5 C): a cross-machine --conversation ref names
|
|
22
|
+
// the remote machine in its endpoints — fill a missing --via from it so a
|
|
23
|
+
// hand-typed reply without the flag still routes (the envelope's copy
|
|
24
|
+
// already carries it; this is typo insurance). Undecodable refs fall
|
|
25
|
+
// through to the normal path's error.
|
|
26
|
+
// B11 fix: only the CALLER'S COUNTERPART may become the via target. The
|
|
27
|
+
// previous form scanned both endpoints and picked the first non-local one —
|
|
28
|
+
// on a cross-machine reply the sender's own endpoint lives on the OTHER
|
|
29
|
+
// machine, so the remote leg auto-filled a via back to the sender's machine
|
|
30
|
+
// and the two machines bounced the send at each other over ssh until the
|
|
31
|
+
// 120s timeout, with zero output at either end.
|
|
32
|
+
if (args.via === undefined && args.conversation !== undefined) {
|
|
33
|
+
const here = deps.hostname?.() ?? osHostname();
|
|
34
|
+
const localMid = deps.machineId?.();
|
|
35
|
+
try {
|
|
36
|
+
const ref = decodeRef(args.conversation);
|
|
37
|
+
const envScan = deps.listClaudeSessions();
|
|
38
|
+
const envCaller = resolveCallerIdentity(deps.env, envScan);
|
|
39
|
+
const caller = envCaller.p === 'human' && args.origin !== undefined
|
|
40
|
+
? decodeOriginIdentity(args.origin)
|
|
41
|
+
: envCaller;
|
|
42
|
+
const remote = [ref.f, ref.t].find((ep) => !identityMatchesEndpoint(caller, ep) &&
|
|
43
|
+
ep.p !== 'human' && ep.m !== undefined && !isSameMachine(ep.mid, ep.m, localMid, here));
|
|
44
|
+
if (remote !== undefined)
|
|
45
|
+
args = { ...args, via: `ssh:${remote.m}` };
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// invalid ref: the main path reports it
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Federation (008/B1): everything via lives behind this early branch — the
|
|
52
|
+
// 16K check above applies to cross-machine sends too (D6), and the local
|
|
53
|
+
// path below stays byte-identical when --via is absent (D9).
|
|
54
|
+
if (args.via !== undefined) {
|
|
55
|
+
return runViaSend(args, body, deps);
|
|
56
|
+
}
|
|
19
57
|
const scan = deps.listClaudeSessions();
|
|
20
|
-
const
|
|
58
|
+
const envCaller = resolveCallerIdentity(deps.env, scan);
|
|
59
|
+
// Federation (008 D5): an ssh shell has no agent env, so the remote caller
|
|
60
|
+
// would collapse to human (unreplyable). --origin — injected by the sending
|
|
61
|
+
// machine's CLI — is the identity fallback; a real env identity always wins.
|
|
62
|
+
const origin = envCaller.p === 'human' && args.origin !== undefined ? decodeOriginIdentity(args.origin) : undefined;
|
|
63
|
+
const caller = origin ?? envCaller;
|
|
21
64
|
let target;
|
|
22
65
|
let newRef;
|
|
23
66
|
let turn;
|
|
@@ -26,7 +69,8 @@ export async function runSend(args, deps) {
|
|
|
26
69
|
const asFrom = identityMatchesEndpoint(caller, ref.f);
|
|
27
70
|
const asTo = identityMatchesEndpoint(caller, ref.t);
|
|
28
71
|
if (!asFrom && !asTo) {
|
|
29
|
-
throw new MultichatError('CALLER_NOT_IN_CONVERSATION', `Caller (${identityKey(caller)}) is not an endpoint of this conversation
|
|
72
|
+
throw new MultichatError('CALLER_NOT_IN_CONVERSATION', `Caller (${identityKey(caller)}) is not an endpoint of this conversation. ` +
|
|
73
|
+
'手里的 ref 可能抄漏或已过期——改用 --to <名字> 自动接续该端对最新对话。');
|
|
30
74
|
}
|
|
31
75
|
target = asFrom ? ref.t : ref.f;
|
|
32
76
|
if (target.p === 'human') {
|
|
@@ -71,6 +115,50 @@ export async function runSend(args, deps) {
|
|
|
71
115
|
newRef = continued.ref;
|
|
72
116
|
turn = continued.turn;
|
|
73
117
|
}
|
|
118
|
+
// Federation (008 B2 + B10): a remote-origin send (ssh shell + --origin)
|
|
119
|
+
// stamps both endpoints with their machines — m (hostname) routes the return
|
|
120
|
+
// --via, mid (machine-id) decides "same machine" so hostname collisions
|
|
121
|
+
// cannot fake a local conversation. Local sends stamp nothing (no m = local).
|
|
122
|
+
const here = deps.hostname?.() ?? osHostname();
|
|
123
|
+
const localMid = deps.machineId?.();
|
|
124
|
+
if (origin !== undefined) {
|
|
125
|
+
const fIsCaller = identityMatchesEndpoint(caller, newRef.f);
|
|
126
|
+
const stamp = (ep, m, mid) => ep.p === 'human' ? ep : { ...ep, m, ...(mid === undefined ? {} : { mid }) };
|
|
127
|
+
newRef = {
|
|
128
|
+
...newRef,
|
|
129
|
+
f: stamp(newRef.f, fIsCaller ? origin.host : here, fIsCaller ? origin.mid : localMid),
|
|
130
|
+
t: stamp(newRef.t, fIsCaller ? here : origin.host, fIsCaller ? localMid : origin.mid),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// The reply-hint's --via points at the machine of the endpoint reading this
|
|
134
|
+
// envelope would reply to — the sender's own endpoint (D5: no --to needed).
|
|
135
|
+
const senderEp = identityMatchesEndpoint(caller, newRef.f) ? newRef.f : newRef.t;
|
|
136
|
+
const viaHost = senderEp.p !== 'human' && senderEp.m !== undefined && !isSameMachine(senderEp.mid, senderEp.m, localMid, here)
|
|
137
|
+
? senderEp.m
|
|
138
|
+
: undefined;
|
|
139
|
+
// B10 collision warning: the ssh peer's hostname equals ours but its
|
|
140
|
+
// machine-id differs — routing is still correct (per-machine ssh alias
|
|
141
|
+
// namespaces resolve it), the name ambiguity is worth telling the human.
|
|
142
|
+
const collision = origin !== undefined &&
|
|
143
|
+
origin.host === here &&
|
|
144
|
+
origin.mid !== undefined &&
|
|
145
|
+
localMid !== undefined &&
|
|
146
|
+
origin.mid !== localMid
|
|
147
|
+
? `⚠ 两台机器同名 (${here}):已按跨机路由(machine-id 不同)。建议改名避免混淆。`
|
|
148
|
+
: undefined;
|
|
149
|
+
const finish = (out) => {
|
|
150
|
+
if (collision === undefined)
|
|
151
|
+
return out;
|
|
152
|
+
if (args.json === true) {
|
|
153
|
+
try {
|
|
154
|
+
return JSON.stringify({ ...JSON.parse(out), warning: collision });
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return out;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return `${out}\n${collision}`;
|
|
161
|
+
};
|
|
74
162
|
const replyRef = encodeRef(newRef);
|
|
75
163
|
const fromName = displayName(caller);
|
|
76
164
|
/** Every exit path logs who sent what to whom (B14, +from in B16, +fromName in B21). */
|
|
@@ -81,11 +169,12 @@ export async function runSend(args, deps) {
|
|
|
81
169
|
const claudeSession = scan.sessions.find((session) => session.sessionId === target.id);
|
|
82
170
|
if (claudeSession === undefined) {
|
|
83
171
|
throw new MultichatError('TARGET_NOT_FOUND', `Claude session ${target.id} is not currently routable (process exited or unregistered). ` +
|
|
84
|
-
'
|
|
172
|
+
'对端会话可能已重启——改用 --to <名字> 自动接续该端对最新对话(--to 同名即续,无需换名)。' +
|
|
173
|
+
'status 只列本机会话;跨机对端用 ssh <对端> crosschat status 查。');
|
|
85
174
|
}
|
|
86
175
|
checkAndRecord(deps.rateDir, rateKey(identityKey(caller), `claude:${target.id}`), deps.now());
|
|
87
176
|
const toName = claudeSession.name ?? shortId('claude', claudeSession.sessionId);
|
|
88
|
-
const content = composeEnvelope({ fromName, toName, turn, ref: replyRef, body });
|
|
177
|
+
const content = composeEnvelope({ fromName, toName, turn, ref: replyRef, body, viaHost });
|
|
89
178
|
try {
|
|
90
179
|
await deps.deliverClaude({ pid: claudeSession.pid, messagingSocketPath: claudeSession.messagingSocketPath }, content);
|
|
91
180
|
}
|
|
@@ -96,14 +185,14 @@ export async function runSend(args, deps) {
|
|
|
96
185
|
logNow({ to: toName, target: `claude:${target.id}`, status: 'delivered', turn, replyRef });
|
|
97
186
|
if (deps.conversationStateFile !== undefined)
|
|
98
187
|
recordConversation(deps.conversationStateFile, newRef, deps.now());
|
|
99
|
-
return formatDelivery(args.json === true, toName, turn, replyRef, false);
|
|
188
|
+
return finish(formatDelivery(args.json === true, toName, turn, replyRef, false));
|
|
100
189
|
}
|
|
101
190
|
// Codex delivers by threadId; a missing thread surfaces as a codex adapter error.
|
|
102
191
|
checkAndRecord(deps.rateDir, rateKey(identityKey(caller), `codex:${target.id}`), deps.now());
|
|
103
192
|
const threads = await deps.listCodexThreads();
|
|
104
193
|
const threadName = threads.find((thread) => thread.id === target.id)?.name;
|
|
105
194
|
const toName = threadName ?? shortId('codex', target.id);
|
|
106
|
-
const content = composeEnvelope({ fromName, toName, turn, ref: replyRef, body });
|
|
195
|
+
const content = composeEnvelope({ fromName, toName, turn, ref: replyRef, body, viaHost });
|
|
107
196
|
const parkNow = () => {
|
|
108
197
|
park(deps.outboxDir, target.id, { envelope: content, toName, callerKey: identityKey(caller) }, deps.now());
|
|
109
198
|
deps.spawnWatchdog?.();
|
|
@@ -116,7 +205,7 @@ export async function runSend(args, deps) {
|
|
|
116
205
|
const queuedBefore = outboxCount(deps.outboxDir, target.id);
|
|
117
206
|
if (queuedBefore > 0) {
|
|
118
207
|
const queue = parkNow();
|
|
119
|
-
return formatParked(args.json === true, toName, turn, replyRef, queue, mailboxPath);
|
|
208
|
+
return finish(formatParked(args.json === true, toName, turn, replyRef, queue, mailboxPath));
|
|
120
209
|
}
|
|
121
210
|
try {
|
|
122
211
|
const delivered = await deps.deliverCodex(target.id, content);
|
|
@@ -129,12 +218,12 @@ export async function runSend(args, deps) {
|
|
|
129
218
|
if (deps.conversationStateFile !== undefined)
|
|
130
219
|
recordConversation(deps.conversationStateFile, newRef, deps.now());
|
|
131
220
|
if (queued) {
|
|
132
|
-
return `${out}\n已入对方服务端队列,本轮结束即处理;终态可查 crosschat status --conversations
|
|
221
|
+
return finish(`${out}\n已入对方服务端队列,本轮结束即处理;终态可查 crosschat status --conversations`);
|
|
133
222
|
}
|
|
134
223
|
if (receipt === 'unconfirmed') {
|
|
135
|
-
return `${out}\n回执: 暂未在对方会话记录中确认(可能仍在落盘);稍后查 send-log.jsonl 或重跑 status
|
|
224
|
+
return finish(`${out}\n回执: 暂未在对方会话记录中确认(可能仍在落盘);稍后查 send-log.jsonl 或重跑 status`);
|
|
136
225
|
}
|
|
137
|
-
return out;
|
|
226
|
+
return finish(out);
|
|
138
227
|
}
|
|
139
228
|
catch (err) {
|
|
140
229
|
// Busy/locked = definitively not delivered (deliver.ts polls before giving
|
|
@@ -145,7 +234,7 @@ export async function runSend(args, deps) {
|
|
|
145
234
|
logNow({ to: toName, target: `codex:${target.id}`, status: 'parked', turn, replyRef });
|
|
146
235
|
if (deps.conversationStateFile !== undefined)
|
|
147
236
|
recordConversation(deps.conversationStateFile, newRef, deps.now());
|
|
148
|
-
return formatParked(args.json === true, toName, turn, replyRef, queue, mailboxPath);
|
|
237
|
+
return finish(formatParked(args.json === true, toName, turn, replyRef, queue, mailboxPath));
|
|
149
238
|
}
|
|
150
239
|
logNow({ to: toName, target: `codex:${target.id}`, status: 'failed', code: errorCode(err), turn, replyRef });
|
|
151
240
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
|
package/dist/envelope.js
CHANGED
|
@@ -24,9 +24,10 @@ export function composeEnvelope(input) {
|
|
|
24
24
|
const fromName = shortened ? codepoints.slice(0, FROM_NAME_MAX_CODEPOINTS).join('') : input.fromName;
|
|
25
25
|
const aliasAttr = shortened ? ` from-alias="${escapeAttr(input.fromName)}"` : '';
|
|
26
26
|
const body = neutralizeReservedTags(input.body);
|
|
27
|
+
const via = input.viaHost === undefined ? '' : ` --via ssh:${input.viaHost}`;
|
|
27
28
|
return (`<cross-session-message from-name="${escapeAttr(fromName)}" turn="${input.turn}"${aliasAttr}>\n` +
|
|
28
29
|
`<crosschat-reply-hint conversation="${input.ref}" reply-as="${escapeAttr(input.toName)}">` +
|
|
29
|
-
`回复请运行: crosschat send --conversation ${input.ref} --body "<你的回复>"</crosschat-reply-hint>\n` +
|
|
30
|
+
`回复请运行: crosschat send${via} --conversation ${input.ref} --body "<你的回复>"</crosschat-reply-hint>\n` +
|
|
30
31
|
`新话题或对话已推进时: crosschat send --to <名字> --body "..."(--to 自动接续该端对最近对话);超 16KiB 请写文件后只发路径\n` +
|
|
31
32
|
`${body}\n` +
|
|
32
33
|
`</cross-session-message>`);
|
package/dist/envelope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,4FAA4F,CAAC;
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../src/envelope.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,4FAA4F,CAAC;AAqB1H,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,wBAAwB,CAAC;IAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IACrG,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,gBAAgB,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7E,OAAO,CACL,qCAAqC,UAAU,CAAC,QAAQ,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,SAAS,KAAK;QAChG,uCAAuC,KAAK,CAAC,GAAG,eAAe,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;QAC3F,wBAAwB,GAAG,mBAAmB,KAAK,CAAC,GAAG,2CAA2C;QAClG,yFAAyF;QACzF,GAAG,IAAI,IAAI;QACX,0BAA0B,CAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { hostname as osHostname } from 'node:os';
|
|
3
|
+
import { Buffer } from 'node:buffer';
|
|
4
|
+
import { MultichatError } from './errors.js';
|
|
5
|
+
import { recordConversation } from './conversations.js';
|
|
6
|
+
import { decodeRef } from './ref.js';
|
|
7
|
+
import { identityKey, resolveCallerIdentity, } from './identity.js';
|
|
8
|
+
export function parseViaValue(value) {
|
|
9
|
+
const idx = value.indexOf(':');
|
|
10
|
+
const usage = new MultichatError('USAGE', `--via expects <transport>:<host>, e.g. ssh:build01(host 为 ~/.ssh/config 里的 Host 别名)`);
|
|
11
|
+
if (idx <= 0)
|
|
12
|
+
throw usage;
|
|
13
|
+
const transport = value.slice(0, idx);
|
|
14
|
+
const host = value.slice(idx + 1);
|
|
15
|
+
if (transport !== 'ssh') {
|
|
16
|
+
const note = transport === 'tcp' || transport === 'broker'
|
|
17
|
+
? `${transport}: 传输二期支持,当前仅 ssh`
|
|
18
|
+
: `未知传输 ${transport},当前仅支持 ssh:`;
|
|
19
|
+
throw new MultichatError('USAGE', `--via ${note}`);
|
|
20
|
+
}
|
|
21
|
+
// Injection guard (design §2): the host reaches the ssh command line, so it
|
|
22
|
+
// is limited to alias-safe characters — spaces and cmd metachars are out.
|
|
23
|
+
if (!/^[A-Za-z0-9._-]+$/.test(host)) {
|
|
24
|
+
throw new MultichatError('USAGE', `--via ssh: host 别名仅限字母/数字/./_/-(防命令行注入),收到: ${host}`);
|
|
25
|
+
}
|
|
26
|
+
return { transport: 'ssh', host };
|
|
27
|
+
}
|
|
28
|
+
/** Values that will become part of the remote command line (design §2 whitelist). */
|
|
29
|
+
export function validateRemoteFlagValues(args) {
|
|
30
|
+
if (args.to !== undefined) {
|
|
31
|
+
// No whitespace, no cmd/PowerShell metachars, no leading dash. Names with
|
|
32
|
+
// spaces stay single-machine; cross-machine addressing uses id8/ref.
|
|
33
|
+
if (/[\s&|<>^%"']/.test(args.to) || args.to.startsWith('-')) {
|
|
34
|
+
throw new MultichatError('USAGE', `跨机 --to 值不能含空格或特殊字符(${args.to})——请改用 id8 或 --conversation 寻址`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (args.conversation !== undefined && !/^mc[12]_[A-Za-z0-9_-]+$/.test(args.conversation)) {
|
|
38
|
+
throw new MultichatError('USAGE', `跨机 --conversation 值非法: ${args.conversation}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* `<p>/<full id>[/<display name>]@<hostname>[:<mid-b64u>]`, base64url-whole.
|
|
43
|
+
* The FULL id is what makes the origin endpoint routable in refs (B2.1);
|
|
44
|
+
* the display name is optional and may contain spaces/unicode/@/'/' (F1 —
|
|
45
|
+
* never parsed beyond its slot). The optional mid (B10 machine-id) rides
|
|
46
|
+
* along so the receiving side can tell same-hostname machines apart —
|
|
47
|
+
* hostnames never contain ':' so the tail split is unambiguous.
|
|
48
|
+
*/
|
|
49
|
+
export function encodeOrigin(identity, host, mid) {
|
|
50
|
+
const who = identity.p === 'claude'
|
|
51
|
+
? identity.name === undefined
|
|
52
|
+
? `claude/${identity.id}`
|
|
53
|
+
: `claude/${identity.id}/${identity.name}`
|
|
54
|
+
: identity.p === 'codex'
|
|
55
|
+
? `codex/${identity.id}`
|
|
56
|
+
: 'human';
|
|
57
|
+
const tail = mid === undefined ? host : `${host}:${Buffer.from(mid, 'utf8').toString('base64url')}`;
|
|
58
|
+
return Buffer.from(`${who}@${tail}`, 'utf8').toString('base64url');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* B10 same-machine rule: when both machine-ids are known they decide (unique
|
|
62
|
+
* per install — hostname collisions cannot fake a match); otherwise fall back
|
|
63
|
+
* to hostname equality (the pre-B10 semantics, still correct when mids are
|
|
64
|
+
* unreadable on either side).
|
|
65
|
+
*/
|
|
66
|
+
export function isSameMachine(epMid, epHost, localMid, localHost) {
|
|
67
|
+
if (epMid !== undefined && localMid !== undefined)
|
|
68
|
+
return epMid === localMid;
|
|
69
|
+
return epHost === localHost;
|
|
70
|
+
}
|
|
71
|
+
/** Remote-side identity fallback for ssh shells without agent env (design D5). */
|
|
72
|
+
export function decodeOriginIdentity(encoded) {
|
|
73
|
+
let text;
|
|
74
|
+
try {
|
|
75
|
+
text = Buffer.from(encoded, 'base64url').toString('utf8');
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
throw new MultichatError('USAGE', '--origin 不是合法的 base64url');
|
|
79
|
+
}
|
|
80
|
+
const at = text.lastIndexOf('@');
|
|
81
|
+
if (at <= 0)
|
|
82
|
+
throw new MultichatError('USAGE', `--origin 格式非法: ${text}`);
|
|
83
|
+
const head = text.slice(0, at);
|
|
84
|
+
const tail = text.slice(at + 1);
|
|
85
|
+
const colon = tail.lastIndexOf(':');
|
|
86
|
+
const host = colon === -1 ? tail : tail.slice(0, colon);
|
|
87
|
+
const mid = colon === -1 ? undefined : Buffer.from(tail.slice(colon + 1), 'base64url').toString('utf8');
|
|
88
|
+
if (host === '' || mid === '')
|
|
89
|
+
throw new MultichatError('USAGE', `--origin 格式非法: ${text}`);
|
|
90
|
+
const slash = head.indexOf('/');
|
|
91
|
+
if (slash <= 0) {
|
|
92
|
+
if (head === 'human')
|
|
93
|
+
return mid === undefined ? { p: 'human', host } : { p: 'human', host, mid };
|
|
94
|
+
throw new MultichatError('USAGE', `--origin 格式非法: ${text}`);
|
|
95
|
+
}
|
|
96
|
+
const p = head.slice(0, slash);
|
|
97
|
+
const rest = head.slice(slash + 1);
|
|
98
|
+
// First '/' after the endpoint type separates the full id from the optional
|
|
99
|
+
// display name; a name may itself contain '/' (B2.1 spec). Ids are
|
|
100
|
+
// hex/uuid-ish and never contain '/'.
|
|
101
|
+
const nameSlash = rest.indexOf('/');
|
|
102
|
+
const id = nameSlash === -1 ? rest : rest.slice(0, nameSlash);
|
|
103
|
+
const name = nameSlash === -1 ? undefined : rest.slice(nameSlash + 1);
|
|
104
|
+
if (id === '' || name === '')
|
|
105
|
+
throw new MultichatError('USAGE', `--origin 格式非法: ${text}`);
|
|
106
|
+
const midField = mid === undefined ? {} : { mid };
|
|
107
|
+
if (p === 'claude')
|
|
108
|
+
return name === undefined ? { p: 'claude', id, host, ...midField } : { p: 'claude', id, name, host, ...midField };
|
|
109
|
+
if (p === 'codex')
|
|
110
|
+
return { p: 'codex', id, host, ...midField };
|
|
111
|
+
throw new MultichatError('USAGE', `--origin 端点类型非法: ${p}`);
|
|
112
|
+
}
|
|
113
|
+
/** The exact remote command (fixed face, design D2 — configurable = injectable). */
|
|
114
|
+
export function buildSshArgv(host, args, originB64) {
|
|
115
|
+
const target = args.to !== undefined
|
|
116
|
+
? ['--to', args.to]
|
|
117
|
+
: ['--conversation', args.conversation];
|
|
118
|
+
return [
|
|
119
|
+
'ssh',
|
|
120
|
+
host,
|
|
121
|
+
'-o',
|
|
122
|
+
'BatchMode=yes', // F2: any interactive prompt becomes a fast failure, not a 120s hang
|
|
123
|
+
'-o',
|
|
124
|
+
'ConnectTimeout=10',
|
|
125
|
+
'crosschat',
|
|
126
|
+
'send',
|
|
127
|
+
...target,
|
|
128
|
+
'--json',
|
|
129
|
+
'--origin',
|
|
130
|
+
originB64,
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
/** Real transport: spawn ssh, feed the body on stdin, close it (EOF), cap output. */
|
|
134
|
+
export function defaultSshExec(argv, input, timeoutMs) {
|
|
135
|
+
return new Promise((resolve) => {
|
|
136
|
+
const child = spawn(argv[0], argv.slice(1), { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
137
|
+
let stdout = '';
|
|
138
|
+
let stderr = '';
|
|
139
|
+
let timedOut = false;
|
|
140
|
+
const cap = (prev, chunk) => (prev.length > 262_144 ? prev : prev + chunk.toString('utf8'));
|
|
141
|
+
child.stdout.on('data', (chunk) => { stdout = cap(stdout, chunk); });
|
|
142
|
+
child.stderr.on('data', (chunk) => { stderr = cap(stderr, chunk); });
|
|
143
|
+
const timer = setTimeout(() => {
|
|
144
|
+
timedOut = true;
|
|
145
|
+
child.kill();
|
|
146
|
+
}, timeoutMs);
|
|
147
|
+
child.on('error', (err) => {
|
|
148
|
+
clearTimeout(timer);
|
|
149
|
+
resolve({ code: null, stdout, stderr: `${stderr}${err.message}`, timedOut });
|
|
150
|
+
});
|
|
151
|
+
child.on('close', (code) => {
|
|
152
|
+
clearTimeout(timer);
|
|
153
|
+
resolve({ code, stdout, stderr, timedOut });
|
|
154
|
+
});
|
|
155
|
+
child.stdin.on('error', () => { });
|
|
156
|
+
child.stdin.end(input, 'utf8');
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/** Entry point of the via branch — everything federation lives behind this (D9). */
|
|
160
|
+
export async function runViaSend(args, body, deps) {
|
|
161
|
+
const { host } = parseViaValue(args.via);
|
|
162
|
+
validateRemoteFlagValues(args);
|
|
163
|
+
const scan = deps.listClaudeSessions();
|
|
164
|
+
const caller = resolveCallerIdentity(deps.env, scan);
|
|
165
|
+
const origin = encodeOrigin(caller, deps.hostname?.() ?? osHostname(), deps.machineId?.());
|
|
166
|
+
const argv = buildSshArgv(host, args, origin);
|
|
167
|
+
const envTimeout = Number(deps.env.CROSSCHAT_SSH_TIMEOUT_MS);
|
|
168
|
+
const timeoutMs = Number.isFinite(envTimeout) && envTimeout > 0 ? envTimeout : 120_000;
|
|
169
|
+
const fromName = originDisplayName(caller);
|
|
170
|
+
const logNow = (fields) => {
|
|
171
|
+
deps.appendLog?.({ ...fields, ts: new Date(deps.now()).toISOString() });
|
|
172
|
+
};
|
|
173
|
+
const res = await (deps.sshExec ?? defaultSshExec)(argv, body, timeoutMs);
|
|
174
|
+
if (res.timedOut || res.code === null) {
|
|
175
|
+
logNow({ from: identityKey(caller), fromName, to: `${args.to ?? args.conversation}@${host}`, target: `via:${host}`, status: 'failed', code: 'SSH_TRANSPORT_TIMEOUT' });
|
|
176
|
+
throw new MultichatError('SSH_TRANSPORT_TIMEOUT', `本地等待 ${Math.round(timeoutMs / 1000)}s 超时,远端状态不明——勿盲目重发(可能与首次投递叠加)。先在对端查 send-log 或 status --conversations 核实后再决定。`);
|
|
177
|
+
}
|
|
178
|
+
if (res.code === 255) {
|
|
179
|
+
logNow({ from: identityKey(caller), fromName, to: `${args.to ?? args.conversation}@${host}`, target: `via:${host}`, status: 'failed', code: 'SSH_TRANSPORT_FAILED' });
|
|
180
|
+
throw new MultichatError('SSH_TRANSPORT_FAILED', `ssh 无法到达 ${host}(不通/密钥/known_hosts)。自证: ssh ${host} crosschat --version(顺带核对版本);检查 ~/.ssh/config 与网络。`);
|
|
181
|
+
}
|
|
182
|
+
if (res.code !== 0) {
|
|
183
|
+
// Remote business error: rethrow the SAME code so self-correction guidance
|
|
184
|
+
// (MESSAGE_TOO_LARGE etc.) stays verbatim (D3); prefix marks the hop.
|
|
185
|
+
const m = res.stderr.match(/crosschat: ([A-Z_]+): (.+)/);
|
|
186
|
+
const err = m !== null
|
|
187
|
+
? new MultichatError(m[1], `[via ${host}] ${m[2]}`)
|
|
188
|
+
: new MultichatError('REMOTE_FAILED', `[via ${host}] 远端异常退出(${res.code}): ${res.stderr.slice(-400)}`);
|
|
189
|
+
logNow({ from: identityKey(caller), fromName, to: `${args.to ?? args.conversation}@${host}`, target: `via:${host}`, status: 'failed', code: err.code });
|
|
190
|
+
throw err;
|
|
191
|
+
}
|
|
192
|
+
let receipt;
|
|
193
|
+
try {
|
|
194
|
+
receipt = JSON.parse(res.stdout.trim());
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
logNow({ from: identityKey(caller), fromName, to: `${args.to ?? args.conversation}@${host}`, target: `via:${host}`, status: 'failed', code: 'REMOTE_FAILED' });
|
|
198
|
+
throw new MultichatError('REMOTE_FAILED', `[via ${host}] 远端回执不是 JSON: ${res.stdout.slice(0, 200)}`);
|
|
199
|
+
}
|
|
200
|
+
const displayTo = `${receipt.to}@${host}`;
|
|
201
|
+
logNow({
|
|
202
|
+
from: identityKey(caller),
|
|
203
|
+
fromName,
|
|
204
|
+
to: displayTo,
|
|
205
|
+
target: `via:${host}`,
|
|
206
|
+
status: receipt.status,
|
|
207
|
+
turn: receipt.turn,
|
|
208
|
+
replyRef: receipt.replyRef,
|
|
209
|
+
});
|
|
210
|
+
// Own-side pair continuity: the remote issued the ref, recording it locally
|
|
211
|
+
// makes the cross-machine pair show up in `status --conversations` (patch B).
|
|
212
|
+
if (deps.conversationStateFile !== undefined) {
|
|
213
|
+
try {
|
|
214
|
+
recordConversation(deps.conversationStateFile, decodeRef(receipt.replyRef), deps.now());
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// a non-decodable ref must never fail the already-delivered send
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (args.json === true) {
|
|
221
|
+
return JSON.stringify({ ...receipt, via: `ssh:${host}` });
|
|
222
|
+
}
|
|
223
|
+
if (receipt.status === 'parked') {
|
|
224
|
+
return [
|
|
225
|
+
`已寄存给 ${displayTo}(对方忙,未送达)。队列共 ${receipt.queue ?? 1} 条,看门狗每 0.5–5 分钟自动重试,无需手动 status。`,
|
|
226
|
+
`人工随时可读滞留内容: ${receipt.mailbox ?? ''}(位于 ${host})`,
|
|
227
|
+
`reply-ref: ${receipt.replyRef}`,
|
|
228
|
+
].join('\n');
|
|
229
|
+
}
|
|
230
|
+
if (receipt.status === 'queued') {
|
|
231
|
+
return `queued to ${displayTo} (turn ${receipt.turn}; 对方正忙,已入队,本轮结束即处理)\nreply-ref: ${receipt.replyRef}`;
|
|
232
|
+
}
|
|
233
|
+
return `delivered to ${displayTo} (turn ${receipt.turn})\nreply-ref: ${receipt.replyRef}`;
|
|
234
|
+
}
|
|
235
|
+
function originDisplayName(identity) {
|
|
236
|
+
if (identity.p === 'claude')
|
|
237
|
+
return identity.name ?? `claude/${identity.id.slice(0, 8)}`;
|
|
238
|
+
if (identity.p === 'codex')
|
|
239
|
+
return `codex/${identity.id.slice(0, 8)}`;
|
|
240
|
+
return 'human';
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=federation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation.js","sourceRoot":"","sources":["../src/federation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import process from 'node:process';
|
|
4
|
+
/**
|
|
5
|
+
* Stable per-install machine id (B10): the `mid` that disambiguates machines
|
|
6
|
+
* sharing a hostname. win = registry MachineGuid, linux = /etc/machine-id,
|
|
7
|
+
* mac = IOPlatformUUID. Undefined whenever the source is unreadable — callers
|
|
8
|
+
* fall back to hostname comparison. Cached: it never changes within a boot.
|
|
9
|
+
*/
|
|
10
|
+
let cached = null;
|
|
11
|
+
export function machineId() {
|
|
12
|
+
if (cached === null)
|
|
13
|
+
cached = readMachineId();
|
|
14
|
+
return cached;
|
|
15
|
+
}
|
|
16
|
+
function readMachineId() {
|
|
17
|
+
try {
|
|
18
|
+
if (process.platform === 'win32') {
|
|
19
|
+
const out = execSync('reg query HKLM\\SOFTWARE\\Microsoft\\Cryptography /v MachineGuid', {
|
|
20
|
+
encoding: 'utf8',
|
|
21
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
22
|
+
});
|
|
23
|
+
return out.match(/MachineGuid\s+REG_SZ\s+(\S+)/)?.[1];
|
|
24
|
+
}
|
|
25
|
+
if (process.platform === 'darwin') {
|
|
26
|
+
const out = execSync('ioreg -rd1 -c IOPlatformExpertDevice', {
|
|
27
|
+
encoding: 'utf8',
|
|
28
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
29
|
+
});
|
|
30
|
+
return out.match(/"IOPlatformUUID"\s*=\s*"([^"]+)"/)?.[1];
|
|
31
|
+
}
|
|
32
|
+
return readFileSync('/etc/machine-id', 'utf8').trim() || undefined;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=machine-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-id.js","sourceRoot":"","sources":["../../src/platform/machine-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC;;;;;GAKG;AACH,IAAI,MAAM,GAA8B,IAAI,CAAC;AAE7C,MAAM,UAAU,SAAS;IACvB,IAAI,MAAM,KAAK,IAAI;QAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,kEAAkE,EAAE;gBACvF,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,sCAAsC,EAAE;gBAC3D,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/ref.js
CHANGED
|
@@ -2,8 +2,10 @@ import { randomBytes } from 'node:crypto';
|
|
|
2
2
|
import { Buffer } from 'node:buffer';
|
|
3
3
|
import { MultichatError } from './errors.js';
|
|
4
4
|
export const REF_PREFIX = 'mc1_';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
export const REF_PREFIX_V2 = 'mc2_';
|
|
6
|
+
function invalid(why, skewHint = false) {
|
|
7
|
+
const hint = skewHint ? ' 若本条来自对端机器,可能是对端 crosschat 版本较新——升级本机 crosschat 后重试回复。' : '';
|
|
8
|
+
return new MultichatError('INVALID_CONVERSATION_REF', `Malformed conversation reference (${why}).${hint}`);
|
|
7
9
|
}
|
|
8
10
|
export function newConversationRef(f, t) {
|
|
9
11
|
return { v: 1, f, t, n: randomBytes(8).toString('hex'), c: 1 };
|
|
@@ -12,16 +14,192 @@ export function newConversationRef(f, t) {
|
|
|
12
14
|
export function nextTurnRef(ref) {
|
|
13
15
|
return { ...ref, c: ref.c + 1 };
|
|
14
16
|
}
|
|
17
|
+
// ---- mc2 binary layout (008 B2 design §6 + B10 mid) ------------------------
|
|
18
|
+
// flags LEB128 varint: bits 0-1 f type | bits 2-3 t type | bit 4 f id raw |
|
|
19
|
+
// bit 5 t id raw | bit 6 f.m present | bit 7 t.m present | bit 8
|
|
20
|
+
// f.mid present | bit 9 t.mid present (claude=0 codex=1 human=2)
|
|
21
|
+
// then f.id (16B UUID | varint-len utf8) · t.id (same)
|
|
22
|
+
// f.m (varint-len utf8)? · t.m (varint-len utf8)?
|
|
23
|
+
// f.mid (varint-len utf8)? · t.mid (varint-len utf8)?
|
|
24
|
+
// n (varint-len hex bytes) · c (varint)
|
|
25
|
+
// Lengths are LEB128 varints so nothing has a hidden ceiling; a dashed
|
|
26
|
+
// lowercase uuid packs to 16 raw bytes (the overwhelmingly common case),
|
|
27
|
+
// anything else falls back to the string path and round-trips verbatim.
|
|
28
|
+
// Layout changes are free until mc2 ships in a npm release (v1.3.3 window).
|
|
29
|
+
const TYPE_CODES = { claude: 0, codex: 1, human: 2 };
|
|
30
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
31
|
+
function writeVarint(value, out) {
|
|
32
|
+
let v = value;
|
|
33
|
+
while (v >= 0x80) {
|
|
34
|
+
out.push((v & 0x7f) | 0x80);
|
|
35
|
+
v = Math.floor(v / 128);
|
|
36
|
+
}
|
|
37
|
+
out.push(v);
|
|
38
|
+
}
|
|
39
|
+
function packId(endpoint) {
|
|
40
|
+
if (endpoint.p === 'human')
|
|
41
|
+
return { bytes: Buffer.alloc(0), raw: false };
|
|
42
|
+
if (UUID_RE.test(endpoint.id)) {
|
|
43
|
+
return { bytes: Buffer.from(endpoint.id.replace(/-/g, ''), 'hex'), raw: false };
|
|
44
|
+
}
|
|
45
|
+
const body = Buffer.from(endpoint.id, 'utf8');
|
|
46
|
+
const len = [];
|
|
47
|
+
writeVarint(body.length, len);
|
|
48
|
+
return { bytes: Buffer.concat([Buffer.from(len), body]), raw: true };
|
|
49
|
+
}
|
|
50
|
+
function unpackUuid(bytes) {
|
|
51
|
+
const hex = bytes.toString('hex');
|
|
52
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
53
|
+
}
|
|
54
|
+
function packStr(value) {
|
|
55
|
+
const body = Buffer.from(value, 'utf8');
|
|
56
|
+
const len = [];
|
|
57
|
+
writeVarint(body.length, len);
|
|
58
|
+
return Buffer.concat([Buffer.from(len), body]);
|
|
59
|
+
}
|
|
60
|
+
function packHex(value) {
|
|
61
|
+
let body;
|
|
62
|
+
try {
|
|
63
|
+
body = Buffer.from(value, 'hex');
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw invalid('nonce is not hex');
|
|
67
|
+
}
|
|
68
|
+
const len = [];
|
|
69
|
+
writeVarint(body.length, len);
|
|
70
|
+
return Buffer.concat([Buffer.from(len), body]);
|
|
71
|
+
}
|
|
15
72
|
export function encodeRef(ref) {
|
|
16
|
-
|
|
73
|
+
const mOf = (ep) => (ep.p === 'human' ? undefined : ep.m);
|
|
74
|
+
const midOf = (ep) => (ep.p === 'human' ? undefined : ep.mid);
|
|
75
|
+
const fId = packId(ref.f);
|
|
76
|
+
const tId = packId(ref.t);
|
|
77
|
+
const fm = mOf(ref.f);
|
|
78
|
+
const tm = mOf(ref.t);
|
|
79
|
+
const fmid = midOf(ref.f);
|
|
80
|
+
const tmid = midOf(ref.t);
|
|
81
|
+
const flags = TYPE_CODES[ref.f.p] |
|
|
82
|
+
(TYPE_CODES[ref.t.p] << 2) |
|
|
83
|
+
(fId.raw ? 0x10 : 0) |
|
|
84
|
+
(tId.raw ? 0x20 : 0) |
|
|
85
|
+
(fm !== undefined ? 0x40 : 0) |
|
|
86
|
+
(tm !== undefined ? 0x80 : 0) |
|
|
87
|
+
(fmid !== undefined ? 0x100 : 0) |
|
|
88
|
+
(tmid !== undefined ? 0x200 : 0);
|
|
89
|
+
const flagBytes = [];
|
|
90
|
+
writeVarint(flags, flagBytes);
|
|
91
|
+
const parts = [Buffer.from(flagBytes), fId.bytes, tId.bytes];
|
|
92
|
+
if (fm !== undefined)
|
|
93
|
+
parts.push(packStr(fm));
|
|
94
|
+
if (tm !== undefined)
|
|
95
|
+
parts.push(packStr(tm));
|
|
96
|
+
if (fmid !== undefined)
|
|
97
|
+
parts.push(packStr(fmid));
|
|
98
|
+
if (tmid !== undefined)
|
|
99
|
+
parts.push(packStr(tmid));
|
|
100
|
+
parts.push(packHex(ref.n)); // raw bytes; a mc1-era nonce round-trips byte-exact
|
|
101
|
+
const turn = [];
|
|
102
|
+
writeVarint(ref.c, turn);
|
|
103
|
+
parts.push(Buffer.from(turn));
|
|
104
|
+
return REF_PREFIX_V2 + Buffer.concat(parts).toString('base64url');
|
|
17
105
|
}
|
|
18
106
|
/** Strict structural validation; anything malformed is INVALID_CONVERSATION_REF. */
|
|
19
107
|
export function decodeRef(encoded) {
|
|
20
|
-
if (
|
|
21
|
-
|
|
108
|
+
if (encoded.startsWith(REF_PREFIX_V2)) {
|
|
109
|
+
return decodeV2(encoded.slice(REF_PREFIX_V2.length));
|
|
110
|
+
}
|
|
111
|
+
if (encoded.startsWith(REF_PREFIX)) {
|
|
112
|
+
return decodeV1(encoded.slice(REF_PREFIX.length));
|
|
113
|
+
}
|
|
114
|
+
throw invalid('missing mc1_/mc2_ prefix');
|
|
115
|
+
}
|
|
116
|
+
/** Cursor over the mc2 payload: every read is bounds-checked (truncation = skew or corruption). */
|
|
117
|
+
class Cursor {
|
|
118
|
+
buf;
|
|
119
|
+
at = 0;
|
|
120
|
+
constructor(buf) {
|
|
121
|
+
this.buf = buf;
|
|
122
|
+
}
|
|
123
|
+
byte() {
|
|
124
|
+
if (this.at >= this.buf.length)
|
|
125
|
+
throw invalid('truncated payload', true);
|
|
126
|
+
return this.buf[this.at++];
|
|
127
|
+
}
|
|
128
|
+
take(count) {
|
|
129
|
+
if (this.at + count > this.buf.length)
|
|
130
|
+
throw invalid('truncated payload', true);
|
|
131
|
+
const out = this.buf.subarray(this.at, this.at + count);
|
|
132
|
+
this.at += count;
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
varint() {
|
|
136
|
+
let value = 0;
|
|
137
|
+
let shift = 0;
|
|
138
|
+
for (;;) {
|
|
139
|
+
const b = this.byte();
|
|
140
|
+
value += (b & 0x7f) * 2 ** shift;
|
|
141
|
+
if ((b & 0x80) === 0)
|
|
142
|
+
return value;
|
|
143
|
+
shift += 7;
|
|
144
|
+
if (shift > 35)
|
|
145
|
+
throw invalid('varint overflow', true);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
field() {
|
|
149
|
+
return this.take(this.varint());
|
|
150
|
+
}
|
|
151
|
+
done() {
|
|
152
|
+
return this.at === this.buf.length;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function decodeV2(payload) {
|
|
156
|
+
let buf;
|
|
157
|
+
try {
|
|
158
|
+
buf = Buffer.from(payload, 'base64url');
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
throw invalid('bad base64url payload', true);
|
|
162
|
+
}
|
|
163
|
+
if (buf.length === 0)
|
|
164
|
+
throw invalid('empty payload', true);
|
|
165
|
+
const cur = new Cursor(buf);
|
|
166
|
+
const flags = cur.varint();
|
|
167
|
+
// Field order must mirror encodeRef exactly: f.id, t.id, f.m, t.m, f.mid, t.mid, n, c.
|
|
168
|
+
const readId = (typeBits, rawBit) => {
|
|
169
|
+
if (typeBits === TYPE_CODES.human)
|
|
170
|
+
return { p: 'human' };
|
|
171
|
+
if (typeBits !== TYPE_CODES.claude && typeBits !== TYPE_CODES.codex) {
|
|
172
|
+
throw invalid(`unknown endpoint type ${typeBits}`, true);
|
|
173
|
+
}
|
|
174
|
+
const p = typeBits === TYPE_CODES.claude ? 'claude' : 'codex';
|
|
175
|
+
const id = (flags & rawBit) === 0 ? unpackUuid(cur.take(16)) : cur.field().toString('utf8');
|
|
176
|
+
if (id === '')
|
|
177
|
+
throw invalid('empty endpoint id', true);
|
|
178
|
+
return { p, id };
|
|
179
|
+
};
|
|
180
|
+
const f0 = readId(flags & 0x03, 0x10);
|
|
181
|
+
const t0 = readId((flags >> 2) & 0x03, 0x20);
|
|
182
|
+
const fm = (flags & 0x40) === 0 ? undefined : cur.field().toString('utf8');
|
|
183
|
+
const tm = (flags & 0x80) === 0 ? undefined : cur.field().toString('utf8');
|
|
184
|
+
const fmid = (flags & 0x100) === 0 ? undefined : cur.field().toString('utf8');
|
|
185
|
+
const tmid = (flags & 0x200) === 0 ? undefined : cur.field().toString('utf8');
|
|
186
|
+
const f = fm === undefined && fmid === undefined ? f0 : { ...f0, ...(fm === undefined ? {} : { m: fm }), ...(fmid === undefined ? {} : { mid: fmid }) };
|
|
187
|
+
const t = tm === undefined && tmid === undefined ? t0 : { ...t0, ...(tm === undefined ? {} : { m: tm }), ...(tmid === undefined ? {} : { mid: tmid }) };
|
|
188
|
+
const nBytes = cur.field();
|
|
189
|
+
const n = nBytes.toString('hex');
|
|
190
|
+
if (n === '')
|
|
191
|
+
throw invalid('missing nonce', true);
|
|
192
|
+
const c = cur.varint();
|
|
193
|
+
if (!Number.isInteger(c) || c < 1)
|
|
194
|
+
throw invalid('bad turn counter', true);
|
|
195
|
+
if (!cur.done())
|
|
196
|
+
throw invalid('trailing bytes', true);
|
|
197
|
+
return { v: 1, f, t, n, c };
|
|
198
|
+
}
|
|
199
|
+
function decodeV1(payload) {
|
|
22
200
|
let json;
|
|
23
201
|
try {
|
|
24
|
-
json = Buffer.from(
|
|
202
|
+
json = Buffer.from(payload, 'base64url').toString('utf8');
|
|
25
203
|
}
|
|
26
204
|
catch {
|
|
27
205
|
throw invalid('bad base64url payload');
|
|
@@ -57,7 +235,10 @@ function validateEndpoint(value, where) {
|
|
|
57
235
|
return { p: 'human' };
|
|
58
236
|
}
|
|
59
237
|
if ((ep.p === 'claude' || ep.p === 'codex') && typeof ep.id === 'string' && ep.id !== '') {
|
|
60
|
-
|
|
238
|
+
// m is optional and mc1 JSON never carries it, but tolerate it if present.
|
|
239
|
+
return ep.m === undefined || typeof ep.m !== 'string'
|
|
240
|
+
? { p: ep.p, id: ep.id }
|
|
241
|
+
: { p: ep.p, id: ep.id, m: ep.m };
|
|
61
242
|
}
|
|
62
243
|
throw invalid(`${where}: unknown side or missing id`);
|
|
63
244
|
}
|
package/dist/ref.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref.js","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ref.js","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oatelauser/crosschat",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Let Claude Code and Codex CLI talk to each other on your machine: native delivery via named pipe and app-server, stateless CLI, no daemon.",
|
|
6
6
|
"repository": {
|
|
@@ -46,6 +46,9 @@ crosschat send --to <名字> --body "正文"
|
|
|
46
46
|
- 查会话往来(双方、最近活跃、轮次、最近投递状态、滞留条数):`crosschat status --conversations`;`queued` / `parked` 的终态也在这里确认。
|
|
47
47
|
- 长正文可省略 `--body`,改为管道:`<正文文件路径的内容> | crosschat send --to <名字>`。
|
|
48
48
|
- 投给 codex 的消息:**开窗、关窗、忙时均可投**(daemon 0.160+)。对方正在跑 turn 也不阻塞——消息直接**入队**(输出 `queued`),当前轮结束即进入对话被处理;TUI 窗口会实时刷出。输出 `delivered`(已送达)/ `queued`(已入队,轮末处理)/ `parked`(仅旧 daemon 异常态,已暂存),三者都**无需重发**。
|
|
49
|
+
- **跨机发送**:`crosschat send --via ssh:<对端hostname> --to <名/id8> --body "…"`——对端是另一台机器上安装了 crosschat 的会话(hostname = `~/.ssh/config` 里的 Host 别名,推荐直接用对端系统 hostname);名字在目标机上解析,回执带 `@<host>` 后缀,错误同码透传(前缀 `[via <host>]`)。
|
|
50
|
+
- 跨机的对端**不在本机 status 里**——`ssh <对端> crosschat status` 查它机器上的会话,或由题词直接告知对端名字。
|
|
51
|
+
- 跨机对话的轮次纪律更要遵守:防乒乓限流器是单机记账的,**turn 计数是跨机唯一防线**——接近预算即总结收尾。
|
|
49
52
|
|
|
50
53
|
## 报错自纠(读错误码,不要即兴发明命令)
|
|
51
54
|
|