@konglx/rotom 2.21.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.
Files changed (189) hide show
  1. package/README.md +417 -0
  2. package/bin/mesh-master.sh +439 -0
  3. package/bin/rotom +29 -0
  4. package/bin/rotom-link.sh +136 -0
  5. package/bin/rotom-send-with-status +57 -0
  6. package/bin/rotom-up.sh +428 -0
  7. package/dist/cli/ask.js +62 -0
  8. package/dist/cli/common.js +321 -0
  9. package/dist/cli/config.js +65 -0
  10. package/dist/cli/directory.js +17 -0
  11. package/dist/cli/executor.js +58 -0
  12. package/dist/cli/fed.js +91 -0
  13. package/dist/cli/group.js +273 -0
  14. package/dist/cli/identity.js +62 -0
  15. package/dist/cli/init.js +268 -0
  16. package/dist/cli/issue.js +202 -0
  17. package/dist/cli/join.js +170 -0
  18. package/dist/cli/link.js +47 -0
  19. package/dist/cli/master.js +51 -0
  20. package/dist/cli/memory.js +307 -0
  21. package/dist/cli/note.js +68 -0
  22. package/dist/cli/repo.js +77 -0
  23. package/dist/cli/rotom.js +277 -0
  24. package/dist/cli/routes.js +118 -0
  25. package/dist/cli/run.js +45 -0
  26. package/dist/cli/schedule.js +237 -0
  27. package/dist/cli/skill.js +173 -0
  28. package/dist/cli/team.js +106 -0
  29. package/dist/executor/claude-code-hook.cjs +80 -0
  30. package/dist/executor/cli-executor.js +8 -0
  31. package/dist/executor/executors/claude-code.js +780 -0
  32. package/dist/executor/executors/codex.js +719 -0
  33. package/dist/executor/executors/hermes-cli.js +855 -0
  34. package/dist/executor/executors/openclaw.js +467 -0
  35. package/dist/executor/executors/pi.js +514 -0
  36. package/dist/executor/index.js +269 -0
  37. package/dist/executor/jsonrpc-transport.js +125 -0
  38. package/dist/executor/process-runner.js +101 -0
  39. package/dist/executor/reasoning-status.js +83 -0
  40. package/dist/executor/repo-cache.js +502 -0
  41. package/dist/executor/session-store.js +188 -0
  42. package/dist/executor/worker-chat.js +257 -0
  43. package/dist/executor/worker-connection.js +89 -0
  44. package/dist/executor/worker-issue.js +264 -0
  45. package/dist/executor/worker.js +877 -0
  46. package/dist/link/pending-requests.js +72 -0
  47. package/dist/link/server.js +233 -0
  48. package/dist/link/visibility-store.js +58 -0
  49. package/dist/master/api/agents.js +333 -0
  50. package/dist/master/api/artifacts.js +271 -0
  51. package/dist/master/api/domains.js +64 -0
  52. package/dist/master/api/groups.js +635 -0
  53. package/dist/master/api/guidance-templates.js +147 -0
  54. package/dist/master/api/index.js +89 -0
  55. package/dist/master/api/issues-patrol.js +172 -0
  56. package/dist/master/api/issues.js +663 -0
  57. package/dist/master/api/links-patrol.js +168 -0
  58. package/dist/master/api/links.js +114 -0
  59. package/dist/master/api/memory.js +259 -0
  60. package/dist/master/api/messages.js +157 -0
  61. package/dist/master/api/notes.js +77 -0
  62. package/dist/master/api/schedule-patterns.js +133 -0
  63. package/dist/master/api/schedules.js +272 -0
  64. package/dist/master/api/sessions.js +158 -0
  65. package/dist/master/api/share.js +269 -0
  66. package/dist/master/api/skills.js +190 -0
  67. package/dist/master/api/teams.js +122 -0
  68. package/dist/master/api/uploads.js +245 -0
  69. package/dist/master/auth.js +134 -0
  70. package/dist/master/dashboard/animations/calico-dozing.apng +0 -0
  71. package/dist/master/dashboard/animations/calico-error.apng +0 -0
  72. package/dist/master/dashboard/animations/calico-happy.apng +0 -0
  73. package/dist/master/dashboard/animations/calico-notification.apng +0 -0
  74. package/dist/master/dashboard/animations/calico-sleeping.apng +0 -0
  75. package/dist/master/dashboard/animations/calico-thinking.apng +0 -0
  76. package/dist/master/dashboard/animations/calico-waking.apng +0 -0
  77. package/dist/master/dashboard/assets/ApprovalCard-C38VV6ko.css +1 -0
  78. package/dist/master/dashboard/assets/ApprovalCard-CHPh2dmE.js +17 -0
  79. package/dist/master/dashboard/assets/ArtifactPanel-P_2gAP7v.js +1 -0
  80. package/dist/master/dashboard/assets/ArtifactPanel-aGHySny5.css +1 -0
  81. package/dist/master/dashboard/assets/css.worker-DaIe3gwK.js +84 -0
  82. package/dist/master/dashboard/assets/editor.worker-BCzxt1at.js +12 -0
  83. package/dist/master/dashboard/assets/html.worker-CKrFyw_2.js +461 -0
  84. package/dist/master/dashboard/assets/index-CChrTn81.css +32 -0
  85. package/dist/master/dashboard/assets/index-Dhu4SN1z.js +181 -0
  86. package/dist/master/dashboard/assets/json.worker-B7c_PmGb.js +49 -0
  87. package/dist/master/dashboard/assets/markdown-CeN5IgdF.js +29 -0
  88. package/dist/master/dashboard/assets/monaco-core-DyX1CsEw.css +1 -0
  89. package/dist/master/dashboard/assets/monaco-core-oQiQUisy.js +833 -0
  90. package/dist/master/dashboard/assets/monaco-setup-CiOPQdmo.js +1 -0
  91. package/dist/master/dashboard/assets/react-vendor-C8IxlyCR.js +67 -0
  92. package/dist/master/dashboard/assets/ts.worker-BhkL8olL.js +51334 -0
  93. package/dist/master/dashboard/assets/useMonaco-ILb4vyPh.js +12 -0
  94. package/dist/master/dashboard/assets/vite-preload-CxJPbCTl.js +1 -0
  95. package/dist/master/dashboard/debug-auth.html +197 -0
  96. package/dist/master/dashboard/favicon.ico +0 -0
  97. package/dist/master/dashboard/index.html +20 -0
  98. package/dist/master/dashboard/rotom-avatar.png +0 -0
  99. package/dist/master/db/agent-sessions.js +60 -0
  100. package/dist/master/db/agent-visibility.js +64 -0
  101. package/dist/master/db/agents.js +119 -0
  102. package/dist/master/db/ask-bridges.js +157 -0
  103. package/dist/master/db/build-update.js +59 -0
  104. package/dist/master/db/core.js +82 -0
  105. package/dist/master/db/domains.js +80 -0
  106. package/dist/master/db/groups.js +316 -0
  107. package/dist/master/db/guidance-templates.js +58 -0
  108. package/dist/master/db/index.js +12 -0
  109. package/dist/master/db/internal.js +45 -0
  110. package/dist/master/db/issues-patrol.js +81 -0
  111. package/dist/master/db/issues.js +373 -0
  112. package/dist/master/db/links.js +221 -0
  113. package/dist/master/db/master-node.js +43 -0
  114. package/dist/master/db/memory.js +272 -0
  115. package/dist/master/db/messages.js +210 -0
  116. package/dist/master/db/notes.js +55 -0
  117. package/dist/master/db/schedule-patterns.js +56 -0
  118. package/dist/master/db/schedules.js +135 -0
  119. package/dist/master/db/skills.js +144 -0
  120. package/dist/master/db/team.js +88 -0
  121. package/dist/master/db/types.js +10 -0
  122. package/dist/master/db.js +12 -0
  123. package/dist/master/embedded.js +133 -0
  124. package/dist/master/federation/client.js +283 -0
  125. package/dist/master/federation/identity.js +133 -0
  126. package/dist/master/federation/manager.js +267 -0
  127. package/dist/master/federation/publisher.js +87 -0
  128. package/dist/master/federation/self-publisher.js +69 -0
  129. package/dist/master/federation/server.js +487 -0
  130. package/dist/master/group-paths.js +208 -0
  131. package/dist/master/offline-queue.js +38 -0
  132. package/dist/master/opc-bootstrap.js +245 -0
  133. package/dist/master/patrol-terminal.js +275 -0
  134. package/dist/master/repo-scan.js +188 -0
  135. package/dist/master/router.js +214 -0
  136. package/dist/master/scheduler-handlers.js +510 -0
  137. package/dist/master/scheduler.js +201 -0
  138. package/dist/master/server.js +203 -0
  139. package/dist/master/services/link-collector.js +82 -0
  140. package/dist/master/services/link-patrol-bootstrap.js +50 -0
  141. package/dist/master/services/memory-extract-prompt.js +34 -0
  142. package/dist/master/services/patrol-bootstrap.js +63 -0
  143. package/dist/master/share-tokens.js +56 -0
  144. package/dist/master/terminal-hub.js +300 -0
  145. package/dist/master/uploads.js +108 -0
  146. package/dist/master/util/fs.js +100 -0
  147. package/dist/master/util/paths.js +50 -0
  148. package/dist/master/util/persona.js +10 -0
  149. package/dist/master/ws-hub/connection.js +928 -0
  150. package/dist/master/ws-hub/conversation.js +290 -0
  151. package/dist/master/ws-hub/directory.js +70 -0
  152. package/dist/master/ws-hub/dispatch-enrich.js +34 -0
  153. package/dist/master/ws-hub/hub.js +136 -0
  154. package/dist/master/ws-hub/index.js +9 -0
  155. package/dist/master/ws-hub/internal.js +35 -0
  156. package/dist/master/ws-hub/routing.js +295 -0
  157. package/dist/master/ws-hub/sessions.js +130 -0
  158. package/dist/master/ws-hub.js +11 -0
  159. package/dist/shared/agent-profile.js +44 -0
  160. package/dist/shared/constants.js +55 -0
  161. package/dist/shared/dedup.js +33 -0
  162. package/dist/shared/group-context.js +62 -0
  163. package/dist/shared/json-codec.js +33 -0
  164. package/dist/shared/logger.js +136 -0
  165. package/dist/shared/mention.js +22 -0
  166. package/dist/shared/network.js +40 -0
  167. package/dist/shared/parse.js +18 -0
  168. package/dist/shared/prompt-composer.js +171 -0
  169. package/dist/shared/protocol/client-messages.js +8 -0
  170. package/dist/shared/protocol/enums.js +6 -0
  171. package/dist/shared/protocol/federation.js +62 -0
  172. package/dist/shared/protocol/guards.js +87 -0
  173. package/dist/shared/protocol/server-messages.js +8 -0
  174. package/dist/shared/protocol/types.js +8 -0
  175. package/dist/shared/protocol.js +19 -0
  176. package/dist/shared/readonly-allowlist.js +122 -0
  177. package/dist/shared/rotom-cli-prompt.js +23 -0
  178. package/dist/shared/skill-context.js +19 -0
  179. package/dist/shared/skill-md.js +43 -0
  180. package/dist/shared/slash-commands.js +50 -0
  181. package/dist/shared/time.js +80 -0
  182. package/dist/shared/title.js +46 -0
  183. package/dist/shared/url-extractor.js +99 -0
  184. package/migrations/001-schema.sql +942 -0
  185. package/package.json +68 -0
  186. package/scripts/fix-node-pty-perms.mjs +46 -0
  187. package/skill/rotom-a2a-communicate/SKILL.md +257 -0
  188. package/skill/rotom-bus-host/SKILL.md +78 -0
  189. package/skill/rotom-bus-host/scripts/poll-replies.sh +148 -0
