@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 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
- - **🔌 原生投递,零轮询**:消息经 Claude 的 named pipe / unix socket / Codex 的 App Server daemon 直接注入运行中的会话——接收方像收到一条用户消息一样开始工作,不需要任何轮询或常驻服务
18
- - **🪶 无守护进程**:整个工具就是一条无状态 CLI。没有后台进程要看护、没有崩溃丢状态、没有端口要占——`send` 就是发消息,`status` 就是看在线
19
- - **🤖 教学内建,低入侵**:agent 侧装一次 skill,且**每条消息的信封自带回复命令**——照抄即可回话。题词只写角色,不写协议;长对话也不会忘
20
- - **📮 忙时不丢**:对方正在跑长任务?消息自动进本地发件箱(outbox),并由看门狗进程每 0.5–5 分钟自动重投,对方一空闲就送达——不需要你手动重发;滞留内容随时可在 mailbox 镜像文件里读到
21
- - **🔐 同用户信任边界**:全部通道按系统用户隔离(Windows 用户 / unix uid),接收许可只授予 `crosschat claude` 启动的会话——你手敲开的会话不会被外部投递
22
- - **🧪 每个结论都有实证**:通道可行性、写者锁、daemon 版本行为,全部真机联调验证(见 [📚 更多文档](#-更多文档))
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
- **Codex daemon**(接收方向必需;从**干净终端**启动——勿在 Claude 会话内启动,否则派生 shell 身份污染):
54
+ <details><summary>Linux / WSL(experimental)</summary>
52
55
 
53
- ```bash
54
- codex app-server daemon start # 重启电脑后需重新执行
55
- ```
56
+ 三条安装命令照常执行——装在 WSL 里、agent 也装在 WSL 里(同一侧)即可,源码安装同样适用。例外只有两条:
56
57
 
57
- **Linux / WSL(experimental,1.3.0)**——**独立部署**:unix 侧自成一套(状态目录 `~/crosschat`、发件箱、投递),与 Windows 侧互不相通,管道/socket 不过系统边界,**agent 必须与 crosschat 同侧运行**:
58
+ - **两侧独立**:unix 状态目录 `~/crosschat`(Windows 侧为 `%LOCALAPPDATA%\crosschat`),互不相通,管道/socket 不过系统边界
59
+ - **agent 同侧**:WSL 内用 unix 版 claude / codex CLI(Node ≥ 22 同侧装)
58
60
 
59
- - 前置:Node ≥ 22、claude / codex CLI 装在**同一侧**(WSL 内用 unix 版)
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
- ### 30 秒版:两终端互发一句问候
66
+ mac:unix 实现共享,理论可达、未实测。
67
+ </details>
67
68
 
68
- ```bash
69
- # 终端 A(claude,能收)
70
- crosschat claude # 进入后 /rename alice
69
+ ## 🚀 快速入门
71
70
 
72
- # 终端 B(任意终端,人手发)
73
- crosschat status # 看到 alice
74
- crosschat send --to alice --body "你好 alice!"
75
- # → 终端 A 里几秒后出现这条消息
76
- ```
71
+ 两段对话实录:你只说一句话(👤),两个 agent 自动对话到闭环(🤖 / 📨)。全部命令见[📋 命令列表](#-命令列表)。
77
72
 
78
- ### 完整剧本:codex 当领导派活给 claude(多任务循环的经典形态)
73
+ 图例:**👤 用户[发送 -> 接收]** 你说的指令 · **🤖 agent[发送 -> 接收]** agent 的回复 · **📨** 收到的消息
79
74
 
80
- **任务目标**:codex(领导)命令 claude(工人)在 `D:\workspace\demo` 创建 `notes.txt` 写三行待办,并验收。
75
+ ### 单机:boss 给 worker 派一句活
81
76
 
82
- **第 1 步 · 左窗启动 claude(接收方先开机;先启动 ≠ 先说话)**
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
- 你是领导。用 crosschat(先 status 确认名字)给 claude 会话「worker」下发任务:
94
- 在当前目录创建 notes.txt,内容三行:买牛奶、交电费、给妈妈打电话。
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
- **第 3 步 · 右窗屏幕——任务由 codex 发出**
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
- **第 4 步 ·(0.160+ 可跳过)关掉右窗**:旧版 daemon(≤0.157)下收报告需关窗;**0.160+ 开窗也能收**(headless 执行)。
91
+ ### 跨机:和单机一样,只是对端在另一台机器上
92
+
93
+ 准备(一次性):对端(本例 WSL)装好 crosschat、双机互配 ssh 密钥(→ [📡 通信方式](#-通信方式) 表的 ssh 手册,五步配完)。然后整个过程:
107
94
 
108
- **第 5 步 · 左窗屏幕——claude 收令干活**
109
95
  ```
110
- 📨 来自另一会话的消息:
111
- <cross-session-message from-name="codex/01a…" turn="1">
112
- 任务1:在当前目录创建 notes.txt,内容三行…
113
- 回复请运行: crosschat send --conversation mc1_xxx --body "<你的回复>"
114
- </cross-session-message>
115
-
116
- ⏺ Write: notes.txt(三行待办)
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
- **第 6 步 · 自动发生**:报告落进 codex 线程 → codex 验证 → 下发下一个/验收结论 → 又出现在左窗。
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
- **第 7 步 · 左窗收到"验收通过,任务结束"——收工**。全程在左窗直播;想看领导的验收细节:开右窗 `codex resume` 翻历史。
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
- **使用类**:`NAME_NOT_FOUND`(错误信息列出全部可用名)· `NAME_COLLISION`(重名,`status --json` 看 id)· `MESSAGE_TOO_LARGE`(>16KiB → 落盘发路径)· `RATE_LIMITED`(等待或收尾)· `TARGET_*`/`BODY_*`/`USAGE`(参数错误)
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
- **通道类**:`CODEX_PROXY_SPAWN_FAILED`(看 stderr 摘录;通常 daemon 未跑)· `CODEX_THREAD_LOCKED`/`CODEX_THREAD_BUSY_TIMEOUT`(已自动转 `parked` 入发件箱,无需重发)· `OUTBOX_FULL`(每线程 200 条积压上限,读 mailbox 镜像取回内容)· `CODEX_APPROVAL_REQUIRED`(**工具永不代答审批**)· `CLAUDE_PIPE_*`/`CODEX_*UNCERTAIN`(写入中途失败状态不明——**勿盲目重发**,先 `status` 核实)
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; other args pass through
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, ...args]);
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;AAE5D;;;;GAIG;AAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC;AAQ3E,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE;QACpC,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAC1B,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACrD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAuB,EACvB,OAA0B,wBAAwB,EAAE;IAEpD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,IAAI,cAAc,CACtB,mBAAmB,EACnB,+EAA+E;cAC3E,4EAA4E,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"claude-wrapper.js","sourceRoot":"","sources":["../../src/commands/claude-wrapper.ts"],"names":[],"mappings":"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"}