@oatelauser/crosschat 1.3.2 → 1.4.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 +46 -0
- package/README.md +119 -138
- package/dist/cli.js +40 -5
- 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/codex-wrapper.js +33 -0
- package/dist/commands/codex-wrapper.js.map +1 -0
- package/dist/commands/send.js +133 -15
- package/dist/commands/send.js.map +1 -1
- package/dist/envelope.js +11 -2
- package/dist/envelope.js.map +1 -1
- package/dist/federation.js +242 -0
- package/dist/federation.js.map +1 -0
- package/dist/identity.js +25 -0
- package/dist/identity.js.map +1 -1
- package/dist/limits.js +122 -0
- package/dist/limits.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 +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,52 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.4.0] - 2026-10-09
|
|
8
|
+
|
|
9
|
+
### 上限可配置化与轮次预算(票A)
|
|
10
|
+
|
|
11
|
+
- 单条正文上限三层来源:`--max-body-kb` > `CROSSCHAT_MAX_BODY_KIB` > 16KiB 默认(默认行为零变化);按目标端点封顶——claude 64KiB / codex 1MiB / `--via` 本地预检 1MiB(远端自检)、来源值 16MiB 绝对上界
|
|
12
|
+
- 轮次预算:`--max-turn` / `CROSSCHAT_MAX_TURN`,信封显示 `turn="N/M"`(合并进既有 turn 属性,零新增 token 负担)——软提醒不硬拦,调大下一条消息即生效;预算由操作者按两端模型窗口设定、两端建议对齐
|
|
13
|
+
- **新命令 `crosschat codex`**:与 `crosschat claude` 成对的增强启动器——旋钮透传(校验后写会话环境变量,本会话全部 send 继承;send 显式参数仍最高优先)+ **身份清洗**(启动时剥"别家"身份环境变量、留自家——CALLER_IDENTITY_CONFLICT 的机构化预防;家族注册表结构,新 agent 家族加一行即扩展;`CODEX_HOME` 等配置变量不动)
|
|
14
|
+
- 信封教学行保持静态 16KiB(读者是收方、数字是发方的,准确数字只住各侧自己的报错里);远端来件被拒改教 scp 优先(撞端点硬顶时 scp 是唯一出路,不教提额死路)
|
|
15
|
+
- 新增 docs/commands.md 命令全量说明(send 全参数/优先级链/端点封顶表/启动器对/环境变量总表),README 速查挂钩
|
|
16
|
+
- 升级提醒:已装用户重跑 `crosschat install-skills`(旧 skill 不认识 `turn="N/M"`)
|
|
17
|
+
|
|
18
|
+
### 联邦操作手册定版(docs/federation.md)
|
|
19
|
+
|
|
20
|
+
- 手册按操作系统重构:Win/Linux/MacOS 三配置章 + 单向 SSH(NAT 反向隧道)独立章;全文 transcript 单代码块格式(`>` 标命令 / `#` 备注 / `<XX>` 占位符)
|
|
21
|
+
- NAT 反向隧道扩为完整实施手册(N1–N7 步骤/验证阶梯/失败对照表),win↔云端真机闭环实录(User 行必写/隧道即会话生命)
|
|
22
|
+
- 公钥交换改三小步结构(打印→对端装入→收对端公钥);跨系统依赖显式化(⚠️前置/⚠️必做 全篇引用);keyscan 全部换 `accept-new` 首连记指纹(实测部分服务端 keyscan 算法协商缺陷)
|
|
23
|
+
- 白纸冷走验收一次通过定版(drill 报告在案);配套 `scripts/fed-ssh-clean.sh` Linux 侧联邦 ssh 信息幂等清理
|
|
24
|
+
- B11 跨机回复乒乓回归单测补录
|
|
25
|
+
|
|
26
|
+
### 文档
|
|
27
|
+
|
|
28
|
+
- README 多轮重构:主页(亮点/部署在前/双问答实录,细则外迁 docs/usage.md 与 federation.md)、快速入门单框流程记法(👤/🤖/📨 三图例)、错误码表瘦身
|
|
29
|
+
- docs/usage.md 边界行同步提额与预算;docs/wayfinder/map.md 状态同步
|
|
30
|
+
|
|
31
|
+
## [1.3.3] - 2026-10-07
|
|
32
|
+
|
|
33
|
+
### 跨机联邦 v1(ssh + 远端 CLI,全矩阵实测)
|
|
34
|
+
|
|
35
|
+
- `--via ssh:<别名>` 跨机发送:远端 CLI 全权(名字/id8 解析、投递、发件箱都在对端),body 走 stdin 免三方 shell 引号地狱,回执三态透传(delivered/queued/parked 带 `@对端` 后缀)
|
|
36
|
+
- 三层错误码:远端业务错**同码重抛**(`[via 对端]` 前缀,自纠指引原样有效)/ REMOTE_FAILED / SSH_TRANSPORT_FAILED(附 `ssh 对端 crosschat --version` 探活指引);BatchMode 防首连交互卡死(实测 1.6s 快速失败)
|
|
37
|
+
- **回复闭环**:信封回复命令自动带 `--via`(取自 ref 机器字段),照抄即回;`--conversation` 缺 `--via` 时按 ref 自动补全
|
|
38
|
+
- **mc2_ 紧凑会话引用**:296→83 字符(3.6×),每轮双方上下文直省;mc1_ 永久兼容
|
|
39
|
+
- **machine-id 双身份**:m(hostname) 管路由别名、mid(机器指纹) 管同机判定——**两台同名机器照常互通**(别名命名空间自解 + ⚠ 同名警告),自环模式(ssh localhost 测自己)与跨机两全
|
|
40
|
+
- 发起侧审计:跨机发送本机 send-log 补记(含失败),`--conversations` 自然显示己方跨机端对
|
|
41
|
+
- 修复:跨机回复无限 ssh 乒乓(自动补全只认呼叫方对端,B11);origin 全 id 过线(ref 可路由,B8)
|
|
42
|
+
- 部署:README 联邦节手册化——两端 ssh config 逐行样例、密钥五步(管理员组/`wsl -u root` 解鸡生蛋/keyscan 非标端口)、别名=对端 hostname 规则、自环测试步骤、win 收件腿 codex 不可用(AF_UNIX 会话隔离)注记
|
|
43
|
+
- 完整剧本重写:任务下达/汇报/复核/验收全程消息往返,零文件载体
|
|
44
|
+
- 实测档案:localhost 全链路 + win↔WSL 双腿 + 用户亲测三轮(drill-reports 三份)
|
|
45
|
+
|
|
46
|
+
### 其他
|
|
47
|
+
|
|
48
|
+
- `TARGET_NOT_FOUND` / `CALLER_NOT_IN_CONVERSATION` 错误文案补 `--to` 自动接续自愈指引(实地反馈响应)
|
|
49
|
+
- send-log 容量上限(超 5MiB 保尾 1MiB 整行重写,此前无限增长)
|
|
50
|
+
- CI 挂 macos-latest 观察位(continue-on-error);FAQ 补"改名后需发一条消息激活才可见于 status"
|
|
51
|
+
|
|
52
|
+
|
|
7
53
|
## [1.3.2] - 2026-10-06
|
|
8
54
|
|
|
9
55
|
### 变更(B5:status 标注 TUI 占用线程)
|
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,180 +51,113 @@ 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`,待命。
|
|
77
|
+
准备:终端 A 跑 `crosschat claude`,进去后 `/rename worker`;终端 B 开一个 codex 窗口当 boss。然后整个过程:
|
|
87
78
|
|
|
88
|
-
**第 2 步 · 右窗启动 codex(领导)并贴题词**
|
|
89
|
-
```
|
|
90
|
-
D:\workspace\demo> codex
|
|
91
79
|
```
|
|
92
|
-
|
|
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:在当前目录创建 notes.txt…"
|
|
103
|
-
● delivered to worker (turn 1) ← 任务飞进左窗,发起方是 codex
|
|
104
|
-
```
|
|
89
|
+
worker 零配置、没学过任何协议——信封说怎么回就怎么回。
|
|
105
90
|
|
|
106
|
-
|
|
91
|
+
### 跨机:和单机一样,只是对端在另一台机器上
|
|
92
|
+
|
|
93
|
+
准备(一次性):对端(本例 WSL)装好 crosschat、双机互配 ssh 密钥(→ [📡 通信方式](#-通信方式) 表的 ssh 手册,五步配完)。然后整个过程:
|
|
107
94
|
|
|
108
|
-
**第 5 步 · 左窗屏幕——claude 收令干活**
|
|
109
95
|
```
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
⏺ Bash: crosschat send --conversation mc1_xxx --body "已完成:notes.txt 已创建…"
|
|
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](docs/usage.md):发起方式 / 投递语义 / 底层命令 / 边界 |
|
|
112
|
+
| **跨机联邦 · ssh** | 加 `--via ssh:<对端hostname>`,消息经 ssh 落到对端机器,回复自动回来 | ✅ v1.3.3 | [docs/federation.md](docs/federation.md):按操作系统配置(Win/Linux/macOS)/ 单向 NAT / 命令形态 / 大内容 / 自环测试 |
|
|
113
|
+
| 跨机联邦 · tcp | 局域网直连 + 极简预共享鉴权 | 🚧 规划中 | — |
|
|
114
|
+
| 跨机联邦 · broker | 常驻 broker:忙时持久队列、异步回执、投递状态机、堡垒机形态 | 🚧 规划中 | — |
|
|
122
115
|
|
|
123
|
-
|
|
116
|
+
ssh 配置方向一句话:**每台机写自己的 `~/.ssh/config`,内容是"怎么连对端"**(别名推荐=对端 hostname)——完整五步与命令样例见上表手册。
|
|
124
117
|
|
|
125
118
|
## 📋 命令列表
|
|
126
119
|
|
|
127
120
|
```
|
|
128
121
|
crosschat send --to <名字> --body "<正文>" # 新消息(名字含空格加引号;未命名 codex 线程可用 id8 或完整 id 寻址,status 可见)
|
|
129
122
|
crosschat send --conversation <ref> --body "<正文>" # 回复(ref 照抄收到的信封)
|
|
123
|
+
crosschat send --via ssh:<对端hostname> --to <名/id8> --body "…" # 跨机发送(见 📡 通信方式)
|
|
130
124
|
echo … | crosschat send --to <名字> # 正文走 stdin
|
|
131
125
|
crosschat status [--json] [--conversations] # 双侧总览(名字/目录/时间/状态)
|
|
132
126
|
crosschat doctor # 一键环境体检(有 ❌ 时退出码 1)
|
|
133
127
|
crosschat install-skills [--dir <根>] # 安装/更新 agent skill(幂等)
|
|
134
|
-
crosschat claude [任意 claude 参数…] # 带接收许可启动 claude
|
|
128
|
+
crosschat claude [任意 claude 参数…] # 带接收许可启动 claude(透传;--max-body-kb/--max-turn N 可预置本会话发送上限/轮次预算,并剥离 codex 侧身份变量)
|
|
129
|
+
crosschat codex [任意 codex 参数…] # crosschat 增强启动 codex(透传;同上旋钮预置,并剥离 claude 侧身份变量)
|
|
135
130
|
crosschat -v | --version | help # 版本 / 帮助
|
|
136
131
|
```
|
|
137
132
|
|
|
133
|
+
完整参数、启动器与环境变量说明见 [docs/commands.md](docs/commands.md)。
|
|
134
|
+
|
|
138
135
|
发送输出三种状态:`delivered`(已投递)/ `parked`(对方忙,已入发件箱,看门狗自动重投;输出含队列深度与 mailbox 镜像路径)/ 错误码(见排障)。
|
|
139
136
|
|
|
140
137
|
`status --conversations` 另看对话总览:每对端点的最近方向、相对时间、轮次、末条状态与滞留数(与 `--json` 组合输出同结构数组)。
|
|
141
138
|
|
|
142
|
-
## 📖 对话生命周期(规则总纲)
|
|
143
|
-
|
|
144
|
-
### 三种发起方式
|
|
145
|
-
|
|
146
|
-
| 发起者 | 怎么发 | 特性 |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| **claude** | 会话内 agent 跑 `crosschat send --to <codex 线程名> --body "…"` | 最顺,推荐默认 |
|
|
149
|
-
| **codex** | 会话内 agent 跑 `crosschat send --to <claude 会话名> --body "…"` | 发送随意;回信开窗关窗都能收(daemon 0.160+) |
|
|
150
|
-
| **人** | 任意终端直接 `crosschat send --to <名字> --body "…"` | 身份是 human:**能发、不能被回复**(单向指令) |
|
|
151
|
-
| **脚本(headless)** | `codex exec "<题词>"` 建线程,然后 `crosschat send --to <id8> --body "…"` | codex 原生命令:建线程 + 跑一轮自动硬化 + 退出,角色题词随行;**线程 id 就在输出头 `session id:` 行**(并发多路各拿各的,零歧义);`crosschat status` 里 originator 为 `codex_exec`、cwd 列可辨。跨机预置(联邦就绪后):`ssh <host> codex exec "<题词>"` |
|
|
152
|
-
|
|
153
|
-
第一条消息永远用 `--to`(此刻生成对话引用 reply-ref);对方名字用 `status` 查。`--to` 不必只用于第一条:对同一端对的重复 `--to` 发送会**自动接续你们最近的对话**(turn 递增,本地记账,无需手带引用);要另起线程时用 `--conversation` 显式切换即可。
|
|
154
|
-
|
|
155
|
-
### 往复规则
|
|
156
|
-
|
|
157
|
-
1. 收到方看到**信封消息**(`from-name` + `turn="N"` + 回复提示)
|
|
158
|
-
2. 回复 = **逐字照抄回复提示里的命令**,换掉 `<你的回复>`——引用自动轮转,无需记任何历史
|
|
159
|
-
3. 防失控:每对端点 30 条/60 秒限流
|
|
160
|
-
|
|
161
|
-
### 轮次与终止
|
|
162
|
-
|
|
163
|
-
信封显示 `turn="N"`;题词给预算(如"10 轮内完成");接近预算时 agent 按 skill 准则总结收尾;协议层不强制终止。
|
|
164
|
-
|
|
165
|
-
## 📡 投递语义矩阵
|
|
166
|
-
|
|
167
|
-
| 接收方 | 状态 | 行为 |
|
|
168
|
-
|---|---|---|
|
|
169
|
-
| claude(`crosschat claude` 启动) | 窗口开 | ✅ 秒达,会话内出现信封消息 |
|
|
170
|
-
| claude(裸 `claude` 启动) | 任何 | ❌ 无接收许可(换 `crosschat claude` 重启) |
|
|
171
|
-
| codex(daemon ≥0.160) | 窗口开/关 | ✅ 送达(headless 执行;TUI 不实时刷新,翻历史可见) |
|
|
172
|
-
| codex(daemon ≥0.160) | turn 进行中(忙) | ✅ **入队即达**:`queued`(按线程串行,轮结束瞬间落历史并被处理)——与 Claude 收件箱同粒度 |
|
|
173
|
-
| codex(旧 daemon ≤0.157 / `--no-daemon`) | 窗口开 | ⏳ 等待 ~10s,关窗瞬间送达;超时 `parked` 入发件箱(看门狗自动重投) |
|
|
174
|
-
| codex | 排队被旧 daemon 拒绝等罕见态 | 📮 `parked` 入发件箱(新消息排队不插队),看门狗每 0.5–5 分钟自动重投 |
|
|
175
|
-
|
|
176
|
-
**不对称速记**:claude 收发都随意;codex 收信在 0.160+ 开窗关窗均可,关窗永远是最稳路径。
|
|
177
|
-
|
|
178
|
-
## 🤝 Agent 兼容性
|
|
179
|
-
|
|
180
|
-
| Agent | 发送 | 接收 | 实测版本 |
|
|
181
|
-
|---|---|---|---|
|
|
182
|
-
| Claude Code | ✅ | ✅(需 `crosschat claude` 启动) | 2.1.287 |
|
|
183
|
-
| Codex CLI | ✅ | ✅(需 daemon;0.160+ 开窗可收) | 0.159.3 / 0.160.0 |
|
|
184
|
-
| 任意有 shell 的 agent | ✅(装 skill 后) | 🔜 按适配器扩展(GLM 等) | 路线图 |
|
|
185
|
-
|
|
186
|
-
## 🗺️ 路线图
|
|
187
|
-
|
|
188
|
-
**已完成(v1.0.0)**
|
|
189
|
-
- [x] Claude ↔ Codex / Claude ↔ Claude / Codex ↔ Codex 双向消息(真机联调验证)
|
|
190
|
-
- [x] 无状态 CLI 四命令 + 自包含会话引用 + 轮次计数
|
|
191
|
-
- [x] 双侧自动发现(含目录/时间标注)、信封自带教学 skill
|
|
192
|
-
- [x] 16KiB 上限、30 条/60s 防乒乓限流、身份冲突自纠指引
|
|
193
|
-
- [x] 忙/锁超时 → 本地发件箱 + 看门狗自动重投(outbox,FIFO 不插队,mailbox 镜像可读)
|
|
194
|
-
- [x] daemon 0.160 开窗投递(实证:同 daemon 多连接绕过写者锁)
|
|
195
|
-
|
|
196
|
-
**已完成(v1.3.0)**
|
|
197
|
-
- [x] 🐧 Linux/WSL 平台支持(experimental):PosixPipeTransport + claude unix 投递(免 auth 行,同 uid 内核凭证)+ CI ubuntu 矩阵;mac 外推未实测
|
|
198
|
-
|
|
199
|
-
**已完成(v1.3.2)**
|
|
200
|
-
- [x] 👀 status 标注 TUI 占用线程(`thread-writer-locks` 锁文件信号源:行尾 `TUI占用` 标记、JSON `held` 字段、锁住未列入线程补行)
|
|
201
|
-
- 专用信箱线程机制化 → **评估后不做**:命名由双侧原生 `/rename` 与 id8 寻址承接,crosschat 不拥有会话生命周期(决策记录见 [map 007](docs/wayfinder/map.md));headless 建线程用 `codex exec`(见对话生命周期表)
|
|
202
|
-
|
|
203
|
-
**计划中**
|
|
204
|
-
- [ ] 🌐 跨机联邦(SSH,异构 win ↔ linux 互聊)
|
|
205
|
-
- [ ] 🐧 mac 平台适配(unix 代码路径已共享,待实机验证;平台接缝:PipeTransport / ProcessInspector / PathLayout)
|
|
206
|
-
- [ ] 📦 常驻 broker(忙时持久队列、异步回执、投递状态机——embassy 完整集对齐;堡垒机形态)
|
|
207
|
-
- [ ] 🖼️ TUI 看板与服务安装(开机自启)
|
|
208
|
-
- [ ] 🤖 新 agent 适配器(GLM 等;有原生唤醒通道则原生,否则论证降级)
|
|
209
|
-
|
|
210
139
|
## 🧯 错误码排障
|
|
211
140
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
**身份类**:`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`(对话由人发起)
|
|
141
|
+
报错输出自带完整自纠指引,这张表只当速查索引:
|
|
215
142
|
|
|
216
|
-
|
|
143
|
+
| 错误码 | 含义与动作 |
|
|
144
|
+
|---|---|
|
|
145
|
+
| `NAME_NOT_FOUND` / `NAME_COLLISION` | 名字不对/重名——错误信息已列可用名;重名改用 id8 寻址 |
|
|
146
|
+
| `MESSAGE_TOO_LARGE` | 单条超上限(默认 16KiB;`--max-body-kb` / `CROSSCHAT_MAX_BODY_KIB` 可提额,claude 端点封顶 64KiB、codex 1MiB,到顶只能落盘)——按提示走落盘路径(跨机 scp 见 ssh 手册) |
|
|
147
|
+
| `RATE_LIMITED` | 30 条/60s 限流——等待或收尾 |
|
|
148
|
+
| `TARGET_*` / `BODY_*` / `USAGE` | 参数错误——按提示改 |
|
|
149
|
+
| `CALLER_IDENTITY_CONFLICT` | 环境双身份残留——临时解法在报错里(`env -u` 前缀);根治:干净终端重启 daemon |
|
|
150
|
+
| `CALLER_NOT_IN_CONVERSATION` | 不在对话内——照抄信封里的引用回复 |
|
|
151
|
+
| `CANNOT_REPLY_TO_HUMAN` | 人发起的对话,单向不可回 |
|
|
152
|
+
| `CODEX_PROXY_SPAWN_FAILED` | daemon 未跑——干净终端 `codex app-server daemon start` |
|
|
153
|
+
| `CODEX_THREAD_LOCKED` / `CODEX_THREAD_BUSY_TIMEOUT` | 已自动转 `parked` 入发件箱,无需重发 |
|
|
154
|
+
| `OUTBOX_FULL` | 发件箱满(每线程 200 条)——读 mailbox 镜像取回 |
|
|
155
|
+
| `CODEX_APPROVAL_REQUIRED` | 对方在等审批——工具永不代答,去对方窗口处理 |
|
|
156
|
+
| `CLAUDE_PIPE_*` / `CODEX_*UNCERTAIN` | 状态不明——**勿盲目重发**,先 `status` 核实 |
|
|
217
157
|
|
|
218
158
|
**发送审计**:每次发送的最终结果(delivered/queued/parked/failed、时间、对端、发送方显示名 fromName、回执)追加记录在状态目录的 `send-log.jsonl`(Windows `%LOCALAPPDATA%\crosschat\`;unix `~/crosschat/`);codex 投递附 rollout 回执(消息已确认落入对方会话历史 = `receipt: confirmed`)。命令超时转后台后结果同样在案,事后可查。
|
|
219
159
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
单条 ≤16KiB;每对端点 30 条/60s;发件箱每线程 200 条(满时读状态目录 `mailbox\<线程ID>.md` 镜像取回内容:Windows `%LOCALAPPDATA%\crosschat\mailbox\`、unix `~/crosschat/mailbox/`);信任边界=同一系统用户(Windows 用户 / unix uid);接收许可仅 `crosschat claude` 启动的会话。
|
|
223
|
-
|
|
224
|
-
**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`。
|
|
160
|
+
边界与限制(16KiB / 限流 / 发件箱 / 信任边界 / daemon 依赖)→ [docs/usage.md](docs/usage.md)
|
|
225
161
|
|
|
226
162
|
## ❓ FAQ
|
|
227
163
|
|
|
@@ -235,6 +171,12 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
235
171
|
|
|
236
172
|
**Q:消息历史在哪看?** claude 侧=会话 transcript;codex 侧=开窗 resume 线程。
|
|
237
173
|
|
|
174
|
+
**Q:跨机怎么看不到对端的会话?** `status` 只列**本机**会话;跨机看对端用 `ssh <对端> crosschat status`。
|
|
175
|
+
|
|
176
|
+
**Q:会话经常重启,名字对不上?** claude 重启后自动编号会漂移;常重启的会话进去先 `/rename` 固定一个稳定名字——名字稳定,`--to` 自动接续就不会断。
|
|
177
|
+
|
|
178
|
+
**Q:`/rename` 改名后 status 里还是旧名/没有它?** 改名(claude 与 codex TUI 同理)要**再发送一条消息激活一轮**,crosschat 才看得到新名——codex 新建线程同理(零轮次不入列表)。操作顺序:`/rename 名字` → 随便发一条 → 再 `crosschat status`。
|
|
179
|
+
|
|
238
180
|
## 🔧 故障恢复
|
|
239
181
|
|
|
240
182
|
| 症状 | 动作 |
|
|
@@ -251,11 +193,50 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
251
193
|
| 文档 | 内容 |
|
|
252
194
|
|---|---|
|
|
253
195
|
| [docs/architecture.md](docs/architecture.md) | **底层原理**:注册表/命名管道/daemon 通道、写者锁本质、信封与自包含引用、完整投递流程图 |
|
|
196
|
+
| [docs/usage.md](docs/usage.md) | **单机深度细则**:发起方式 / 往复规则 / 投递语义矩阵 / 边界与限制 |
|
|
197
|
+
| [docs/federation.md](docs/federation.md) | **跨机联邦手册**:按操作系统配置 / 单向 NAT / 使用细则 / 大内容 scp / 自环测试 |
|
|
254
198
|
| [CHANGELOG.md](CHANGELOG.md) | 版本变更记录 |
|
|
255
199
|
| [docs/wayfinder/map.md](docs/wayfinder/map.md) | 设计决策地图(全部拍板过程与依据) |
|
|
256
200
|
| [docs/research/](docs/research/) | 实测研究报告(embassy 源码分析、两侧通道验证、0.160 inject_items 实验) |
|
|
257
201
|
| [docs/drill-reports/](docs/drill-reports/) | 联调实证记录 |
|
|
258
202
|
|
|
203
|
+
## 🤝 Agent 兼容性
|
|
204
|
+
|
|
205
|
+
| Agent | 发送 | 接收 | 实测版本 |
|
|
206
|
+
|---|---|---|---|
|
|
207
|
+
| Claude Code | ✅ | ✅(需 `crosschat claude` 启动) | 2.1.287 |
|
|
208
|
+
| Codex CLI | ✅ | ✅(需 daemon;0.160+ 开窗可收) | 0.159.3 / 0.160.0 |
|
|
209
|
+
| 任意有 shell 的 agent | ✅(装 skill 后) | 🔜 按适配器扩展(GLM 等) | 路线图 |
|
|
210
|
+
|
|
211
|
+
## 🗺️ 路线图
|
|
212
|
+
|
|
213
|
+
**计划中**
|
|
214
|
+
- [ ] 🐧 mac 平台适配(unix 代码路径已共享,待实机验证;CI mac 观察位已挂)
|
|
215
|
+
- [ ] 📦 常驻 broker(忙时持久队列、异步回执、投递状态机——embassy 完整集对齐;堡垒机形态);tcp 直连传输(局域网 + 极简预共享鉴权)
|
|
216
|
+
- [ ] 🖼️ TUI 看板与服务安装(开机自启)
|
|
217
|
+
- [ ] 🤖 新 agent 适配器(GLM 等;有原生唤醒通道则原生,否则论证降级)
|
|
218
|
+
|
|
219
|
+
<details><summary>已完成(v1.0.0 – v1.3.3)</summary>
|
|
220
|
+
|
|
221
|
+
**v1.0.0**
|
|
222
|
+
- [x] Claude ↔ Codex / Claude ↔ Claude / Codex ↔ Codex 双向消息(真机联调验证)
|
|
223
|
+
- [x] 无状态 CLI 四命令 + 自包含会话引用 + 轮次计数
|
|
224
|
+
- [x] 双侧自动发现(含目录/时间标注)、信封自带教学 skill
|
|
225
|
+
- [x] 16KiB 上限、30 条/60s 防乒乓限流、身份冲突自纠指引
|
|
226
|
+
- [x] 忙/锁超时 → 本地发件箱 + 看门狗自动重投(outbox,FIFO 不插队,mailbox 镜像可读)
|
|
227
|
+
- [x] daemon 0.160 开窗投递(实证:同 daemon 多连接绕过写者锁)
|
|
228
|
+
|
|
229
|
+
**v1.3.0**
|
|
230
|
+
- [x] 🐧 Linux/WSL 平台支持(experimental):PosixPipeTransport + claude unix 投递(免 auth 行,同 uid 内核凭证)+ CI ubuntu 矩阵;mac 外推未实测
|
|
231
|
+
|
|
232
|
+
**v1.3.2**
|
|
233
|
+
- [x] 👀 status 标注 TUI 占用线程(`thread-writer-locks` 锁文件信号源:行尾 `TUI占用` 标记、JSON `held` 字段、锁住未列入线程补行)
|
|
234
|
+
- 专用信箱线程机制化 → **评估后不做**:命名由双侧原生 `/rename` 与 id8 寻址承接,crosschat 不拥有会话生命周期(决策记录见 [map 007](docs/wayfinder/map.md));headless 建线程用 `codex exec`(见对话生命周期表)
|
|
235
|
+
|
|
236
|
+
**v1.3.3**
|
|
237
|
+
- [x] 🌐 跨机联邦 ssh v1:`--via ssh:<对端hostname>`、mc2_ 紧凑会话引用(296→83 字符)、信封自动回程路条、三层错误码同码透传、发起侧审计补记账;localhost 与 win↔WSL 真机验证(win 收件腿 codex 侧受 AF_UNIX 限制,见联邦手册);tcp/broker 传输见路线图
|
|
238
|
+
</details>
|
|
239
|
+
|
|
259
240
|
## 🛠️ 开发说明
|
|
260
241
|
|
|
261
242
|
```bash
|
package/dist/cli.js
CHANGED
|
@@ -9,11 +9,14 @@ import { runStatus } from './commands/status.js';
|
|
|
9
9
|
import { runInstallSkills } from './commands/install-skills.js';
|
|
10
10
|
import { runDoctor } from './commands/doctor.js';
|
|
11
11
|
import { runClaudeWrapper } from './commands/claude-wrapper.js';
|
|
12
|
+
import { runCodexWrapper } from './commands/codex-wrapper.js';
|
|
12
13
|
import { defaultRateDir } from './rate-limit.js';
|
|
13
14
|
import { defaultOutboxDir, drain } from './outbox.js';
|
|
14
15
|
import { runWatchdog, spawnWatchdog as ensureWatchdog } from './watchdog.js';
|
|
15
16
|
import { appendSendLog, confirmInRollout, defaultSendLogFile } from './send-log.js';
|
|
16
17
|
import { defaultConversationsFile } from './conversations.js';
|
|
18
|
+
import { defaultSshExec } from './federation.js';
|
|
19
|
+
import { machineId } from './platform/machine-id.js';
|
|
17
20
|
import { conversationSummaries } from './conversation-summary.js';
|
|
18
21
|
import { codexHomeDir, listWriterLocks } from './codex/rollout-meta.js';
|
|
19
22
|
import { listClaudeSessions } from './claude/registry.js';
|
|
@@ -24,9 +27,15 @@ const version = JSON.parse(readFileSync(new URL('../package.json', import.meta.u
|
|
|
24
27
|
const usage = `usage: crosschat <command> [options]
|
|
25
28
|
|
|
26
29
|
commands:
|
|
27
|
-
send --to <name> | --conversation <ref>
|
|
30
|
+
send [--via ssh:<host>] --to <name> | --conversation <ref>
|
|
28
31
|
send a message (--body <text> or stdin);
|
|
29
|
-
quote <name> if it contains spaces
|
|
32
|
+
quote <name> if it contains spaces;
|
|
33
|
+
--via sends to a peer machine (host = ~/.ssh/config
|
|
34
|
+
alias, peer resolves names on its side);
|
|
35
|
+
--max-body-kb <KiB> raises the body cap for this
|
|
36
|
+
send (default 16; env CROSSCHAT_MAX_BODY_KIB);
|
|
37
|
+
--max-turn <N> stamps a soft turn budget into
|
|
38
|
+
the envelope (env CROSSCHAT_MAX_TURN)
|
|
30
39
|
status [--conversations] show claude/codex session status, or per-pair
|
|
31
40
|
conversation overview with --conversations
|
|
32
41
|
doctor environment health check (exits 1 on any ❌)
|
|
@@ -34,17 +43,22 @@ commands:
|
|
|
34
43
|
install the agent skill into <root>/.claude and
|
|
35
44
|
<root>/.codex (default root: home directory)
|
|
36
45
|
claude [args...] run the real claude CLI with inbound peer
|
|
37
|
-
messaging enabled;
|
|
46
|
+
messaging enabled; --max-body-kb/--max-turn <N>
|
|
47
|
+
preset the session's send caps via env;
|
|
48
|
+
other args pass through
|
|
49
|
+
codex [args...] run the real codex CLI with the same crosschat
|
|
50
|
+
knobs via env (no codex settings injected);
|
|
51
|
+
other args pass through
|
|
38
52
|
|
|
39
53
|
options:
|
|
40
54
|
--json single-line JSON output (send/status)
|
|
41
55
|
-v, --version print version and exit
|
|
42
56
|
--help | help show this help and exit
|
|
43
57
|
`;
|
|
44
|
-
/** Hand-rolled send arg parsing (no dependency): --to/--conversation/--body take values, --json is a flag. */
|
|
58
|
+
/** Hand-rolled send arg parsing (no dependency): --to/--conversation/--body/--via/--origin/--max-body-kb/--max-turn take values, --json is a flag. --origin is machine-injected (008) and stays out of usage. Raw values only — numeric validation lives in limits.ts (invalid silently degrades, ticket A). */
|
|
45
59
|
export function parseSendArgs(argv) {
|
|
46
60
|
const args = {};
|
|
47
|
-
const valueOpts = new Set(['--to', '--conversation', '--body']);
|
|
61
|
+
const valueOpts = new Set(['--to', '--conversation', '--body', '--via', '--origin', '--max-body-kb', '--max-turn']);
|
|
48
62
|
for (let i = 0; i < argv.length; i++) {
|
|
49
63
|
const token = argv[i];
|
|
50
64
|
if (token === undefined || !token.startsWith('--')) {
|
|
@@ -68,6 +82,14 @@ export function parseSendArgs(argv) {
|
|
|
68
82
|
args.to = value;
|
|
69
83
|
else if (name === '--conversation')
|
|
70
84
|
args.conversation = value;
|
|
85
|
+
else if (name === '--via')
|
|
86
|
+
args.via = value;
|
|
87
|
+
else if (name === '--origin')
|
|
88
|
+
args.origin = value;
|
|
89
|
+
else if (name === '--max-body-kb')
|
|
90
|
+
args.maxBodyKb = value;
|
|
91
|
+
else if (name === '--max-turn')
|
|
92
|
+
args.maxTurn = value;
|
|
71
93
|
else
|
|
72
94
|
args.bodyArg = value;
|
|
73
95
|
}
|
|
@@ -134,6 +156,10 @@ function realSendDeps(stdinText) {
|
|
|
134
156
|
appendLog: (entry) => appendSendLog(defaultSendLogFile(), entry),
|
|
135
157
|
confirmReceipt: (threadId, marker) => confirmInRollout(codexHomeDir(), threadId, marker),
|
|
136
158
|
conversationStateFile: defaultConversationsFile(),
|
|
159
|
+
// Federation (008/B1): real transport + machine name for --origin.
|
|
160
|
+
sshExec: (argv, input, timeoutMs) => defaultSshExec(argv, input, timeoutMs),
|
|
161
|
+
// B10: stable per-install id — same-machine decisions survive hostname collisions.
|
|
162
|
+
machineId: () => machineId(),
|
|
137
163
|
};
|
|
138
164
|
}
|
|
139
165
|
function realStatusDeps() {
|
|
@@ -287,6 +313,15 @@ async function main(argv) {
|
|
|
287
313
|
return printFailure(err);
|
|
288
314
|
}
|
|
289
315
|
}
|
|
316
|
+
if (command === 'codex') {
|
|
317
|
+
// Everything passes through to the real codex CLI (including --help).
|
|
318
|
+
try {
|
|
319
|
+
return await runCodexWrapper(rest);
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
return printFailure(err);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
290
325
|
process.stderr.write(`crosschat: USAGE: unknown command: ${command}\n\n`);
|
|
291
326
|
process.stderr.write(usage);
|
|
292
327
|
return 1;
|
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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"}
|
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
|
+
import process from 'node:process';
|
|
2
3
|
import { MultichatError } from '../errors.js';
|
|
3
4
|
import { resolveClaudeExe } from '../claude/resolve-exe.js';
|
|
5
|
+
import { splitLauncherKnobs, validateLauncherKnob } from '../limits.js';
|
|
6
|
+
import { otherIdentityKeys, stripOtherFamilies } from '../identity.js';
|
|
4
7
|
/**
|
|
5
8
|
* `crosschat claude [args...]`: start the real claude CLI with
|
|
6
9
|
* `crossSessionInbound: accept` so peer sessions can inject messages
|
|
7
10
|
* (ticket 002: without it inbound frames sit in parity hold).
|
|
11
|
+
*
|
|
12
|
+
* 票A 旋钮透传:`--max-body-kb <N>` / `--max-turn <N>` 是 crosschat 的旋钮
|
|
13
|
+
* (不是 claude 的参数),剥离、校验后写进子进程环境变量——该会话后续所有
|
|
14
|
+
* `crosschat send` 经 env 层继承;send 显式参数仍最高优先(三层链不动)。
|
|
15
|
+
*
|
|
16
|
+
* 身份清洗(票A 第五单):启动 claude 时剥掉 codex 家族身份变量
|
|
17
|
+
* (CODEX_THREAD_ID / CODEX_SESSION_ID)——从 codex 会话里启动的 claude 会把
|
|
18
|
+
* 双身份带进每个 crosschat 子命令(CALLER_IDENTITY_CONFLICT;报错里 env -u
|
|
19
|
+
* 的人工自纠在这里机构化做掉)。
|
|
20
|
+
*
|
|
21
|
+
* 全局规则(平面分家):启动器 = 会话面配置的家(crosschat claude / codex);
|
|
22
|
+
* 传输面配置(tcp 端口/密钥、broker 编址)属传输组件自己的面,不进启动器
|
|
23
|
+
* ——远端来件与非会话上下文读不到会话启动参数。
|
|
8
24
|
*/
|
|
9
25
|
const INBOUND_SETTINGS = JSON.stringify({ crossSessionInbound: 'accept' });
|
|
10
26
|
export function defaultClaudeWrapperDeps() {
|
|
11
27
|
return {
|
|
12
28
|
resolveExe: () => resolveClaudeExe(),
|
|
13
|
-
spawnInherit: (exe, args) => new Promise((resolve, reject) => {
|
|
14
|
-
const child = spawn(exe, args, { stdio: 'inherit' });
|
|
29
|
+
spawnInherit: (exe, args, env) => new Promise((resolve, reject) => {
|
|
30
|
+
const child = spawn(exe, args, env === undefined ? { stdio: 'inherit' } : { stdio: 'inherit', env });
|
|
15
31
|
child.on('error', reject);
|
|
16
32
|
child.on('close', (code) => resolve(code ?? 1));
|
|
17
33
|
}),
|
|
@@ -22,7 +38,19 @@ export async function runClaudeWrapper(args, deps = defaultClaudeWrapperDeps())
|
|
|
22
38
|
throw new MultichatError('SETTINGS_CONFLICT', 'crosschat claude passes its own --settings {"crossSessionInbound":"accept"}. '
|
|
23
39
|
+ 'Merge that JSON into your settings file and start claude directly instead.');
|
|
24
40
|
}
|
|
41
|
+
const { passthrough, maxBodyKb, maxTurn } = splitLauncherKnobs(args);
|
|
42
|
+
const maxBodyKbNum = validateLauncherKnob('crosschat claude', '--max-body-kb', maxBodyKb);
|
|
43
|
+
const maxTurnNum = validateLauncherKnob('crosschat claude', '--max-turn', maxTurn);
|
|
44
|
+
const parentEnv = deps.env ?? process.env;
|
|
45
|
+
const foreignIdentityPresent = otherIdentityKeys('claude').some((key) => parentEnv[key] !== undefined);
|
|
46
|
+
const env = maxBodyKbNum === undefined && maxTurnNum === undefined && !foreignIdentityPresent
|
|
47
|
+
? undefined // 无旋钮且无对族身份变量 = 与现状完全一致(不传 env,spawn 继承)
|
|
48
|
+
: stripOtherFamilies({
|
|
49
|
+
...parentEnv,
|
|
50
|
+
...(maxBodyKbNum !== undefined ? { CROSSCHAT_MAX_BODY_KIB: String(maxBodyKbNum) } : {}),
|
|
51
|
+
...(maxTurnNum !== undefined ? { CROSSCHAT_MAX_TURN: String(maxTurnNum) } : {}),
|
|
52
|
+
}, 'claude');
|
|
25
53
|
const exe = deps.resolveExe();
|
|
26
|
-
return deps.spawnInherit(exe, ['--settings', INBOUND_SETTINGS, ...
|
|
54
|
+
return deps.spawnInherit(exe, ['--settings', INBOUND_SETTINGS, ...passthrough], env);
|
|
27
55
|
}
|
|
28
56
|
//# sourceMappingURL=claude-wrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-wrapper.js","sourceRoot":"","sources":["../../src/commands/claude-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-wrapper.js","sourceRoot":"","sources":["../../src/commands/claude-wrapper.ts"],"names":[],"mappings":"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"}
|