@oatelauser/crosschat 1.4.0 → 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 +25 -0
- package/README.md +26 -17
- package/dist/cli.js +232 -20
- package/dist/cli.js.map +1 -1
- package/dist/commands/clean.js +91 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/doctor.js +54 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/send.js +74 -16
- 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 +1 -1
- package/dist/envelope.js.map +1 -1
- package/dist/federation.js +14 -7
- package/dist/federation.js.map +1 -1
- package/dist/limits.js +8 -4
- package/dist/limits.js.map +1 -1
- 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 +10 -5
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
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
|
+
|
|
7
32
|
## [1.4.0] - 2026-10-09
|
|
8
33
|
|
|
9
34
|
### 上限可配置化与轮次预算(票A)
|
package/README.md
CHANGED
|
@@ -90,7 +90,7 @@ worker 零配置、没学过任何协议——信封说怎么回就怎么回。
|
|
|
90
90
|
|
|
91
91
|
### 跨机:和单机一样,只是对端在另一台机器上
|
|
92
92
|
|
|
93
|
-
准备(一次性):对端(本例 WSL)装好 crosschat、双机互配 ssh 密钥(→ [📡 通信方式](#-通信方式)
|
|
93
|
+
准备(一次性):对端(本例 WSL)装好 crosschat、双机互配 ssh 密钥(→ [📡 通信方式](#-通信方式) 表的联邦手册,五步配完)。然后整个过程:
|
|
94
94
|
|
|
95
95
|
```
|
|
96
96
|
👤 用户[boss -> beta2] 使用 crosschat 发送消息给 beta2 问好,消息要求经过 ssh 管道送到(send 时加 --via ssh:yangwsl)。需要对方回复并停止。
|
|
@@ -108,30 +108,34 @@ worker 零配置、没学过任何协议——信封说怎么回就怎么回。
|
|
|
108
108
|
|
|
109
109
|
| 方式 | 一句话 | 状态 | 深入 |
|
|
110
110
|
|---|---|---|---|
|
|
111
|
-
| **单机会话** | 同机 agent 互发,`--to <名字>` 即起对话,忙时自动入队/发件箱 | ✅ v1.0 | [
|
|
112
|
-
| **跨机联邦 · ssh** | 加 `--via ssh:<对端hostname>`,消息经 ssh 落到对端机器,回复自动回来 | ✅ v1.3.3 | [
|
|
113
|
-
|
|
|
114
|
-
| 跨机联邦 · broker |
|
|
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) | 🚧 规划中 | — |
|
|
115
115
|
|
|
116
116
|
ssh 配置方向一句话:**每台机写自己的 `~/.ssh/config`,内容是"怎么连对端"**(别名推荐=对端 hostname)——完整五步与命令样例见上表手册。
|
|
117
117
|
|
|
118
118
|
## 📋 命令列表
|
|
119
119
|
|
|
120
|
+
完整参数、启动器与环境变量说明见 [命令手册](docs/commands.md)。
|
|
121
|
+
|
|
120
122
|
```
|
|
121
123
|
crosschat send --to <名字> --body "<正文>" # 新消息(名字含空格加引号;未命名 codex 线程可用 id8 或完整 id 寻址,status 可见)
|
|
122
124
|
crosschat send --conversation <ref> --body "<正文>" # 回复(ref 照抄收到的信封)
|
|
123
125
|
crosschat send --via ssh:<对端hostname> --to <名/id8> --body "…" # 跨机发送(见 📡 通信方式)
|
|
126
|
+
crosschat send --via tcp:<机器名/mid8> --to <名> --body "…" [--file <路径>] # 跨机 tcp 直发 + 文件通道(见转发器手册)
|
|
124
127
|
echo … | crosschat send --to <名字> # 正文走 stdin
|
|
125
128
|
crosschat status [--json] [--conversations] # 双侧总览(名字/目录/时间/状态)
|
|
126
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 收尾)
|
|
127
133
|
crosschat install-skills [--dir <根>] # 安装/更新 agent skill(幂等)
|
|
128
134
|
crosschat claude [任意 claude 参数…] # 带接收许可启动 claude(透传;--max-body-kb/--max-turn N 可预置本会话发送上限/轮次预算,并剥离 codex 侧身份变量)
|
|
129
135
|
crosschat codex [任意 codex 参数…] # crosschat 增强启动 codex(透传;同上旋钮预置,并剥离 claude 侧身份变量)
|
|
130
136
|
crosschat -v | --version | help # 版本 / 帮助
|
|
131
137
|
```
|
|
132
138
|
|
|
133
|
-
完整参数、启动器与环境变量说明见 [docs/commands.md](docs/commands.md)。
|
|
134
|
-
|
|
135
139
|
发送输出三种状态:`delivered`(已投递)/ `parked`(对方忙,已入发件箱,看门狗自动重投;输出含队列深度与 mailbox 镜像路径)/ 错误码(见排障)。
|
|
136
140
|
|
|
137
141
|
`status --conversations` 另看对话总览:每对端点的最近方向、相对时间、轮次、末条状态与滞留数(与 `--json` 组合输出同结构数组)。
|
|
@@ -143,7 +147,7 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
143
147
|
| 错误码 | 含义与动作 |
|
|
144
148
|
|---|---|
|
|
145
149
|
| `NAME_NOT_FOUND` / `NAME_COLLISION` | 名字不对/重名——错误信息已列可用名;重名改用 id8 寻址 |
|
|
146
|
-
| `MESSAGE_TOO_LARGE` | 单条超上限(默认 16KiB;`--max-body-kb` / `CROSSCHAT_MAX_BODY_KIB` 可提额,claude 端点封顶 64KiB、codex 1MiB,到顶只能落盘)——按提示走落盘路径(跨机 scp
|
|
150
|
+
| `MESSAGE_TOO_LARGE` | 单条超上限(默认 16KiB;`--max-body-kb` / `CROSSCHAT_MAX_BODY_KIB` 可提额,claude 端点封顶 64KiB、codex 1MiB,到顶只能落盘)——按提示走落盘路径(跨机 scp 见联邦手册) |
|
|
147
151
|
| `RATE_LIMITED` | 30 条/60s 限流——等待或收尾 |
|
|
148
152
|
| `TARGET_*` / `BODY_*` / `USAGE` | 参数错误——按提示改 |
|
|
149
153
|
| `CALLER_IDENTITY_CONFLICT` | 环境双身份残留——临时解法在报错里(`env -u` 前缀);根治:干净终端重启 daemon |
|
|
@@ -157,7 +161,7 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
157
161
|
|
|
158
162
|
**发送审计**:每次发送的最终结果(delivered/queued/parked/failed、时间、对端、发送方显示名 fromName、回执)追加记录在状态目录的 `send-log.jsonl`(Windows `%LOCALAPPDATA%\crosschat\`;unix `~/crosschat/`);codex 投递附 rollout 回执(消息已确认落入对方会话历史 = `receipt: confirmed`)。命令超时转后台后结果同样在案,事后可查。
|
|
159
163
|
|
|
160
|
-
边界与限制(16KiB / 限流 / 发件箱 / 信任边界 / daemon 依赖)→ [
|
|
164
|
+
边界与限制(16KiB / 限流 / 发件箱 / 信任边界 / daemon 依赖)→ [使用手册](docs/usage.md)
|
|
161
165
|
|
|
162
166
|
## ❓ FAQ
|
|
163
167
|
|
|
@@ -192,13 +196,15 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
192
196
|
|
|
193
197
|
| 文档 | 内容 |
|
|
194
198
|
|---|---|
|
|
195
|
-
| [
|
|
196
|
-
| [
|
|
197
|
-
| [
|
|
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 协议规范 / 排障 |
|
|
198
204
|
| [CHANGELOG.md](CHANGELOG.md) | 版本变更记录 |
|
|
199
|
-
| [
|
|
200
|
-
| [
|
|
201
|
-
| [
|
|
205
|
+
| [设计决策地图](docs/wayfinder/map.md) | 全部拍板过程与依据 |
|
|
206
|
+
| [实测研究报告](docs/research/) | embassy 源码分析、两侧通道验证、0.160 inject_items 实验 |
|
|
207
|
+
| [联调实证记录](docs/drill-reports/) | 历次联调与验收实测报告(联邦连通性 / 现场反馈 / 手册冷走) |
|
|
202
208
|
|
|
203
209
|
## 🤝 Agent 兼容性
|
|
204
210
|
|
|
@@ -212,7 +218,7 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
212
218
|
|
|
213
219
|
**计划中**
|
|
214
220
|
- [ ] 🐧 mac 平台适配(unix 代码路径已共享,待实机验证;CI mac 观察位已挂)
|
|
215
|
-
- [ ] 📦 常驻 broker
|
|
221
|
+
- [ ] 📦 常驻 broker 增强(忙时持久队列、异步回执、投递状态机——embassy 完整集对齐;tcp 星型直连传输已落地,见转发器手册)
|
|
216
222
|
- [ ] 🖼️ TUI 看板与服务安装(开机自启)
|
|
217
223
|
- [ ] 🤖 新 agent 适配器(GLM 等;有原生唤醒通道则原生,否则论证降级)
|
|
218
224
|
|
|
@@ -231,10 +237,13 @@ crosschat -v | --version | help # 版本 / 帮助
|
|
|
231
237
|
|
|
232
238
|
**v1.3.2**
|
|
233
239
|
- [x] 👀 status 标注 TUI 占用线程(`thread-writer-locks` 锁文件信号源:行尾 `TUI占用` 标记、JSON `held` 字段、锁住未列入线程补行)
|
|
234
|
-
- 专用信箱线程机制化 → **评估后不做**:命名由双侧原生 `/rename` 与 id8 寻址承接,crosschat 不拥有会话生命周期(决策记录见 [
|
|
240
|
+
- 专用信箱线程机制化 → **评估后不做**:命名由双侧原生 `/rename` 与 id8 寻址承接,crosschat 不拥有会话生命周期(决策记录见 [决策地图 007](docs/wayfinder/map.md));headless 建线程用 `codex exec`(见对话生命周期表)
|
|
235
241
|
|
|
236
242
|
**v1.3.3**
|
|
237
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)
|
|
238
247
|
</details>
|
|
239
248
|
|
|
240
249
|
## 🛠️ 开发说明
|
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { readFileSync, realpathSync } from 'node:fs';
|
|
2
|
+
import { existsSync, readFileSync, realpathSync } from 'node:fs';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
3
5
|
import { fileURLToPath } from 'node:url';
|
|
4
6
|
import { Buffer } from 'node:buffer';
|
|
5
7
|
import process from 'node:process';
|
|
8
|
+
import { createInterface } from 'node:readline';
|
|
6
9
|
import { MultichatError } from './errors.js';
|
|
7
10
|
import { runSend } from './commands/send.js';
|
|
8
11
|
import { runStatus } from './commands/status.js';
|
|
@@ -23,42 +26,95 @@ import { listClaudeSessions } from './claude/registry.js';
|
|
|
23
26
|
import { deliverToClaudeSession } from './claude/deliver.js';
|
|
24
27
|
import { listCodexThreads } from './codex/discovery.js';
|
|
25
28
|
import { deliverToCodexThread } from './codex/deliver.js';
|
|
29
|
+
import { runServe, realServeDeps } from './commands/serve.js';
|
|
30
|
+
import { runClean } from './commands/clean.js';
|
|
31
|
+
import { runUninstall } from './commands/uninstall.js';
|
|
32
|
+
import { fetchRoster } from './serve/via-tcp.js';
|
|
33
|
+
import { DEFAULT_PORT } from './serve/broker.js';
|
|
26
34
|
const version = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version;
|
|
27
35
|
const usage = `usage: crosschat <command> [options]
|
|
28
36
|
|
|
29
37
|
commands:
|
|
30
|
-
send
|
|
31
|
-
send a message
|
|
32
|
-
quote <name> if it contains spaces;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
send --to <name> | --conversation <ref>
|
|
39
|
+
send a message to a claude/codex session
|
|
40
|
+
(quote <name> if it contains spaces);
|
|
41
|
+
options:
|
|
42
|
+
--body <text> message text
|
|
43
|
+
(default: read stdin)
|
|
44
|
+
--via ssh:<host> send to a peer machine
|
|
45
|
+
(host = ~/.ssh/config alias, peer
|
|
46
|
+
resolves names on its side)
|
|
47
|
+
--via tcp:<机器> send via the tcp broker
|
|
48
|
+
(机器 = machine name from
|
|
49
|
+
"crosschat serve --list"; requires
|
|
50
|
+
~/.crosschat/tcp/node.json)
|
|
51
|
+
--file <路径> send a file through the
|
|
52
|
+
tcp channel (with --via tcp: only,
|
|
53
|
+
chunked, 64MiB cap; body defaults to
|
|
54
|
+
"文件 <名> 已送达:<对端路径>")
|
|
55
|
+
--max-body-kb <KiB> raise the body cap for
|
|
56
|
+
this send (default 16;
|
|
57
|
+
env CROSSCHAT_MAX_BODY_KIB)
|
|
58
|
+
--max-turn <N> stamp a soft turn budget
|
|
59
|
+
into the envelope
|
|
60
|
+
(env CROSSCHAT_MAX_TURN)
|
|
61
|
+
status [--conversations] show claude/codex session status, or per-pair
|
|
40
62
|
conversation overview with --conversations
|
|
41
63
|
doctor environment health check (exits 1 on any ❌)
|
|
64
|
+
serve [options] run/manage the tcp broker (star topology,
|
|
65
|
+
default port ${DEFAULT_PORT}; the first --port
|
|
66
|
+
given is remembered and reused on bare runs)
|
|
67
|
+
--port <N> listen port 1-65535
|
|
68
|
+
--gen-key [N] print N node keys (default 1)
|
|
69
|
+
and register them
|
|
70
|
+
--list list registered nodes
|
|
71
|
+
--remove <label> remove a node key
|
|
72
|
+
--connect [别名] run this machine as a node
|
|
73
|
+
client (needs ~/.crosschat/tcp/node.json;
|
|
74
|
+
reconnects forever; log with --detach:
|
|
75
|
+
~/.crosschat/tcp/node.log)
|
|
76
|
+
--detach run the broker or node
|
|
77
|
+
(with --connect) in the background
|
|
78
|
+
--stop [broker|node] stop a running broker/node
|
|
79
|
+
(default: both)
|
|
42
80
|
install-skills [--dir <root>]
|
|
43
81
|
install the agent skill into <root>/.claude and
|
|
44
82
|
<root>/.codex (default root: home directory)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
83
|
+
clean [--force] clean tcp file-channel leftovers (inbox/parts):
|
|
84
|
+
default = lazy rules (items older than 5 days,
|
|
85
|
+
or inbox over 512MiB oldest-first); --force
|
|
86
|
+
deletes everything without confirmation
|
|
87
|
+
uninstall [--yes] remove crosschat data: ~/.crosschat, the state
|
|
88
|
+
dir, and both agent skills (refuses while
|
|
89
|
+
"crosschat serve" runs; asks y/n unless --yes)
|
|
90
|
+
claude [any native args] start the real claude CLI with inbound peer
|
|
91
|
+
messaging enabled; any native claude args
|
|
92
|
+
(e.g. -c, --model <m>, --help) pass through
|
|
93
|
+
unchanged, plus two crosschat-only knobs:
|
|
94
|
+
--max-body-kb <KiB> body cap for sends
|
|
95
|
+
from this session
|
|
96
|
+
(env CROSSCHAT_MAX_BODY_KIB)
|
|
97
|
+
--max-turn <N> turn budget stamped
|
|
98
|
+
into envelopes
|
|
99
|
+
(env CROSSCHAT_MAX_TURN)
|
|
100
|
+
codex [any native args] start the real codex CLI (no codex settings
|
|
101
|
+
injected); any native codex args (e.g.
|
|
102
|
+
resume, --profile, --help) pass through
|
|
103
|
+
unchanged, plus the same two knobs:
|
|
104
|
+
--max-body-kb <KiB> body cap for sends
|
|
105
|
+
from this session
|
|
106
|
+
--max-turn <N> turn budget stamped
|
|
107
|
+
into envelopes
|
|
52
108
|
|
|
53
109
|
options:
|
|
54
110
|
--json single-line JSON output (send/status)
|
|
55
111
|
-v, --version print version and exit
|
|
56
112
|
--help | help show this help and exit
|
|
57
113
|
`;
|
|
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). */
|
|
114
|
+
/** Hand-rolled send arg parsing (no dependency): --to/--conversation/--body/--via/--file/--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). */
|
|
59
115
|
export function parseSendArgs(argv) {
|
|
60
116
|
const args = {};
|
|
61
|
-
const valueOpts = new Set(['--to', '--conversation', '--body', '--via', '--origin', '--max-body-kb', '--max-turn']);
|
|
117
|
+
const valueOpts = new Set(['--to', '--conversation', '--body', '--via', '--file', '--origin', '--max-body-kb', '--max-turn']);
|
|
62
118
|
for (let i = 0; i < argv.length; i++) {
|
|
63
119
|
const token = argv[i];
|
|
64
120
|
if (token === undefined || !token.startsWith('--')) {
|
|
@@ -84,6 +140,8 @@ export function parseSendArgs(argv) {
|
|
|
84
140
|
args.conversation = value;
|
|
85
141
|
else if (name === '--via')
|
|
86
142
|
args.via = value;
|
|
143
|
+
else if (name === '--file')
|
|
144
|
+
args.fileArg = value;
|
|
87
145
|
else if (name === '--origin')
|
|
88
146
|
args.origin = value;
|
|
89
147
|
else if (name === '--max-body-kb')
|
|
@@ -130,6 +188,89 @@ export function parseInstallSkillsArgs(argv) {
|
|
|
130
188
|
}
|
|
131
189
|
return args;
|
|
132
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Hand-rolled serve arg parsing: --port/--remove take values (space or =),
|
|
193
|
+
* --gen-key/--stop/--connect take optional values (a following non-flag
|
|
194
|
+
* token), --list/--detach are flags. Raw values only — numeric validation
|
|
195
|
+
* lives in commands/serve.ts.
|
|
196
|
+
*/
|
|
197
|
+
export function parseServeArgs(argv) {
|
|
198
|
+
const args = {};
|
|
199
|
+
for (let i = 0; i < argv.length; i++) {
|
|
200
|
+
const token = argv[i];
|
|
201
|
+
if (token === undefined || !token.startsWith('--')) {
|
|
202
|
+
throw new MultichatError('USAGE', `serve: unexpected argument: ${token ?? ''}`);
|
|
203
|
+
}
|
|
204
|
+
const eq = token.indexOf('=');
|
|
205
|
+
const name = eq > 0 ? token.slice(0, eq) : token;
|
|
206
|
+
const inline = eq > 0 ? token.slice(eq + 1) : undefined;
|
|
207
|
+
const nextValue = () => {
|
|
208
|
+
if (inline !== undefined)
|
|
209
|
+
return inline;
|
|
210
|
+
const next = argv[i + 1];
|
|
211
|
+
if (next !== undefined && !next.startsWith('--')) {
|
|
212
|
+
i++;
|
|
213
|
+
return next;
|
|
214
|
+
}
|
|
215
|
+
return undefined;
|
|
216
|
+
};
|
|
217
|
+
if (name === '--list') {
|
|
218
|
+
args.list = true;
|
|
219
|
+
}
|
|
220
|
+
else if (name === '--detach') {
|
|
221
|
+
args.detach = true;
|
|
222
|
+
}
|
|
223
|
+
else if (name === '--connect') {
|
|
224
|
+
args.connect = nextValue() ?? '';
|
|
225
|
+
}
|
|
226
|
+
else if (name === '--port' || name === '--remove') {
|
|
227
|
+
const value = nextValue();
|
|
228
|
+
if (value === undefined)
|
|
229
|
+
throw new MultichatError('USAGE', `serve: ${name} requires a value`);
|
|
230
|
+
if (name === '--port')
|
|
231
|
+
args.portArg = value;
|
|
232
|
+
else
|
|
233
|
+
args.remove = value;
|
|
234
|
+
}
|
|
235
|
+
else if (name === '--gen-key') {
|
|
236
|
+
args.genKeyArg = nextValue() ?? '1';
|
|
237
|
+
}
|
|
238
|
+
else if (name === '--stop') {
|
|
239
|
+
const value = nextValue();
|
|
240
|
+
if (value === undefined)
|
|
241
|
+
args.stopTarget = 'both';
|
|
242
|
+
else if (value === 'broker' || value === 'node')
|
|
243
|
+
args.stopTarget = value;
|
|
244
|
+
else
|
|
245
|
+
throw new MultichatError('USAGE', `serve: --stop 只接受 broker|node,收到:${value}`);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
throw new MultichatError('USAGE', `serve: unknown option: ${name}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return args;
|
|
252
|
+
}
|
|
253
|
+
/** clean takes only the --force flag; uninstall only --yes. */
|
|
254
|
+
export function parseCleanArgs(argv) {
|
|
255
|
+
const args = {};
|
|
256
|
+
for (const token of argv) {
|
|
257
|
+
if (token === '--force')
|
|
258
|
+
args.force = true;
|
|
259
|
+
else
|
|
260
|
+
throw new MultichatError('USAGE', `clean: unknown option: ${token}`);
|
|
261
|
+
}
|
|
262
|
+
return args;
|
|
263
|
+
}
|
|
264
|
+
export function parseUninstallArgs(argv) {
|
|
265
|
+
const args = {};
|
|
266
|
+
for (const token of argv) {
|
|
267
|
+
if (token === '--yes')
|
|
268
|
+
args.yes = true;
|
|
269
|
+
else
|
|
270
|
+
throw new MultichatError('USAGE', `uninstall: unknown option: ${token}`);
|
|
271
|
+
}
|
|
272
|
+
return args;
|
|
273
|
+
}
|
|
133
274
|
function readStdinText() {
|
|
134
275
|
const stdin = process.stdin;
|
|
135
276
|
if (stdin.isTTY)
|
|
@@ -158,6 +299,16 @@ function realSendDeps(stdinText) {
|
|
|
158
299
|
conversationStateFile: defaultConversationsFile(),
|
|
159
300
|
// Federation (008/B1): real transport + machine name for --origin.
|
|
160
301
|
sshExec: (argv, input, timeoutMs) => defaultSshExec(argv, input, timeoutMs),
|
|
302
|
+
// B2.1:回信自动补全判据(ssh 别名表 + 本机 node.json 在场)。
|
|
303
|
+
sshConfigText: () => {
|
|
304
|
+
try {
|
|
305
|
+
return readFileSync(join(homedir(), '.ssh', 'config'), 'utf8');
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
return undefined;
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
tcpBaseDir: join(homedir(), '.crosschat'),
|
|
161
312
|
// B10: stable per-install id — same-machine decisions survive hostname collisions.
|
|
162
313
|
machineId: () => machineId(),
|
|
163
314
|
};
|
|
@@ -172,6 +323,12 @@ function realStatusDeps() {
|
|
|
172
323
|
// B22: bounded recheck budget (2 polls × 200ms per unconfirmed row) so the
|
|
173
324
|
// conversations view stays snappy while catching slow rollout flushes.
|
|
174
325
|
confirmReceipt: (threadId, marker) => confirmInRollout(codexHomeDir(), threadId, marker, { tries: 2, delayMs: 200 }),
|
|
326
|
+
// B2: tcp forwarder status files live under ~/.crosschat/tcp.
|
|
327
|
+
tcpDir: join(homedir(), '.crosschat', 'tcp'),
|
|
328
|
+
// B2.1:成员机在线表——有 node.json 才拉(broker 机 status-broker.json 新鲜时不会走到)。
|
|
329
|
+
roster: existsSync(join(homedir(), '.crosschat', 'tcp', 'node.json'))
|
|
330
|
+
? () => fetchRoster(join(homedir(), '.crosschat'))
|
|
331
|
+
: undefined,
|
|
175
332
|
};
|
|
176
333
|
}
|
|
177
334
|
function drainAtEntry() {
|
|
@@ -304,6 +461,61 @@ async function main(argv) {
|
|
|
304
461
|
return printFailure(err);
|
|
305
462
|
}
|
|
306
463
|
}
|
|
464
|
+
if (command === 'serve') {
|
|
465
|
+
if (rest.includes('--help')) {
|
|
466
|
+
process.stdout.write(usage);
|
|
467
|
+
return 0;
|
|
468
|
+
}
|
|
469
|
+
try {
|
|
470
|
+
// B2:broker/节点的本机投递与 send 命令共用同一份真 SendDeps。
|
|
471
|
+
return await runServe(parseServeArgs(rest), { ...realServeDeps(), makeSendDeps: (stdinText) => realSendDeps(stdinText) });
|
|
472
|
+
}
|
|
473
|
+
catch (err) {
|
|
474
|
+
return printFailure(err);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
if (command === 'clean') {
|
|
478
|
+
if (rest.includes('--help')) {
|
|
479
|
+
process.stdout.write(usage);
|
|
480
|
+
return 0;
|
|
481
|
+
}
|
|
482
|
+
try {
|
|
483
|
+
return runClean(parseCleanArgs(rest), {
|
|
484
|
+
tcpDir: join(homedir(), '.crosschat', 'tcp'),
|
|
485
|
+
now: () => Date.now(),
|
|
486
|
+
stdout: (line) => process.stdout.write(`${line}\n`),
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
catch (err) {
|
|
490
|
+
return printFailure(err);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
if (command === 'uninstall') {
|
|
494
|
+
if (rest.includes('--help')) {
|
|
495
|
+
process.stdout.write(usage);
|
|
496
|
+
return 0;
|
|
497
|
+
}
|
|
498
|
+
try {
|
|
499
|
+
const home = homedir();
|
|
500
|
+
return await runUninstall(parseUninstallArgs(rest), {
|
|
501
|
+
crosschatHome: join(home, '.crosschat'),
|
|
502
|
+
stateRoot: join(process.env.LOCALAPPDATA ?? home, 'crosschat'),
|
|
503
|
+
skillDirs: [join(home, '.claude', 'skills', 'crosschat'), join(home, '.codex', 'skills', 'crosschat')],
|
|
504
|
+
now: () => Date.now(),
|
|
505
|
+
stdout: (line) => process.stdout.write(`${line}\n`),
|
|
506
|
+
confirm: () => new Promise((resolve) => {
|
|
507
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
508
|
+
rl.question('确认删除?(y/n) ', (answer) => {
|
|
509
|
+
rl.close();
|
|
510
|
+
resolve(answer.trim().toLowerCase() === 'y');
|
|
511
|
+
});
|
|
512
|
+
}),
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
catch (err) {
|
|
516
|
+
return printFailure(err);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
307
519
|
if (command === 'claude') {
|
|
308
520
|
// Everything passes through to the real claude CLI (including --help).
|
|
309
521
|
try {
|
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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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crosschat clean`(票B B3):清 tcp 文件通道残留。默认=懒删除同款规则
|
|
3
|
+
* (inbox/parts 落盘 >5 天删;inbox 总量 >512MiB 从最旧删起);--force 全清
|
|
4
|
+
* inbox+parts(跳过确认,含未过期未读,用户自担)。两模式都打印清理明细。
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readdirSync, rmSync, statSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { FILE_STALE_MS, INBOX_MAX_BYTES } from '../serve/file-channel.js';
|
|
9
|
+
function listEntries(dir) {
|
|
10
|
+
if (!existsSync(dir))
|
|
11
|
+
return [];
|
|
12
|
+
const out = [];
|
|
13
|
+
for (const name of readdirSync(dir)) {
|
|
14
|
+
const file = join(dir, name);
|
|
15
|
+
try {
|
|
16
|
+
const s = statSync(file);
|
|
17
|
+
out.push({ file, mtime: s.mtimeMs, size: s.size });
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// 竞态消失/不可 stat:跳过
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
function mb(bytes) {
|
|
26
|
+
return (bytes / (1024 * 1024)).toFixed(1);
|
|
27
|
+
}
|
|
28
|
+
/** unix 下建议无传输时执行——写入中的文件可能被删(手册有注)。 */
|
|
29
|
+
export function runClean(args, deps) {
|
|
30
|
+
const staleMs = deps.staleMs ?? FILE_STALE_MS;
|
|
31
|
+
const maxInboxBytes = deps.maxInboxBytes ?? INBOX_MAX_BYTES;
|
|
32
|
+
const inbox = listEntries(join(deps.tcpDir, 'inbox'));
|
|
33
|
+
const parts = listEntries(join(deps.tcpDir, 'parts'));
|
|
34
|
+
const all = [...inbox, ...parts];
|
|
35
|
+
if (args.force === true) {
|
|
36
|
+
if (all.length === 0) {
|
|
37
|
+
deps.stdout('无需清理:inbox 与 parts 均为空');
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
const totalBytes = all.reduce((sum, e) => sum + e.size, 0);
|
|
41
|
+
deps.stdout(`强制清理:将删除全部收件与断点文件(${all.length} 项,共 ${mb(totalBytes)} MB)`);
|
|
42
|
+
let freed = 0;
|
|
43
|
+
for (const e of all) {
|
|
44
|
+
try {
|
|
45
|
+
rmSync(e.file, { force: true });
|
|
46
|
+
freed += e.size;
|
|
47
|
+
deps.stdout(`已删 ${e.file}(${mb(e.size)} MB)`);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
deps.stdout(`删除失败 ${e.file}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
deps.stdout(`清理完成:删除 ${all.length} 项,释放 ${mb(freed)} MB`);
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
const cutoff = deps.now() - staleMs;
|
|
57
|
+
const victims = [];
|
|
58
|
+
for (const e of [...inbox, ...parts]) {
|
|
59
|
+
if (e.mtime < cutoff)
|
|
60
|
+
victims.push({ e, why: '超 5 天' });
|
|
61
|
+
}
|
|
62
|
+
// 总量超限:在未过期的 inbox 里从最旧删起(与 FileInbox.lazyDelete 同款次序)
|
|
63
|
+
const liveInbox = inbox
|
|
64
|
+
.filter((e) => e.mtime >= cutoff)
|
|
65
|
+
.sort((a, b) => a.mtime - b.mtime);
|
|
66
|
+
let total = liveInbox.reduce((sum, e) => sum + e.size, 0);
|
|
67
|
+
for (const e of liveInbox) {
|
|
68
|
+
if (total <= maxInboxBytes)
|
|
69
|
+
break;
|
|
70
|
+
total -= e.size;
|
|
71
|
+
victims.push({ e, why: '超总量从最旧删起' });
|
|
72
|
+
}
|
|
73
|
+
if (victims.length === 0) {
|
|
74
|
+
deps.stdout(`无需清理:inbox ${inbox.length} 项 / parts ${parts.length} 项均在保留规则内`);
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
let freed = 0;
|
|
78
|
+
for (const { e, why } of victims) {
|
|
79
|
+
try {
|
|
80
|
+
rmSync(e.file, { force: true });
|
|
81
|
+
freed += e.size;
|
|
82
|
+
deps.stdout(`已删 ${e.file}(${mb(e.size)} MB,${why})`);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
deps.stdout(`删除失败 ${e.file}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
deps.stdout(`清理完成:删除 ${victims.length} 项,释放 ${mb(freed)} MB`);
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=clean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
|