package/README.md ADDED
@@ -0,0 +1,417 @@
1
+ # Rotom A2A WORKSPACE
2
+
3
+ 数字员工 Mesh —— 默认形态是**个人 OPC**(每台机器一个 master + executor,开箱即用、免 token、断网可用),可**联邦成团队**(多台机器协作)。Master 充当中枢,Executor 把任意 CLI 工具(claude / codex / openclaw / hermes / pi 等)封装成可抢单执行任务的数字员工,rotom CLI 让 shell agent 借用已注册身份调用 Mesh。
4
+
5
+ ## 架构
6
+
7
+ ```mermaid
8
+ flowchart TB
9
+ M["<b>Master</b> :28800<br/>HTTP /api · WS /ws · /federation · Dashboard · SQLite WAL<br/>(OPC: 自动 spawn executor + 默认 agent + 默认 group)"]
10
+
11
+ subgraph EX["⚙️ Executor(由 master 自动 spawn)"]
12
+ direction TB
13
+ W["Worker N · 每个 = 1 Agent<br/>本机走 loopback 信任(免 mesh_token)"]
14
+ A["CLI 进程 (claude / codex / openclaw / hermes / pi)<br/>加载 skill: rotom-a2a-communicate<br/>↓<br/>Bash → rotom &lt;subcmd&gt;"]
15
+ W -. spawn .-> A
16
+ end
17
+
18
+ R["💻 <b>rotom CLI</b><br/>借 Agent 身份调 REST"]
19
+ D["🖥️ <b>Dashboard</b> · React 18 + Vite SPA"]
20
+ H1(("👤 真人<br/>category=真人"))
21
+ H2(("👤 真人 / Claude Code<br/>shell agent"))
22
+
23
+ COORD["🌐 协调 Master<br/>(ROTOM_MASTER_ROLE=coordination)"]
24
+ MEMBER2["💻 其他 member Master"]
25
+
26
+ W -- ws(loopback) --> M
27
+ A -- Bash --------> R
28
+ H2 -- shell -------> R
29
+ R -- HTTP --------> M
30
+ H1 -- Browser ------> D
31
+ D ----------------> M
32
+ M -- /federation --> COORD
33
+ COORD -. federation .-> MEMBER2
34
+ ```
35
+
36
+ 三类 Mesh 接入渠道:
37
+
38
+ - **Executor → Agent 运行时**:master 自动 spawn 子进程,托管 N 个 Worker(**1 Worker = 1 Agent**)。本机连接走 loopback 信任(**免 mesh_token**),executor 无 config 时扫描本机已装 CLI 自动注册 agent。
39
+ - **rotom CLI**:所有数字员工行为的统一出口。借 Agent 身份调 REST;既被 Agent 在容器内使用,也能由真人/Claude Code 在 shell 里手动用。
40
+ - **Dashboard(真人渠道)**:React 18 + Vite SPA。真人在浏览器里发群消息、管 Issue、看产物、加入/离开团队。`category=真人` 的 agent 不参与 Issue 抢单,仅作为人类参与者占位。
41
+
42
+ Master 是唯一中枢——本机所有 agent-to-agent 通讯经它中转;跨机协作走 federation(协调 master 中转,星型拓扑)。
43
+
44
+ ## 特性
45
+
46
+ ### OPC 模式(默认,每台机器)
47
+
48
+ - **一命令开箱即用**:`mesh-master` 启动 = master + 自动 spawn executor + 默认 agent + 默认 group
49
+ - **免 mesh_token**:本机连接走 loopback 信任,agent 不存在自动注册
50
+ - **CLI 自动发现**:executor 扫描本机 claude/codex/hermes/openclaw/pi,每个 CLI 起一个 agent
51
+ - **masterId 持久稳定**:8 字符 base36,机器换网络/改 IP 不影响身份
52
+ - **hostname 校验**:拒绝 IP 字面量(移动电脑 IP 不稳定)
53
+
54
+ ### Federation 团队(可选叠加)
55
+
56
+ - **星型拓扑**:协调 master(`ROTOM_MASTER_ROLE=coordination`)+ member master,跨机消息经协调中转
57
+ - **数据归属本地**:agent / memory / issue 始终留在本地 master;协调只持有路由元信息
58
+ - **runtime join/leave**:dashboard「团队」页填协调 master 地址即可加入,无需重启
59
+ - **移动电脑友好**:member 是 outbound 主动连接,切网自动重连;协调 master 需稳定地址
60
+
61
+ ### Master
62
+
63
+ - WebSocket Hub,本机 loopback 信任 + 跨机 federation 协议
64
+ - Agent / 团队 / 跨团队可见性 CRUD,离线消息队列(100 条 / 24h TTL)
65
+ - 群组 + 群消息 + Issue(任务型 / 协作型)+ 协作流程编排
66
+ - 工作产物(artifacts)管理与 diff 预览
67
+ - 限流(默认 60 msg/min/agent)、消息去重、审计日志
68
+ - 内嵌 React 18 Dashboard
69
+
70
+ ### Executor
71
+
72
+ - 由 master 自动 spawn 子进程(生命周期与 master 绑定)
73
+ - 后端适配层(`src/executor/executors/`):claude-code / codex / hermes-cli / openclaw / pi
74
+ - 无 config 时 scanClis 自动注册本机 CLI 为 agent
75
+ - 任务抢单:按身份分组(`Agent` 类参与抢单,`真人` 不参与)
76
+ - Issue 进度/输出/产物实时回传 Master
77
+
78
+ ### rotom CLI
79
+
80
+ - 自动发现 `~/.rotom/executor.config.json` 里的所有 worker,免二次注册
81
+ - 多身份切换:`ROTOM_AGENT` env / `--as <name>` / 默认 agent
82
+ - 全套子命令:`directory` / `group` / `issue` / `whoami` / `config` / `memory` / `skill` / `schedule`
83
+ - 输出默认 JSON,`--pretty` 切换人类可读
84
+
85
+ ### 协议
86
+
87
+ - WebSocket 文本帧 + JSON,协议版本 2(agent ↔ master);Federation 协议版本 1(master ↔ master)
88
+ - 心跳 10s 间隔 / 90s 超时
89
+ - 重连自动下发离线消息
90
+ - `requestId` 关联请求与回复
91
+
92
+ ## 快速开始
93
+
94
+ 完整安装文档见 [`docs/INSTALL.md`](./packages/website/docs/install.md)。下面是最短路径 —— **无需克隆仓库**,全局装包即可。
95
+
96
+ ### 0. 全局安装
97
+
98
+ ```bash
99
+ npm i -g @konglx/rotom
100
+ # 或:npm i -g @konglx/rotom --registry=https://registry.npmjs.org
101
+ ```
102
+
103
+ PATH 里多了 `mesh-master` 与 `rotom` 两个命令。
104
+
105
+ ### 1. 一命令启动 OPC(默认 standalone)
106
+
107
+ ```bash
108
+ rotom run opc
109
+ # = mesh-master start + 自动 spawn executor + 默认 agent + 默认 group
110
+ ```
111
+
112
+ 浏览器打开 `http://localhost:28800/dashboard`。master 自动:
113
+ - 生成 masterId(8 字符 base36,持久化在 `~/.rotom/master.json`)
114
+ - 建默认 agent(用 `os.userInfo().username`)+ 默认 group "Local"
115
+ - spawn 本机 executor 子进程
116
+ - executor 扫描本机 CLI,每个注册一个 agent(claude/codex/hermes/openclaw/pi)
117
+
118
+ **无需配 mesh_token** — 本机连接走 loopback 信任。
119
+
120
+ ### 2. (可选)联邦成团队
121
+
122
+ **协调 master**(在某台稳定地址的机器上):
123
+
124
+ ```bash
125
+ rotom run federation
126
+ # = ROTOM_MASTER_ROLE=coordination mesh-master start
127
+ ```
128
+
129
+ **member master**(接入协调,移动电脑也行):
130
+
131
+ 在 dashboard「团队」页填协调 master 地址(`ws://coord-host:28800`)+ 团队名,点「加入」即可(runtime 切换,无需重启)。或手动写 `~/.rotom/team.json`:
132
+
133
+ ```json
134
+ {
135
+ "id": "<协调 master 的 masterId>",
136
+ "name": "阿甘团队",
137
+ "coord_endpoints": ["ws://coord-host:28800"]
138
+ }
139
+ ```
140
+
141
+ ```bash
142
+ ROTOM_MASTER_ROLE=member ROTOM_TEAM_NAME="阿甘团队" rotom run opc
143
+ ```
144
+
145
+ 加入后:本机 agent 自动发布到协调 master,其他 member 可见;跨机消息经协调中转。数据归属本地(协调只持有路由元信息)。
146
+
147
+ ### 3. 验证 + 发个协作消息
148
+
149
+ ```bash
150
+ rotom whoami # 验证身份解析
151
+ rotom directory --pretty # 列出在线员工
152
+ rotom group list --pretty
153
+ rotom group send <groupId> <agent> "@<agent> hi"
154
+ rotom issue create <groupId> --title "修个 bug" --description "..." --priority high
155
+ ```
156
+
157
+ > **源码开发**:需要改 rotom 源码 / 跑测试 / 提 PR 时,见 [INSTALL.md 方式 B](./packages/website/docs/install.md#方式-b源码安装开发--贡献代码用)。
158
+
159
+ ## 配置
160
+
161
+ ### Master 启动参数 / 环境变量
162
+
163
+ | 变量 | 默认 | 说明 |
164
+ |------|------|------|
165
+ | `MESH_MASTER_PORT` | `28800` | Master 监听端口 |
166
+ | `MESH_MASTER_HOST` | `0.0.0.0` | Master 监听地址 |
167
+ | `ROTOM_HOME` | `~/.rotom` | 数据目录(SQLite + 日志 + PID) |
168
+ | `ROTOM_HOSTNAME` | `os.hostname()` | 本机 hostname(联邦用,**禁止填 IP**) |
169
+ | `ROTOM_MASTER_ROLE` | `standalone` | `standalone` / `coordination` / `member` |
170
+ | `ROTOM_TEAM_NAME` | 从真人 agent 派生 | 团队展示名(如"西花团队") |
171
+ | `ROTOM_COORD_ENDPOINTS` | — | member 模式:逗号分隔协调 master ws 地址 |
172
+ | `ROTOM_FEDERATION_DISABLED` | — | `=1` 强制关闭联邦 |
173
+
174
+ 日志:`{ROTOM_HOME}/logs/mesh-master-YYYY-MM-DD.log`(按日轮转)。
175
+
176
+ ### Executor 配置(`~/.rotom/executor.config.json`,可选)
177
+
178
+ OPC 模式下 master 自动生成 `.auto-executor.json`(scanClis 模式),无需手写。若要给 agent 起中文名或指定 workingDir,写 `executor.config.json`(优先级高于 auto):
179
+
180
+ ```json
181
+ {
182
+ "master": "ws://localhost:28800",
183
+ "workers": [
184
+ {
185
+ "name": "江德福",
186
+ "cliTool": "claude",
187
+ "workingDir": "/Users/me/work/projectA",
188
+ "maxConcurrent": 2,
189
+ "profile": { "position": "全栈工程师", "bio": "主力绝对主力" }
190
+ }
191
+ ]
192
+ }
193
+ ```
194
+
195
+ | 字段 | 类型 | 说明 |
196
+ |------|------|------|
197
+ | `master` | `string` | Master WebSocket URL |
198
+ | `workers[]` | `array` | worker 列表(也支持单 worker 简化形式) |
199
+ | `workers[].name` | `string` | agent 名(OPC 模式下本机信任,无需与 DB 预注册) |
200
+ | `workers[].token` | `string?` | **OPC 模式可空**(本机信任);跨机连接远程 master 时必填 |
201
+ | `workers[].cliTool` | `string?` | `claude` / `codex` / `openclaw` / `hermes` / `pi`,缺省自动检测 |
202
+ | `workers[].workingDir` | `string?` | 任务执行目录,默认 `~/.rotom/workspace` |
203
+ | `workers[].maxConcurrent` | `number?` | 并发上限,默认 2 |
204
+ | `workers[].profile` | `object?` | 员工档案,`category: "真人"` 时不参与抢单 |
205
+
206
+ ### 团队配置(`~/.rotom/team.json`,member 模式)
207
+
208
+ ```json
209
+ {
210
+ "id": "<协调 master 的 masterId,8 字符 base36>",
211
+ "name": "阿甘团队",
212
+ "coord_endpoints": ["ws://coord-host:28800"]
213
+ }
214
+ ```
215
+
216
+ 也可通过 dashboard「团队」页的「加入上级团队」表单 runtime 生成(无需重启)。
217
+
218
+ ### rotom CLI 身份解析
219
+
220
+ 优先级:`ROTOM_AGENT` env > `--as <name>` > `~/.rotom/config.json#defaultAgent`。
221
+
222
+ ```bash
223
+ rotom config show
224
+ rotom config use 江德福 # 设默认
225
+ rotom --as 阿甘 directory # 单次切换
226
+ ```
227
+
228
+ ## REST API
229
+
230
+ 所有端点挂在 `/api` 下。本机调用走 loopback 信任(免 token);远程用 `Authorization: Bearer <mesh_token>`(向后兼容)。
231
+
232
+ ### Identity / Teams(federation)
233
+
234
+ | 方法 | 路径 | 说明 |
235
+ |------|------|------|
236
+ | GET | `/api/identity` | 本机 master 身份(masterId / hostname / role / teamName) |
237
+ | GET | `/api/teams` | 已加入的团队列表 |
238
+ | GET | `/api/teams/:id/members` | 团队内可见 agent(agent_visibility) |
239
+ | GET | `/api/teams/:id/peers` | 团队内 peer master 列表 |
240
+ | POST | `/api/teams/join` | runtime 加入上级团队(body: `{ coordEndpoint, teamName? }`) |
241
+ | POST | `/api/teams/leave` | runtime 离开团队,切回 standalone |
242
+ | POST | `/api/agents/:id/refresh-token` | 刷新 token |
243
+ | GET / POST | `/api/domains` | 域列表 / 新建 |
244
+ | PUT / DELETE | `/api/domains/:id` | 域更新(级联改名)/ 删除 |
245
+ | GET / POST / DELETE | `/api/cross-domain` | 跨域规则 |
246
+ | GET | `/api/real-persons` | 真人列表(`category=真人` 的 agent)|
247
+
248
+ ### Groups / Messages
249
+
250
+ | 方法 | 路径 | 说明 |
251
+ |------|------|------|
252
+ | GET / POST | `/api/groups` | 群列表 / 建群 |
253
+ | GET / PATCH / DELETE | `/api/groups/:id` | 群详情 / 改设置 / 解散 |
254
+ | POST / DELETE | `/api/groups/:id/members` | 拉人 / 踢人 |
255
+ | GET / POST | `/api/groups/:id/messages` | 群消息历史 / 发消息 |
256
+ | POST | `/api/cli/groups/:groupId/send` | CLI 专用发消息(保留 mention 语义)|
257
+
258
+ ### Issues / 协作
259
+
260
+ | 方法 | 路径 | 说明 |
261
+ |------|------|------|
262
+ | GET / POST | `/api/groups/:groupId/issues` | 群内 Issue 列表 / 创建任务型 Issue |
263
+ | GET / PUT / DELETE | `/api/issues/:id` | Issue CRUD |
264
+ | POST | `/api/issues/:id/cancel` | 取消 |
265
+ | POST | `/api/issues/:id/continue` | 继续会话(追加输入)|
266
+ | POST | `/api/issues/:id/append` | 实时追加输出片段 |
267
+ | POST | `/api/issues/:id/complete` | 标记完成 |
268
+ | POST | `/api/issues/claim-next` | Worker 抢下一个 Issue |
269
+ | POST | `/api/issues/:id/approvals/:approvalId` | 审批回执(slash command 策略)|
270
+ | GET | `/api/issues/:id/events` | Issue 时间线事件 |
271
+ | GET | `/api/issues/:id/messages` | Issue 关联群消息 |
272
+
273
+ ### Artifacts / 观测
274
+
275
+ | 方法 | 路径 | 说明 |
276
+ |------|------|------|
277
+ | GET | `/api/artifacts/:groupId` | 群产物列表 |
278
+ | GET | `/api/artifacts/:groupId/content` | 产物内容 |
279
+ | GET | `/api/artifacts/:groupId/original` | 产物原始版本 |
280
+ | GET | `/api/artifacts/:groupId/diff` | 产物 diff |
281
+ | GET | `/health` | 健康检查 |
282
+ | GET | `/api/audit` | 审计日志(max 500)|
283
+ | GET | `/api/stats` | 全局统计 + 每 agent 消息指标 |
284
+ | GET | `/api/messages` | 全局消息日志(agent / limit / before)|
285
+ | GET | `/api/conversations` | 按 peer 聚合的会话 |
286
+ | GET | `/api/whoami` | 当前 token 对应的 agent 身份 |
287
+
288
+ ## 协议
289
+
290
+ WebSocket 入口:`ws://master:28800/ws`
291
+
292
+ ### Client → Master
293
+
294
+ | 类型 | 关键字段 | 说明 |
295
+ |------|---------|------|
296
+ | `auth` | `token`, `name`, `jwt?` | 鉴权(10s 内必须完成)|
297
+ | `heartbeat` | `activeDispatches?` | 心跳(每 10s)|
298
+ | `a2a_send` | `requestId`, `target`, `payload` | 发消息给目标 agent |
299
+ | `a2a_reply` | `requestId`, `payload` | 回复收到的消息 |
300
+ | `update_info` | `description?` | 更新自己的元数据 |
301
+ | `disconnect` | — | 优雅断开 |
302
+
303
+ ### Master → Client
304
+
305
+ | 类型 | 关键字段 | 说明 |
306
+ |------|---------|------|
307
+ | `auth_ok` | `jwt`, `directory[]`, `config?` | 鉴权通过 + 全量目录 |
308
+ | `auth_fail` | `reason` | 鉴权失败 |
309
+ | `heartbeat_ack` | — | 心跳响应 |
310
+ | `a2a_message` | `requestId`, `from`, `payload` | 收到消息 |
311
+ | `route_result` | `requestId`, `delivered`, `queued` | 路由反馈 |
312
+ | `directory_update` | `event`, `agent` | 目录变更(上线/下线/更新)|
313
+ | `offline_messages` | `messages[]` | 重连时下发的离线消息 |
314
+ | `config_update` | `domain?`, `enabled?` | Master 推送的配置变更 |
315
+
316
+ ### Payload 结构
317
+
318
+ ```typescript
319
+ interface MessagePayload {
320
+ message: string;
321
+ files?: Array<{ name: string; uri: string; mimeType?: string }>;
322
+ }
323
+ ```
324
+
325
+ ### WS Close Codes
326
+
327
+ | 码 | 含义 |
328
+ |----|------|
329
+ | 4001 | Auth timeout |
330
+ | 4002 | Auth failed |
331
+ | 4400 | Invalid JSON |
332
+ | 4401 | Not authenticated |
333
+ | 4429 | Rate limited |
334
+
335
+ ## 开发(源码方式)
336
+
337
+ 普通用户走 `npm i -g @konglx/rotom` 全局装包即可,无需读这一节。本节面向需要改 rotom 源码 / 跑测试 / 提 PR 的开发者。
338
+
339
+ ### 构建
340
+
341
+ ```bash
342
+ git clone <repo> rotom && cd rotom
343
+ pnpm install
344
+ pnpm build # tsc(含 executor / cli / shared / master)
345
+ pnpm build:master # 同上 + 打包 dashboard SPA
346
+ pnpm dashboard:dev # React dashboard 本地开发模式
347
+ ```
348
+
349
+ ### 测试
350
+
351
+ ```bash
352
+ pnpm test # 所有 tests/*.test.ts
353
+ ```
354
+
355
+ ### 项目结构
356
+
357
+ ```
358
+ src/
359
+ ├── cli/
360
+ │ └── rotom.ts # rotom CLI 入口(身份解析 + 子命令调度)
361
+ ├── executor/
362
+ │ ├── index.ts # Executor 主进程入口
363
+ │ ├── worker.ts # Worker 抽象(WS + 抢单 + 进度回传)
364
+ │ ├── cli-executor.ts # CLI 后端的通用执行框架
365
+ │ ├── claude-code-hook.cjs # Claude Code 钩子(追踪输出)
366
+ │ └── executors/ # 后端适配
367
+ │ ├── claude-code.ts
368
+ │ ├── codex.ts
369
+ │ ├── hermes-cli.ts
370
+ │ ├── openclaw.ts
371
+ │ └── pi.ts
372
+ ├── master/
373
+ │ ├── server.ts # Master 独立入口(CLI)— OPC bootstrap + federation 启动
374
+ │ ├── embedded.ts # 可嵌入版本(同进程使用)
375
+ │ ├── opc-bootstrap.ts # OPC bootstrap:身份 + 默认 agent/group + spawn executor
376
+ │ ├── federation/ # 联邦子系统(identity / manager / server / client / publisher)
377
+ │ ├── api/ # REST 端点(agents / teams / groups / issues / memory / ...)
378
+ │ ├── ws-hub/ # WS Hub(连接 + 中转 + 路由 + directory)
379
+ │ ├── router.ts # 路由决策(含 routeFederated 跨机分支)
380
+ │ ├── db/ # SQLite 数据层(WAL,master-node / team / agent-visibility / ...)
381
+ │ ├── auth.ts # token + JWT + authenticateLocal(本机信任)
382
+ │ └── offline-queue.ts # 离线消息队列
383
+ └── shared/
384
+ ├── protocol/ # 消息类型(client/server/federation + guards)
385
+ ├── network.ts # isLoopback(本机信任判定)
386
+ ├── constants.ts # 全局常量
387
+ ├── dedup.ts # 消息去重
388
+ ├── group-context.ts # 群上下文工具
389
+ ├── logger.ts # 统一日志
390
+ └── slash-commands.ts # 斜杠命令协议
391
+
392
+ packages/
393
+ └── dashboard/ # React 18 + Vite Dashboard SPA
394
+
395
+ migrations/ # SQLite schema migrations(001~058)
396
+ packages/website/docs/ # 协作指南 / 用户手册 / 架构文档
397
+ bin/
398
+ ├── mesh-master.sh # Master 启停脚本
399
+ ├── rotom # rotom CLI launcher
400
+ └── rotom-send-with-status # rotom 带状态发消息辅助脚本
401
+ ```
402
+
403
+ ## 相关文档
404
+
405
+ - [`docs/INSTALL.md`](./packages/website/docs/install.md) — 完整安装手册(三件套)
406
+ - [`docs/AGENT_USER_GUIDE.md`](./packages/website/docs/agent_user_guide.md) — Agent 协作用户指南
407
+ - [`docs/GROUP_CHAT_ARCHITECTURE.md`](./packages/website/docs/group_chat_architecture.md) — 群聊架构详解
408
+ - [`docs/QUICK_REF.md`](./packages/website/docs/quick_ref.md) — Issue / 协作 / 群消息 三种场景速查
409
+
410
+ ### 故障排查记录
411
+
412
+ - [`docs/minimax-connection-error.md`](./packages/website/docs/minimax-connection-error.md) — hermes provider 连接错(CCV env 污染)
413
+ - [`docs/codex-sandbox-network-blocked.md`](./packages/website/docs/codex-sandbox-network-blocked.md) — codex 默认沙箱挡 127.0.0.1,rotom CLI 全报 network error
414
+
415
+ ## License
416
+
417
+ MIT