Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

投递语义与限制

三态

每条 send 的投递结局必居其一,三种都无需重发:

状态触发条件后续由谁推进
✅ deliveredclaude:管道一次写完成;codex:turn/start 返回 inProgress无需推进——对方处理是它自己的事
queued对方 codex 线程正忙(daemon ≥0.160),消息已进对方服务端队列对方本轮结束即串行处理;其下一条来信即消费凭证
⚠️ parked对方线程异常态(旧 daemon 忙等 ~10s 超时、或 TUI 持写者锁不释放)本机看门狗 0.5–5 分钟自动重投,投完为止

queued 与 parked 的区别值得记:queued 排在对方的队伍里(对方机器上的服务端队列,crosschat 不再管),parked 排在你的机器上(本机发件箱,crosschat 全责重投)。

回执与确认

codex 侧的 delivered 还有一层“确认“语义:投递后 crosschat 会去对方的会话记录文件里找这条消息的落盘痕迹(信封里的引用就是唯一标记),短窗口(约 1.5 秒)等到 → 静默;没等到 → 回执多一行“暂未在对方会话记录中确认(可能仍在落盘)“。“未确认“不是丢失——落盘可能晚于探测窗口,status --conversations 会自动复查一遍,翻成确认后不再显示。queued 恒不做此探测:消息坐在对方运行中的轮次后面,窗口内结构性不可能落盘。claude 侧无此机制(管道写完即终态)。

大小限制

单条正文的上限,从松到紧三层收口:

层数值说明
配置层默认 16KiB;--max-body-kb > CROSSCHAT_MAX_BODY_KIB > 默认;来源值封顶 16MiB三层来源,非法值静默降级到下一层
端点硬顶claude 64KiB / codex 1MiB生效上限 = min(配置, 硬顶)——到硬顶提额无效,报错明说
语义超限在出发前挡下报错按当前传输只指一条走得通的路(单机=落盘发路径)

这些是传输与状态治理,不是上下文保护——对话里程的治理是轮次预算(见如何控制对话轮次;数值的完整由来见16KiB 上限的由来)。

速率限制

防乒乓:每对会话 60 秒滑窗最多 30 条,超出报 RATE_LIMITED(报错带重试秒数)。计数不建新文件——直接读本机发送账本的尾窗(同一份条目既审计又限流);检查只读、本次的账目在投递结局后才落,所以未来检查才数它。窗口不会静默丢弃或自动重试任何消息:到了就是到了,没发出去就等。

daemon 版本与投递语义

codex 侧的忙时行为随 daemon 版本分界(crosschat 不起停 daemon,升级是运维动作):

场景daemon < 0.160daemon ≥ 0.160
线程忙时投递turn/start 被拒 → 忙等 ~10s → parked(看门狗重投)turn/start 被接受并入队(queued),轮末串行处理
TUI 窗口附着线程持写者锁,投递被挡(LOCKED → parked)附着后锁语义变化,基本不再挡投递
doctor 提示⚠️ <0.160:开窗投递需升级✅

codex app-server daemon version 看版本;旧 daemon 不是不能用——忙时语义退回 parked 路径,一切照旧自动重投。

平台限制

  • win · AF_UNIX 跨登录会话隔离:codex daemon 的控制 socket 是 AF_UNIX,Windows 按登录会话隔离——从 sshd 会话、服务会话等另一登录会话投 codex 会报连接拒绝(os error 10061)。日常终端与 daemon 同会话无感;跨机侧同样成立(第2课 2.4注记)。
  • unix / macOS:无此隔离;claude 腿 unix 上连 auth 行都省(同 uid 内核凭据担保,见安全模型)。
  • 信任边界:全部单机投递的隐含前提是同一台机器的同一个用户;跨用户不隔离也不承诺。

跨机投递

ssh 份:跨机不改三态语义——delivered / queued / parked 照单机成立,且经 ssh 即刻返回,“发送即完成本轮“跨机照旧(parked 的 mailbox 路径是对端机器的路径,输出标注“位于 ”)。差异全在错误面与记账:

  • 三层错误映射:本地等待超时/进程未退 → SSH_TRANSPORT_TIMEOUT(状态不明勿盲目重发);ssh 自身失败(退出码 255)→ SSH_TRANSPORT_FAILED;其余非 0 → 从对端 stderr 匹配 crosschat: CODE: message 结构后同码重抛、加 [via <对端>] 前缀——错误码的自纠指引跨机原样有效;匹配不上的归 REMOTE_FAILED(附 stderr 尾部 400 字)
  • 发起侧也落本机账:跨机发送的每条结局都写本机 send-log(只元数据永不写正文)——跨机对话出现在本机 status --conversations,--via ssh 过滤即联邦台账
  • 大小限制的跨机生效方式:出发前按最宽端点(1MiB)预检、超线本地挡下;过检的对端用自己的限额复检(claude 端点 64KiB 在对端才暴露)

命令契约与四层错误全表见ssh 命令详解。