@oatelauser/crosschat 1.3.3 → 1.5.0
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 +50 -0
- package/README.md +126 -285
- package/dist/cli.js +246 -11
- package/dist/cli.js.map +1 -1
- package/dist/commands/claude-wrapper.js +31 -3
- package/dist/commands/claude-wrapper.js.map +1 -1
- package/dist/commands/clean.js +91 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/codex-wrapper.js +33 -0
- package/dist/commands/codex-wrapper.js.map +1 -0
- package/dist/commands/doctor.js +54 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/send.js +107 -20
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/serve.js +380 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/status.js +86 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/uninstall.js +66 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/envelope.js +10 -2
- package/dist/envelope.js.map +1 -1
- package/dist/federation.js +14 -7
- package/dist/federation.js.map +1 -1
- package/dist/identity.js +25 -0
- package/dist/identity.js.map +1 -1
- package/dist/limits.js +126 -0
- package/dist/limits.js.map +1 -0
- package/dist/serve/broker.js +495 -0
- package/dist/serve/broker.js.map +1 -0
- package/dist/serve/file-channel.js +211 -0
- package/dist/serve/file-channel.js.map +1 -0
- package/dist/serve/node.js +340 -0
- package/dist/serve/node.js.map +1 -0
- package/dist/serve/protocol.js +51 -0
- package/dist/serve/protocol.js.map +1 -0
- package/dist/serve/registry.js +116 -0
- package/dist/serve/registry.js.map +1 -0
- package/dist/serve/via-tcp.js +323 -0
- package/dist/serve/via-tcp.js.map +1 -0
- package/package.json +1 -1
- package/skills/crosschat/SKILL.md +11 -6
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,56 @@
|
|
|
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
|
+
|
|
7
|
+
## [1.5.0] - 2026-10-11
|
|
8
|
+
|
|
9
|
+
### tcp 转发器组件(票B:tcp/broker 合并为单一组件,全网唯一监听端口)
|
|
10
|
+
|
|
11
|
+
- 三角色:`crosschat serve`(服务端 broker,默认端口 7260 经 IANA 实查未分配)/ `crosschat serve --connect <别名>`(常驻节点,断线退避 1s→60s 永不放弃、≥5 分钟静音、broker 重启实测 2 秒自愈)/ `crosschat send --via tcp:<机器>`(瞬态发送,零进程)
|
|
12
|
+
- 三部署形态:两机 colocated(主打)/ 跨网堡垒+ssh 隧道包裹(公网明文风险的官方姿势,TLS 挂账待定)/ CI 零进程直发
|
|
13
|
+
- **mid8 双轨寻址**:协议寻址权威=machine-id 前缀(git 短哈希式最短无歧义,改名/同名免疫),名字=人读显示用;信封 reply-hint 盖 `--via tcp:<发送方 mid8>`,回信照抄即回
|
|
14
|
+
- 星型密钥:`--gen-key [N≤10]` 打印完整 node.json 分发(自动探测 IP 带"人工核对"声明——drill 当场应验);`--list`/`--remove` 注册表管理;`--stop` 三重身份校验安全停止
|
|
15
|
+
- **文件通道**:`send --file`(sha256 锚/256KiB 分块/断点续传/去重秒回/懒删除 5 天+512MiB/单文件 64MiB)
|
|
16
|
+
- 协议 proto:1 草案公开(`docs/broker.md` 协议规范章:MQTT/NATS/STOMP/JSON-RPC 取材,第三方可实现兼容 broker;多实例集群注意事项已注明)
|
|
17
|
+
- `crosschat clean [--force]` 收件/断点清理;`crosschat uninstall [--yes]` 全量卸载(serve 在跑拒删)
|
|
18
|
+
- status/doctor 转发器区块+实时在线机器表(roster)
|
|
19
|
+
- 手册 `docs/broker.md`:三形态实录(形态二 drill 占位待补)+协议规范+排障对照
|
|
20
|
+
- drill a(win broker+WSL 节点)真机十腿全过,含**跨机 agent 自主对话闭环**(报告 `docs/drill-reports/broker-wsl-drill-20261011.md`)
|
|
21
|
+
|
|
22
|
+
### 修复
|
|
23
|
+
|
|
24
|
+
- `--json` 模式 codex queued/unconfirmed 回执被中文注记污染(tcp 桥必炸,人类可读输出不变)
|
|
25
|
+
- 远端来件(--origin)署名被环境残留身份压制——origin 在场即权威,ssh/tcp 接收腿同享修正
|
|
26
|
+
- skill 实地反馈三条不变式入教学(旧 ref 照抄安全/queued 消费确认=对端下一条 turn 号/管道敏感字符场景)
|
|
27
|
+
|
|
28
|
+
### 升级提醒
|
|
29
|
+
|
|
30
|
+
- 已装用户**重跑 `crosschat install-skills`**(skill 新增 tcp 段与错误自纠)
|
|
31
|
+
|
|
32
|
+
## [1.4.0] - 2026-10-09
|
|
33
|
+
|
|
34
|
+
### 上限可配置化与轮次预算(票A)
|
|
35
|
+
|
|
36
|
+
- 单条正文上限三层来源:`--max-body-kb` > `CROSSCHAT_MAX_BODY_KIB` > 16KiB 默认(默认行为零变化);按目标端点封顶——claude 64KiB / codex 1MiB / `--via` 本地预检 1MiB(远端自检)、来源值 16MiB 绝对上界
|
|
37
|
+
- 轮次预算:`--max-turn` / `CROSSCHAT_MAX_TURN`,信封显示 `turn="N/M"`(合并进既有 turn 属性,零新增 token 负担)——软提醒不硬拦,调大下一条消息即生效;预算由操作者按两端模型窗口设定、两端建议对齐
|
|
38
|
+
- **新命令 `crosschat codex`**:与 `crosschat claude` 成对的增强启动器——旋钮透传(校验后写会话环境变量,本会话全部 send 继承;send 显式参数仍最高优先)+ **身份清洗**(启动时剥"别家"身份环境变量、留自家——CALLER_IDENTITY_CONFLICT 的机构化预防;家族注册表结构,新 agent 家族加一行即扩展;`CODEX_HOME` 等配置变量不动)
|
|
39
|
+
- 信封教学行保持静态 16KiB(读者是收方、数字是发方的,准确数字只住各侧自己的报错里);远端来件被拒改教 scp 优先(撞端点硬顶时 scp 是唯一出路,不教提额死路)
|
|
40
|
+
- 新增 docs/commands.md 命令全量说明(send 全参数/优先级链/端点封顶表/启动器对/环境变量总表),README 速查挂钩
|
|
41
|
+
- 升级提醒:已装用户重跑 `crosschat install-skills`(旧 skill 不认识 `turn="N/M"`)
|
|
42
|
+
|
|
43
|
+
### 联邦操作手册定版(docs/federation.md)
|
|
44
|
+
|
|
45
|
+
- 手册按操作系统重构:Win/Linux/MacOS 三配置章 + 单向 SSH(NAT 反向隧道)独立章;全文 transcript 单代码块格式(`>` 标命令 / `#` 备注 / `<XX>` 占位符)
|
|
46
|
+
- NAT 反向隧道扩为完整实施手册(N1–N7 步骤/验证阶梯/失败对照表),win↔云端真机闭环实录(User 行必写/隧道即会话生命)
|
|
47
|
+
- 公钥交换改三小步结构(打印→对端装入→收对端公钥);跨系统依赖显式化(⚠️前置/⚠️必做 全篇引用);keyscan 全部换 `accept-new` 首连记指纹(实测部分服务端 keyscan 算法协商缺陷)
|
|
48
|
+
- 白纸冷走验收一次通过定版(drill 报告在案);配套 `scripts/fed-ssh-clean.sh` Linux 侧联邦 ssh 信息幂等清理
|
|
49
|
+
- B11 跨机回复乒乓回归单测补录
|
|
50
|
+
|
|
51
|
+
### 文档
|
|
52
|
+
|
|
53
|
+
- README 多轮重构:主页(亮点/部署在前/双问答实录,细则外迁 docs/usage.md 与 federation.md)、快速入门单框流程记法(👤/🤖/📨 三图例)、错误码表瘦身
|
|
54
|
+
- docs/usage.md 边界行同步提额与预算;docs/wayfinder/map.md 状态同步
|
|
55
|
+
|
|
6
56
|
## [1.3.3] - 2026-10-07
|
|
7
57
|
|
|
8
58
|
### 跨机联邦 v1(ssh + 远端 CLI,全矩阵实测)
|
package/README.md
CHANGED
|
@@ -14,16 +14,18 @@
|
|
|
14
14
|
|
|
15
15
|
## ✨ 为什么用 crosschat
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
17
|
+
装完即用:让 agent 会话像同事一样互发消息——同机直连、跨机走 ssh。
|
|
18
|
+
|
|
19
|
+
- **原生消息投递** —— 消息直注运行中的会话,像收到一条用户消息;零轮询
|
|
20
|
+
- **跨机聊天** —— `--via ssh:对端` 直发另一台机器(win ↔ linux 互聊),回复自动回来;不装服务,密钥即全部配置
|
|
21
|
+
- **无感式回复** —— 每条消息信封自带回复命令,对方 agent 照抄即回;协议教学随 skill 内建,题词只写任务
|
|
22
|
+
- **忙时不丢** —— 对方忙就进发件箱,看门狗自动重投,你不用重发
|
|
23
|
+
- **无守护进程** —— 整条工具是一支无状态 CLI,没有后台进程和端口要看护
|
|
24
|
+
- **同用户信任边界** —— 通道按系统用户隔离,只授予你启动的会话
|
|
23
25
|
|
|
24
26
|
> 灵感与部分模块实现来自 [embassy](https://github.com/YuanpingSong/embassy)(macOS-only,MIT)——crosschat 是它的 Windows 原生、无守护进程重实现(1.3.0 起亦支持 Linux/WSL,experimental)。
|
|
25
27
|
|
|
26
|
-
## 🧰
|
|
28
|
+
## 🧰 安装
|
|
27
29
|
|
|
28
30
|
| 依赖 | 版本要求 | 说明 |
|
|
29
31
|
|---|---|---|
|
|
@@ -35,6 +37,7 @@
|
|
|
35
37
|
```bash
|
|
36
38
|
npm i -g @oatelauser/crosschat # 一行安装(提供 crosschat / multichat 双命令)
|
|
37
39
|
crosschat install-skills # 协议教学装到两侧 agent
|
|
40
|
+
codex app-server daemon start # 仅 codex 会话参与时需要,纯 claude 互聊可跳过(干净终端启动,勿在 Claude 会话内)
|
|
38
41
|
```
|
|
39
42
|
|
|
40
43
|
<details><summary>从源码安装(开发者)</summary>
|
|
@@ -48,91 +51,88 @@ crosschat install-skills
|
|
|
48
51
|
开发期反复重装本地目录:`npm run build && npm i -g . --force`——**build 不可省**(包没有 prepare 脚本,npm 不会自动构建,`files` 只打包 dist/ 现状,漏 build 会把旧 dist 装回去);`--force`(或先 bump 版本)是因为版本号未变时 npm 会报 "up to date" 而**跳过文件更新**。若首次用的是 `npm link`(符号链接直连仓库),则每次只需 `npm run build`,无需重装。
|
|
49
52
|
</details>
|
|
50
53
|
|
|
51
|
-
|
|
54
|
+
<details><summary>Linux / WSL(experimental)</summary>
|
|
52
55
|
|
|
53
|
-
|
|
54
|
-
codex app-server daemon start # 重启电脑后需重新执行
|
|
55
|
-
```
|
|
56
|
+
三条安装命令照常执行——装在 WSL 里、agent 也装在 WSL 里(同一侧)即可,源码安装同样适用。例外只有两条:
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
- **两侧独立**:unix 状态目录 `~/crosschat`(Windows 侧为 `%LOCALAPPDATA%\crosschat`),互不相通,管道/socket 不过系统边界
|
|
59
|
+
- **agent 同侧**:WSL 内用 unix 版 claude / codex CLI(Node ≥ 22 同侧装)
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
- claude 安装(受限网络):claude.ai/install.sh 可能被区域屏蔽(302),改用 npm 直装 `npm i -g @anthropic-ai/claude-code`;仍不可达时按架构直装平台包 tarball(如 `@anthropic-ai/claude-code-linux-x64`,镜像源可拉,解包即含原生 `claude` 二进制)
|
|
61
|
-
- 状态目录:unix `~/crosschat`(Windows 侧为 `%LOCALAPPDATA%\crosschat`,两侧各自独立)
|
|
62
|
-
- mac:unix 实现共享,理论可达、未实测
|
|
61
|
+
<details><summary>claude 安装受阻时(受限网络)</summary>
|
|
63
62
|
|
|
64
|
-
|
|
63
|
+
claude.ai/install.sh 可能被区域屏蔽(302),改用 npm 直装 `npm i -g @anthropic-ai/claude-code`;仍不可达时按架构直装平台包 tarball(如 `@anthropic-ai/claude-code-linux-x64`,镜像源可拉,解包即含原生 `claude` 二进制)。
|
|
64
|
+
</details>
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
mac:unix 实现共享,理论可达、未实测。
|
|
67
|
+
</details>
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
# 终端 A(claude,能收)
|
|
70
|
-
crosschat claude # 进入后 /rename alice
|
|
69
|
+
## 🚀 快速入门
|
|
71
70
|
|
|
72
|
-
|
|
73
|
-
crosschat status # 看到 alice
|
|
74
|
-
crosschat send --to alice --body "你好 alice!"
|
|
75
|
-
# → 终端 A 里几秒后出现这条消息
|
|
76
|
-
```
|
|
71
|
+
两段对话实录:你只说一句话(👤),两个 agent 自动对话到闭环(🤖 / 📨)。全部命令见[📋 命令列表](#-命令列表)。
|
|
77
72
|
|
|
78
|
-
|
|
73
|
+
图例:**👤 用户[发送 -> 接收]** 你说的指令 · **🤖 agent[发送 -> 接收]** agent 的回复 · **📨** 收到的消息
|
|
79
74
|
|
|
80
|
-
|
|
75
|
+
### 单机:boss 给 worker 派一句活
|
|
81
76
|
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
D:\workspace\demo> crosschat claude
|
|
85
|
-
```
|
|
86
|
-
进入后输入 `/rename worker`,再随便发一条消息(如"收到")激活一轮——**改名要过一轮才进 `crosschat status`**。待命。
|
|
77
|
+
准备:终端 A 跑 `crosschat claude`,进去后 `/rename worker`;终端 B 开一个 codex 窗口当 boss。然后整个过程:
|
|
87
78
|
|
|
88
|
-
**第 2 步 · 右窗启动 codex(领导)并贴题词**
|
|
89
|
-
```
|
|
90
|
-
D:\workspace\demo> codex
|
|
91
|
-
```
|
|
92
79
|
```
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
80
|
+
👤 用户[boss -> worker] 用 crosschat(先 status 确认名字)给 claude 会话「worker」下发任务:给我回复你好的消息。
|
|
81
|
+
🤖 worker 收到 📨 来自另一会话的消息:
|
|
82
|
+
<cross-session-message from-name="codex/01a…" turn="1">
|
|
83
|
+
给我回复你好的消息
|
|
84
|
+
回复请运行: crosschat send --conversation mc2_… --body "<你的回复>"
|
|
85
|
+
🤖 worker[worker -> boss] 你好
|
|
86
|
+
🤖 boss 收到 📨 你好(turn 2)
|
|
97
87
|
```
|
|
98
88
|
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
● exec: crosschat status
|
|
102
|
-
● exec: crosschat send --to worker --body "任务1:统计当前目录的 .md 文件数,报回数字"
|
|
103
|
-
● delivered to worker (turn 1) ← 任务飞进左窗,发起方是 codex
|
|
104
|
-
```
|
|
89
|
+
worker 零配置、没学过任何协议——信封说怎么回就怎么回。
|
|
105
90
|
|
|
106
|
-
|
|
91
|
+
### 跨机:和单机一样,只是对端在另一台机器上
|
|
92
|
+
|
|
93
|
+
准备(一次性):对端(本例 WSL)装好 crosschat、双机互配 ssh 密钥(→ [📡 通信方式](#-通信方式) 表的联邦手册,五步配完)。然后整个过程:
|
|
107
94
|
|
|
108
|
-
**第 5 步 · 左窗屏幕——claude 收令干活**
|
|
109
95
|
```
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
⏺ Bash: crosschat send --conversation mc2_xxx --body "报告:当前目录共 7 个 .md 文件"
|
|
118
|
-
⏺ delivered (turn 2) ← 报告发回给 codex
|
|
96
|
+
👤 用户[boss -> beta2] 使用 crosschat 发送消息给 beta2 问好,消息要求经过 ssh 管道送到(send 时加 --via ssh:yangwsl)。需要对方回复并停止。
|
|
97
|
+
🤖 beta2 收到 📨 来自另一会话的消息:
|
|
98
|
+
<cross-session-message from-name="codex/boss@win" turn="1">
|
|
99
|
+
你好 beta2,这是跨机问候
|
|
100
|
+
回复请运行: crosschat send --via ssh:win --conversation mc2_… --body "<你的回复>"
|
|
101
|
+
🤖 beta2[beta2 -> boss] 收到!跨机闭环成立
|
|
102
|
+
🤖 boss 收到 📨 收到!跨机闭环成立(turn 2,自动经 ssh 回到 win)
|
|
119
103
|
```
|
|
120
104
|
|
|
121
|
-
|
|
105
|
+
与单机的全部差别:题词里多了 `--via ssh:yangwsl`——消息与回复自动走 ssh 往返,双方谁都没敲过一次完整命令。
|
|
106
|
+
|
|
107
|
+
## 📡 通信方式
|
|
108
|
+
|
|
109
|
+
| 方式 | 一句话 | 状态 | 深入 |
|
|
110
|
+
|---|---|---|---|
|
|
111
|
+
| **单机会话** | 同机 agent 互发,`--to <名字>` 即起对话,忙时自动入队/发件箱 | ✅ v1.0 | [使用手册](docs/usage.md):发起方式 / 投递语义 / 底层命令 / 边界 |
|
|
112
|
+
| **跨机联邦 · ssh** | 加 `--via ssh:<对端hostname>`,消息经 ssh 落到对端机器,回复自动回来 | ✅ v1.3.3 | [联邦手册](docs/federation.md):按操作系统配置(Win/Linux/macOS)/ 单向 NAT / 命令形态 / 大内容 / 自环测试 |
|
|
113
|
+
| **跨机联邦 · tcp** | `crosschat serve` 起常驻转发器(星型+预共享钥匙),`--via tcp:<机器/mid8>` 直发、`--file` 文件通道 | ✅ v1.4.0 | [转发器手册](docs/broker.md):三种形态 / 双轨寻址 / 文件通道 / proto:1 协议 / 排障 |
|
|
114
|
+
| 跨机联邦 · broker 增强 | 忙时持久队列、异步回执、投递状态机(tcp 形态之上的 store-and-forward) | 🚧 规划中 | — |
|
|
122
115
|
|
|
123
|
-
|
|
116
|
+
ssh 配置方向一句话:**每台机写自己的 `~/.ssh/config`,内容是"怎么连对端"**(别名推荐=对端 hostname)——完整五步与命令样例见上表手册。
|
|
124
117
|
|
|
125
118
|
## 📋 命令列表
|
|
126
119
|
|
|
120
|
+
完整参数、启动器与环境变量说明见 [命令手册](docs/commands.md)。
|
|
121
|
+
|
|
127
122
|
```
|
|
128
123
|
crosschat send --to <名字> --body "<正文>" # 新消息(名字含空格加引号;未命名 codex 线程可用 id8 或完整 id 寻址,status 可见)
|
|
129
124
|
crosschat send --conversation <ref> --body "<正文>" # 回复(ref 照抄收到的信封)
|
|
130
|
-
crosschat send --via ssh:<对端hostname> --to <名/id8> --body "…" #
|
|
125
|
+
crosschat send --via ssh:<对端hostname> --to <名/id8> --body "…" # 跨机发送(见 📡 通信方式)
|
|
126
|
+
crosschat send --via tcp:<机器名/mid8> --to <名> --body "…" [--file <路径>] # 跨机 tcp 直发 + 文件通道(见转发器手册)
|
|
131
127
|
echo … | crosschat send --to <名字> # 正文走 stdin
|
|
132
128
|
crosschat status [--json] [--conversations] # 双侧总览(名字/目录/时间/状态)
|
|
133
129
|
crosschat doctor # 一键环境体检(有 ❌ 时退出码 1)
|
|
130
|
+
crosschat serve [--port/--gen-key/--list/--remove/--connect/--detach/--stop] # tcp 转发器:broker/节点/钥匙管理(见转发器手册)
|
|
131
|
+
crosschat clean [--force] # 清 tcp 收件/断点残留(默认懒删除规则;--force 全清)
|
|
132
|
+
crosschat uninstall [--yes] # 卸载数据面(serve 在跑拒删;结尾 npm uninstall 收尾)
|
|
134
133
|
crosschat install-skills [--dir <根>] # 安装/更新 agent skill(幂等)
|
|
135
|
-
crosschat claude [任意 claude 参数…] # 带接收许可启动 claude
|
|
134
|
+
crosschat claude [任意 claude 参数…] # 带接收许可启动 claude(透传;--max-body-kb/--max-turn N 可预置本会话发送上限/轮次预算,并剥离 codex 侧身份变量)
|
|
135
|
+
crosschat codex [任意 codex 参数…] # crosschat 增强启动 codex(透传;同上旋钮预置,并剥离 claude 侧身份变量)
|
|
136
136
|
crosschat -v | --version | help # 版本 / 帮助
|
|
137
137
|
```
|
|
138
138
|
|
|
@@ -140,231 +140,28 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
140
140
|
|
|
141
141
|
`status --conversations` 另看对话总览:每对端点的最近方向、相对时间、轮次、末条状态与滞留数(与 `--json` 组合输出同结构数组)。
|
|
142
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
|
-
|
|
282
|
-
## 📖 对话生命周期(规则总纲)
|
|
283
|
-
|
|
284
|
-
### 三种发起方式
|
|
285
|
-
|
|
286
|
-
| 发起者 | 怎么发 | 特性 |
|
|
287
|
-
|---|---|---|
|
|
288
|
-
| **claude** | 会话内 agent 跑 `crosschat send --to <codex 线程名> --body "…"` | 最顺,推荐默认 |
|
|
289
|
-
| **codex** | 会话内 agent 跑 `crosschat send --to <claude 会话名> --body "…"` | 发送随意;回信开窗关窗都能收(daemon 0.160+) |
|
|
290
|
-
| **人** | 任意终端直接 `crosschat send --to <名字> --body "…"` | 身份是 human:**能发、不能被回复**(单向指令) |
|
|
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>`;信封自动携带回程路条,接收方照抄即回 |
|
|
293
|
-
|
|
294
|
-
第一条消息永远用 `--to`(此刻生成对话引用 reply-ref);对方名字用 `status` 查。`--to` 不必只用于第一条:对同一端对的重复 `--to` 发送会**自动接续你们最近的对话**(turn 递增,本地记账,无需手带引用);要另起线程时用 `--conversation` 显式切换即可。
|
|
295
|
-
|
|
296
|
-
### 往复规则
|
|
297
|
-
|
|
298
|
-
1. 收到方看到**信封消息**(`from-name` + `turn="N"` + 回复提示)
|
|
299
|
-
2. 回复 = **逐字照抄回复提示里的命令**,换掉 `<你的回复>`——引用自动轮转,无需记任何历史
|
|
300
|
-
3. 防失控:每对端点 30 条/60 秒限流
|
|
301
|
-
|
|
302
|
-
### 轮次与终止
|
|
303
|
-
|
|
304
|
-
信封显示 `turn="N"`;题词给预算(如"10 轮内完成");接近预算时 agent 按 skill 准则总结收尾;协议层不强制终止。
|
|
305
|
-
|
|
306
|
-
## 📡 投递语义矩阵
|
|
307
|
-
|
|
308
|
-
| 接收方 | 状态 | 行为 |
|
|
309
|
-
|---|---|---|
|
|
310
|
-
| claude(`crosschat claude` 启动) | 窗口开 | ✅ 秒达,会话内出现信封消息 |
|
|
311
|
-
| claude(裸 `claude` 启动) | 任何 | ❌ 无接收许可(换 `crosschat claude` 重启) |
|
|
312
|
-
| codex(daemon ≥0.160) | 窗口开/关 | ✅ 送达(headless 执行;TUI 不实时刷新,翻历史可见) |
|
|
313
|
-
| codex(daemon ≥0.160) | turn 进行中(忙) | ✅ **入队即达**:`queued`(按线程串行,轮结束瞬间落历史并被处理)——与 Claude 收件箱同粒度 |
|
|
314
|
-
| codex(旧 daemon ≤0.157 / `--no-daemon`) | 窗口开 | ⏳ 等待 ~10s,关窗瞬间送达;超时 `parked` 入发件箱(看门狗自动重投) |
|
|
315
|
-
| codex | 排队被旧 daemon 拒绝等罕见态 | 📮 `parked` 入发件箱(新消息排队不插队),看门狗每 0.5–5 分钟自动重投 |
|
|
316
|
-
|
|
317
|
-
**不对称速记**:claude 收发都随意;codex 收信在 0.160+ 开窗关窗均可,关窗永远是最稳路径。
|
|
318
|
-
|
|
319
|
-
## 🤝 Agent 兼容性
|
|
320
|
-
|
|
321
|
-
| Agent | 发送 | 接收 | 实测版本 |
|
|
322
|
-
|---|---|---|---|
|
|
323
|
-
| Claude Code | ✅ | ✅(需 `crosschat claude` 启动) | 2.1.287 |
|
|
324
|
-
| Codex CLI | ✅ | ✅(需 daemon;0.160+ 开窗可收) | 0.159.3 / 0.160.0 |
|
|
325
|
-
| 任意有 shell 的 agent | ✅(装 skill 后) | 🔜 按适配器扩展(GLM 等) | 路线图 |
|
|
326
|
-
|
|
327
|
-
## 🗺️ 路线图
|
|
328
|
-
|
|
329
|
-
**已完成(v1.0.0)**
|
|
330
|
-
- [x] Claude ↔ Codex / Claude ↔ Claude / Codex ↔ Codex 双向消息(真机联调验证)
|
|
331
|
-
- [x] 无状态 CLI 四命令 + 自包含会话引用 + 轮次计数
|
|
332
|
-
- [x] 双侧自动发现(含目录/时间标注)、信封自带教学 skill
|
|
333
|
-
- [x] 16KiB 上限、30 条/60s 防乒乓限流、身份冲突自纠指引
|
|
334
|
-
- [x] 忙/锁超时 → 本地发件箱 + 看门狗自动重投(outbox,FIFO 不插队,mailbox 镜像可读)
|
|
335
|
-
- [x] daemon 0.160 开窗投递(实证:同 daemon 多连接绕过写者锁)
|
|
336
|
-
|
|
337
|
-
**已完成(v1.3.0)**
|
|
338
|
-
- [x] 🐧 Linux/WSL 平台支持(experimental):PosixPipeTransport + claude unix 投递(免 auth 行,同 uid 内核凭证)+ CI ubuntu 矩阵;mac 外推未实测
|
|
339
|
-
|
|
340
|
-
**已完成(v1.3.2)**
|
|
341
|
-
- [x] 👀 status 标注 TUI 占用线程(`thread-writer-locks` 锁文件信号源:行尾 `TUI占用` 标记、JSON `held` 字段、锁住未列入线程补行)
|
|
342
|
-
- 专用信箱线程机制化 → **评估后不做**:命名由双侧原生 `/rename` 与 id8 寻址承接,crosschat 不拥有会话生命周期(决策记录见 [map 007](docs/wayfinder/map.md));headless 建线程用 `codex exec`(见对话生命周期表)
|
|
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
|
-
|
|
347
|
-
**计划中**
|
|
348
|
-
- [ ] 🐧 mac 平台适配(unix 代码路径已共享,待实机验证;CI mac 观察位已挂)
|
|
349
|
-
- [ ] 📦 常驻 broker(忙时持久队列、异步回执、投递状态机——embassy 完整集对齐;堡垒机形态);tcp 直连传输(局域网 + 极简预共享鉴权)
|
|
350
|
-
- [ ] 🖼️ TUI 看板与服务安装(开机自启)
|
|
351
|
-
- [ ] 🤖 新 agent 适配器(GLM 等;有原生唤醒通道则原生,否则论证降级)
|
|
352
|
-
|
|
353
143
|
## 🧯 错误码排障
|
|
354
144
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
**身份类**:`CALLER_IDENTITY_CONFLICT`(环境双身份残留。临时:命令前缀 `env -u CLAUDE_CODE_MESSAGING_SOCKET -u CLAUDE_CODE_MESSAGING_TOKEN -u CLAUDE_CODE_SESSION_ID`;根治:干净终端重启 daemon)· `CALLER_NOT_IN_CONVERSATION` · `CANNOT_REPLY_TO_HUMAN`(对话由人发起)
|
|
145
|
+
报错输出自带完整自纠指引,这张表只当速查索引:
|
|
358
146
|
|
|
359
|
-
|
|
147
|
+
| 错误码 | 含义与动作 |
|
|
148
|
+
|---|---|
|
|
149
|
+
| `NAME_NOT_FOUND` / `NAME_COLLISION` | 名字不对/重名——错误信息已列可用名;重名改用 id8 寻址 |
|
|
150
|
+
| `MESSAGE_TOO_LARGE` | 单条超上限(默认 16KiB;`--max-body-kb` / `CROSSCHAT_MAX_BODY_KIB` 可提额,claude 端点封顶 64KiB、codex 1MiB,到顶只能落盘)——按提示走落盘路径(跨机 scp 见联邦手册) |
|
|
151
|
+
| `RATE_LIMITED` | 30 条/60s 限流——等待或收尾 |
|
|
152
|
+
| `TARGET_*` / `BODY_*` / `USAGE` | 参数错误——按提示改 |
|
|
153
|
+
| `CALLER_IDENTITY_CONFLICT` | 环境双身份残留——临时解法在报错里(`env -u` 前缀);根治:干净终端重启 daemon |
|
|
154
|
+
| `CALLER_NOT_IN_CONVERSATION` | 不在对话内——照抄信封里的引用回复 |
|
|
155
|
+
| `CANNOT_REPLY_TO_HUMAN` | 人发起的对话,单向不可回 |
|
|
156
|
+
| `CODEX_PROXY_SPAWN_FAILED` | daemon 未跑——干净终端 `codex app-server daemon start` |
|
|
157
|
+
| `CODEX_THREAD_LOCKED` / `CODEX_THREAD_BUSY_TIMEOUT` | 已自动转 `parked` 入发件箱,无需重发 |
|
|
158
|
+
| `OUTBOX_FULL` | 发件箱满(每线程 200 条)——读 mailbox 镜像取回 |
|
|
159
|
+
| `CODEX_APPROVAL_REQUIRED` | 对方在等审批——工具永不代答,去对方窗口处理 |
|
|
160
|
+
| `CLAUDE_PIPE_*` / `CODEX_*UNCERTAIN` | 状态不明——**勿盲目重发**,先 `status` 核实 |
|
|
360
161
|
|
|
361
162
|
**发送审计**:每次发送的最终结果(delivered/queued/parked/failed、时间、对端、发送方显示名 fromName、回执)追加记录在状态目录的 `send-log.jsonl`(Windows `%LOCALAPPDATA%\crosschat\`;unix `~/crosschat/`);codex 投递附 rollout 回执(消息已确认落入对方会话历史 = `receipt: confirmed`)。命令超时转后台后结果同样在案,事后可查。
|
|
362
163
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
单条 ≤16KiB;每对端点 30 条/60s;发件箱每线程 200 条(满时读状态目录 `mailbox\<线程ID>.md` 镜像取回内容:Windows `%LOCALAPPDATA%\crosschat\mailbox\`、unix `~/crosschat/mailbox/`);信任边界=同一系统用户(Windows 用户 / unix uid);接收许可仅 `crosschat claude` 启动的会话。
|
|
366
|
-
|
|
367
|
-
**daemon 依赖(重要)**:向 codex 会话投递走 `codex app-server proxy`,它连接**运行中的 app-server daemon** control socket。要获得完整能力(TUI 开窗可投、忙时入队),需要 `codex app-server daemon start` 且 daemon ≥0.160,TUI 用同版本 CLI 打开(0.160 起 TUI 自动附着 daemon)。daemon 未运行时投递会报 `CODEX_PROXY_SPAWN_FAILED` 并提示启动命令;旧版本 daemon 下开窗投递与忙时入队退化为「关窗投递 + 发件箱」。重启电脑后需重新 `codex app-server daemon start`。
|
|
164
|
+
边界与限制(16KiB / 限流 / 发件箱 / 信任边界 / daemon 依赖)→ [使用手册](docs/usage.md)
|
|
368
165
|
|
|
369
166
|
## ❓ FAQ
|
|
370
167
|
|
|
@@ -399,11 +196,55 @@ win ↔ WSL 这对还有更省的捷径——文件根本不用过网络:`cp r
|
|
|
399
196
|
|
|
400
197
|
| 文档 | 内容 |
|
|
401
198
|
|---|---|
|
|
402
|
-
| [
|
|
199
|
+
| [架构手册](docs/architecture.md) | **底层原理**:注册表/命名管道/daemon 通道、写者锁本质、信封与自包含引用、完整投递流程图 |
|
|
200
|
+
| [使用手册](docs/usage.md) | **单机深度细则**:发起方式 / 往复规则 / 投递语义矩阵 / 边界与限制 |
|
|
201
|
+
| [命令手册](docs/commands.md) | **全量命令**:完整参数 / 启动器 / 环境变量 |
|
|
202
|
+
| [联邦手册](docs/federation.md) | **跨机 ssh 联邦**:按操作系统配置 / 单向 NAT / 使用细则 / 大内容 scp / 自环测试 |
|
|
203
|
+
| [转发器手册](docs/broker.md) | **跨机 tcp 转发器**:三种部署形态 / 双轨寻址(mid8+名字)/ 文件通道 / proto:1 协议规范 / 排障 |
|
|
403
204
|
| [CHANGELOG.md](CHANGELOG.md) | 版本变更记录 |
|
|
404
|
-
| [
|
|
405
|
-
| [
|
|
406
|
-
| [
|
|
205
|
+
| [设计决策地图](docs/wayfinder/map.md) | 全部拍板过程与依据 |
|
|
206
|
+
| [实测研究报告](docs/research/) | embassy 源码分析、两侧通道验证、0.160 inject_items 实验 |
|
|
207
|
+
| [联调实证记录](docs/drill-reports/) | 历次联调与验收实测报告(联邦连通性 / 现场反馈 / 手册冷走) |
|
|
208
|
+
|
|
209
|
+
## 🤝 Agent 兼容性
|
|
210
|
+
|
|
211
|
+
| Agent | 发送 | 接收 | 实测版本 |
|
|
212
|
+
|---|---|---|---|
|
|
213
|
+
| Claude Code | ✅ | ✅(需 `crosschat claude` 启动) | 2.1.287 |
|
|
214
|
+
| Codex CLI | ✅ | ✅(需 daemon;0.160+ 开窗可收) | 0.159.3 / 0.160.0 |
|
|
215
|
+
| 任意有 shell 的 agent | ✅(装 skill 后) | 🔜 按适配器扩展(GLM 等) | 路线图 |
|
|
216
|
+
|
|
217
|
+
## 🗺️ 路线图
|
|
218
|
+
|
|
219
|
+
**计划中**
|
|
220
|
+
- [ ] 🐧 mac 平台适配(unix 代码路径已共享,待实机验证;CI mac 观察位已挂)
|
|
221
|
+
- [ ] 📦 常驻 broker 增强(忙时持久队列、异步回执、投递状态机——embassy 完整集对齐;tcp 星型直连传输已落地,见转发器手册)
|
|
222
|
+
- [ ] 🖼️ TUI 看板与服务安装(开机自启)
|
|
223
|
+
- [ ] 🤖 新 agent 适配器(GLM 等;有原生唤醒通道则原生,否则论证降级)
|
|
224
|
+
|
|
225
|
+
<details><summary>已完成(v1.0.0 – v1.3.3)</summary>
|
|
226
|
+
|
|
227
|
+
**v1.0.0**
|
|
228
|
+
- [x] Claude ↔ Codex / Claude ↔ Claude / Codex ↔ Codex 双向消息(真机联调验证)
|
|
229
|
+
- [x] 无状态 CLI 四命令 + 自包含会话引用 + 轮次计数
|
|
230
|
+
- [x] 双侧自动发现(含目录/时间标注)、信封自带教学 skill
|
|
231
|
+
- [x] 16KiB 上限、30 条/60s 防乒乓限流、身份冲突自纠指引
|
|
232
|
+
- [x] 忙/锁超时 → 本地发件箱 + 看门狗自动重投(outbox,FIFO 不插队,mailbox 镜像可读)
|
|
233
|
+
- [x] daemon 0.160 开窗投递(实证:同 daemon 多连接绕过写者锁)
|
|
234
|
+
|
|
235
|
+
**v1.3.0**
|
|
236
|
+
- [x] 🐧 Linux/WSL 平台支持(experimental):PosixPipeTransport + claude unix 投递(免 auth 行,同 uid 内核凭证)+ CI ubuntu 矩阵;mac 外推未实测
|
|
237
|
+
|
|
238
|
+
**v1.3.2**
|
|
239
|
+
- [x] 👀 status 标注 TUI 占用线程(`thread-writer-locks` 锁文件信号源:行尾 `TUI占用` 标记、JSON `held` 字段、锁住未列入线程补行)
|
|
240
|
+
- 专用信箱线程机制化 → **评估后不做**:命名由双侧原生 `/rename` 与 id8 寻址承接,crosschat 不拥有会话生命周期(决策记录见 [决策地图 007](docs/wayfinder/map.md));headless 建线程用 `codex exec`(见对话生命周期表)
|
|
241
|
+
|
|
242
|
+
**v1.3.3**
|
|
243
|
+
- [x] 🌐 跨机联邦 ssh v1:`--via ssh:<对端hostname>`、mc2_ 紧凑会话引用(296→83 字符)、信封自动回程路条、三层错误码同码透传、发起侧审计补记账;localhost 与 win↔WSL 真机验证(win 收件腿 codex 侧受 AF_UNIX 限制,见联邦手册);tcp/broker 传输见路线图
|
|
244
|
+
|
|
245
|
+
**v1.4.0**
|
|
246
|
+
- [x] 📡 跨机联邦 tcp(proto:1):`crosschat serve` 星型转发器(预共享钥匙/心跳/自登记)+ `--via tcp:<机器/mid8>` 瞬态直发(双轨寻址:mid8 权威、名字显示用,改名免疫)+ tcp 回信闭环(reply-hint 自动带 `--via tcp:`)+ `--file` 文件通道(sha256 锚/断点续传/去重/5 天+512MiB 懒删除/64MiB 上限)+ roster 在线表 + `clean`/`uninstall`;win 真机自环验证,见[转发器手册](docs/broker.md)
|
|
247
|
+
</details>
|
|
407
248
|
|
|
408
249
|
## 🛠️ 开发说明
|
|
409
250
|
|