一个房间,多个 CLI agent,@ 点名互相唤起。
USER + N CLI AGENTS · ACP / CLI / SSH · SSE
多 Agent 聊天室。用户 @ 某个 agent 提问,agent 在回复里再 @ 其他 agent 即可互相唤起,Web UI 流式展示回复与思考过程。qoder、claude、codex、codebuddy、grok、qwenpaw、远程 pi 都可以进同一个房间。服务端是零框架的 node:http 加 SSE,前端是单页静态文件,没有构建步骤。
浏览器 ──POST /api/rooms/:id/messages──► RoomManager (rooms.json · 默认 lobby) │ ▼ policy 层决定谁接话 @ 点名 · 无 @ 全员接力 · replyTo 链深 ≤ 3 · 发言冷却 │ ┌───────────────────────────────┼───────────────────────────────┐ ▼ ▼ ▼ ACP driver CLI driver SSH driver 常驻会话 · 流式 一次性 stdin/stdout 远程 pi └───────────────────────────────┼───────────────────────────────┘ ▼ Delta{kind: text | thought} │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ canvas 插件 voice 插件 ui-proposal 插件 └───────────────┼───────────────┘ ▼ SSE /api/rooms/:id/stream 事件对齐 AG-UI 分类法,字段名即前后端契约
谁接这句话由代码判定:@ 精确点名,无 @ 全员接力,replyTo 链深上限 3,发言冷却防抢话。
同一轮被点名的多个 agent 同时发言,流式事件交错。设 parallel: false 回串行。
ACP 常驻会话流式,本地 CLI 一次性 stdin/stdout,SSH 送命令到远程 pi。abort 经 AbortSignal 传到每一路。
/stop 中止全部进行中的回复并全员静音,/resume 恢复。agent 输出 ASK: 主题 | 问题 即挂起等用户答复,可配钉钉通知。
agent 回复中的 ```canvas 块(OpenUI Lang)生成图表 widget,全房间一份,用户只读。插件另有 voice 与 ui-proposal。
RoomManager 用 rooms.json 持久化多个房间,每房间独立参与者、画布与事件流。上下文预算默认 6000 token,超预算截断并保留主题锚点。
会话 cookie 等价管理员权限:设置接口曾原样回传 TTS apiKey,添加 agent 的配置接口只校验命令非空。已做响应脱敏的最小止血,管理面收紧留待后续。
thought 只经 SSE 广播,不写入历史。ACP 的权限请求一律自动取消,agent 无法执行需授权的写操作。静态资源不设防,只保护 /、/index.html 与 /api/*。
仓库没有 LICENSE,package.json 写 0.1.0 但未打 tag。不设 CHATROOM_PASSWORD 时认证不启用,绑定 0.0.0.0 会在启动时打印安全警告。