@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 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 密钥(→ [📡 通信方式](#-通信方式) 表的 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 | [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:忙时持久队列、异步回执、投递状态机、堡垒机形态 | 🚧 规划中 | — |
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 见 ssh 手册) |
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 依赖)→ [docs/usage.md](docs/usage.md)
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
- | [docs/architecture.md](docs/architecture.md) | **底层原理**:注册表/命名管道/daemon 通道、写者锁本质、信封与自包含引用、完整投递流程图 |
196
- | [docs/usage.md](docs/usage.md) | **单机深度细则**:发起方式 / 往复规则 / 投递语义矩阵 / 边界与限制 |
197
- | [docs/federation.md](docs/federation.md) | **跨机联邦手册**:按操作系统配置 / 单向 NAT / 使用细则 / 大内容 scp / 自环测试 |
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
- | [docs/wayfinder/map.md](docs/wayfinder/map.md) | 设计决策地图(全部拍板过程与依据) |
200
- | [docs/research/](docs/research/) | 实测研究报告(embassy 源码分析、两侧通道验证、0.160 inject_items 实验) |
201
- | [docs/drill-reports/](docs/drill-reports/) | 联调实证记录 |
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(忙时持久队列、异步回执、投递状态机——embassy 完整集对齐;堡垒机形态);tcp 直连传输(局域网 + 极简预共享鉴权)
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 不拥有会话生命周期(决策记录见 [map 007](docs/wayfinder/map.md));headless 建线程用 `codex exec`(见对话生命周期表)
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 [--via ssh:<host>] --to <name> | --conversation <ref>
31
- send a message (--body <text> or stdin);
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)
39
- status [--conversations] show claude/codex session status, or per-pair
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
- claude [args...] run the real claude CLI with inbound peer
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
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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"}