Skip to content

Human Chat

human-chat-v1chat 类型协议,用于两个真人之间的自由聊天。Agent 不解读消息内容,只负责把消息从一方转发给另一方,CLI stdin 与 webui 都可以驱动发送。

查找路径

bash
aigenora protocol path human-chat-v1

安全语义(红线)

  • Agent 不得把对端 text 字段当作 LLM prompt、工具参数或 eval() 输入
  • Agent 不得对消息做语义解读(翻译、摘要、改写都不允许)
  • 消息只能在 CLI 终端、webui 渲染层或 inbox.jsonl 之间转发
  • 校验由引擎按 spec.json 完成,进入 hooks 的 text 仍需视为不可信文本

规则

  1. Guest 发 join,Host 回 ready 完成握手
  2. 任意一方随时可以发 chat,字段只有 actiontext(≤ 2000 字符)、seq(严格递增)
  3. 任意一方发 end 即结束(CLI 输入 /quit 触发)
  4. 收方按 seq 严格单调过滤重放和乱序,不影响发送方持续递增

消息流

text
Guest                          Host
  |--- join ------------------>|
  |<--- ready -----------------|
  |                              |
  |  === 自由聊天 ===           |
  |--- chat (text, seq) ------->|
  |<--- chat (text, seq) -------|
  |     ...任意顺序与时间...      |
  |                              |
  |--- end --------------------->|  或 host 先发

输入双驱(v006 P5)

flow.mode: "free" 引擎在 sender 协程同时监听两路输入:

  • stdin:CLI 用户在终端键入一行即发送
  • inbox.jsonl:webui 通过 POST /api/chat/send 追加 {"text": "..."} 一行

两路任一来源进入即按 spec 校验后通过 P2P 发往对端,并触发 hooks.proto_on_send(msg) 写入 snapshot.messages 让 webui 渲染自己刚发的气泡。

hooks 责任

钩子职责
proto_init初始化 snapshot.phase = "chatting"messages = []peer_role
proto_on_message(msg)收到 peer 消息:seq 单调过滤、CLI 打印、写 snapshot.messages(from=peer)+ details.append
proto_on_send(msg)自己发出消息:写 snapshot.messages(from=self)+ details.append
proto_on_end()snapshot.phase 改为 "ended"

snapshot.messages 截断保留最近 200 条防止文件膨胀。

业务参数

参数类型说明
-该协议无可调参数,profile 仅 standard

webui

随包内置 ui/index.html

  • 顶部 phase tag(chatting / ended)
  • 中部气泡列表,self 右对齐 / peer 左对齐
  • 底部 textarea + Send 按钮(Enter 发送,Shift+Enter 换行)
  • 结束后自动禁用 compose

通过 aigenora session web --state-dir <state_dir> 打开。webui 通过 SSE /sse/stream 订阅 snapshot 事件实时渲染。

启动示例

bash
# Host 创建邀约
aigenora protocol path human-chat-v1
aigenora host --protocol-dir <protocol-dir>

# 在另一台/另一个目录 Guest 加入
aigenora join <post_id>

# 任意一侧打开 webui
aigenora session web --state-dir <state_dir>

CLI 与 webui 同时使用时,发送来源不影响对端接收,所有消息都会写入双方的 snapshot 与 details 用于回放。