@myclaw163/clawclaw-cli 0.6.74 → 0.6.77

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 (209) hide show
  1. package/README.md +387 -377
  2. package/bin/clawclaw-cli.mjs +3 -3
  3. package/package.json +48 -48
  4. package/personas//347/220/206/346/231/272/346/270/251/345/222/214.md +23 -23
  5. package/personas//350/200/201/350/260/213/346/267/261/347/256/227.md +22 -22
  6. package/personas//350/257/232/346/201/263/347/233/264/347/216/207.md +22 -22
  7. package/personas//350/275/273/346/235/276/346/264/273/346/263/274.md +22 -22
  8. package/personas//351/207/216/346/200/247/345/217/233/351/200/206.md +23 -23
  9. package/scripts/check-skill-command-surface.mjs +116 -116
  10. package/scripts/find-hide-spots.py +157 -157
  11. package/scripts/postinstall.mjs +20 -20
  12. package/scripts/sync-bundled-skill.mjs +254 -245
  13. package/scripts/sync-bundled-skill.test.mjs +152 -152
  14. package/skills/clawclaw/SKILL.md +248 -246
  15. package/skills/clawclaw/references/CHATTERBOX.md +141 -141
  16. package/skills/clawclaw/references/COMMANDS.md +160 -155
  17. package/skills/clawclaw/references/GAME-MECHANICS.md +188 -188
  18. package/skills/clawclaw/references/HUB.md +48 -48
  19. package/skills/clawclaw/references/KNOWLEDGE.md +42 -42
  20. package/skills/clawclaw/references/STRATEGIES.md +59 -59
  21. package/skills/clawclaw/references/STREAM.md +93 -93
  22. package/skills/clawclaw/references/TACTICS.md +65 -65
  23. package/src/assets/clawclaw-ascii-map.txt +40 -40
  24. package/src/cli.ts +112 -110
  25. package/src/commands/_schema.ts +124 -124
  26. package/src/commands/account.ts +209 -209
  27. package/src/commands/data.test.ts +33 -0
  28. package/src/commands/data.ts +22 -0
  29. package/src/commands/do.test.ts +84 -84
  30. package/src/commands/do.ts +130 -130
  31. package/src/commands/events.test.ts +100 -71
  32. package/src/commands/events.ts +250 -221
  33. package/src/commands/game-map.test.ts +28 -28
  34. package/src/commands/game-start-plan.test.ts +84 -84
  35. package/src/commands/game.ts +1113 -1113
  36. package/src/commands/history-player.test.ts +102 -102
  37. package/src/commands/history.ts +573 -573
  38. package/src/commands/hub.test.ts +96 -96
  39. package/src/commands/hub.ts +234 -234
  40. package/src/commands/knowledge.test.ts +13 -13
  41. package/src/commands/knowledge.ts +139 -139
  42. package/src/commands/load.test.ts +51 -51
  43. package/src/commands/load.ts +13 -13
  44. package/src/commands/meeting-history.test.ts +106 -106
  45. package/src/commands/memory.ts +40 -40
  46. package/src/commands/peek.ts +45 -45
  47. package/src/commands/persona.ts +57 -57
  48. package/src/commands/setup/codex.ts +266 -266
  49. package/src/commands/skill.ts +128 -128
  50. package/src/commands/state.ts +46 -46
  51. package/src/commands/strategy.test.ts +153 -145
  52. package/src/commands/strategy.ts +183 -181
  53. package/src/commands/tts.ts +128 -128
  54. package/src/commands/upgrade.test.ts +82 -82
  55. package/src/commands/upgrade.ts +148 -148
  56. package/src/commands/watch.test.ts +999 -999
  57. package/src/commands/watch.ts +660 -660
  58. package/src/lib/auth.test.ts +86 -74
  59. package/src/lib/auth.ts +223 -186
  60. package/src/lib/command-meta.ts +37 -37
  61. package/src/lib/game-client.ts +403 -403
  62. package/src/lib/game-context.ts +92 -92
  63. package/src/lib/http-keepalive.ts +15 -15
  64. package/src/lib/http-transport.test.ts +42 -42
  65. package/src/lib/http-transport.ts +113 -113
  66. package/src/lib/hub-client.test.ts +56 -56
  67. package/src/lib/hub-client.ts +88 -88
  68. package/src/lib/hub-install.test.ts +98 -98
  69. package/src/lib/hub-install.ts +160 -121
  70. package/src/lib/hub-reminder.ts +78 -75
  71. package/src/lib/hub-unzip.test.ts +69 -69
  72. package/src/lib/hub-unzip.ts +62 -62
  73. package/src/lib/init-command.test.ts +75 -75
  74. package/src/lib/init-command.ts +130 -120
  75. package/src/lib/knowledge-store.test.ts +170 -170
  76. package/src/lib/knowledge-store.ts +369 -369
  77. package/src/lib/load-context.test.ts +52 -52
  78. package/src/lib/load-context.ts +52 -52
  79. package/src/lib/match-state.test.ts +134 -134
  80. package/src/lib/match-state.ts +94 -94
  81. package/src/lib/netease-tts.ts +83 -83
  82. package/src/lib/normalize.ts +42 -42
  83. package/src/lib/persona.test.ts +41 -41
  84. package/src/lib/persona.ts +72 -72
  85. package/src/lib/server-registry.ts +152 -152
  86. package/src/lib/skill-version.test.ts +48 -48
  87. package/src/lib/skill-version.ts +19 -19
  88. package/src/lib/strategy-export.test.ts +240 -232
  89. package/src/lib/strategy-export.ts +247 -242
  90. package/src/lib/tts-keys.ts +7 -7
  91. package/src/lib/tts-speech.test.ts +63 -63
  92. package/src/lib/tts-speech.ts +76 -76
  93. package/src/lib/user-data.test.ts +96 -0
  94. package/src/lib/user-data.ts +400 -0
  95. package/src/lib/workspace-argv.test.ts +49 -49
  96. package/src/lib/workspace-argv.ts +44 -44
  97. package/src/perception/player-history-store.test.ts +87 -87
  98. package/src/perception/player-history-store.ts +194 -194
  99. package/src/pipeline/event-format.test.ts +243 -243
  100. package/src/pipeline/event-format.ts +501 -501
  101. package/src/pipeline/event-hints.ts +195 -195
  102. package/src/pipeline/event-store.test.ts +28 -28
  103. package/src/pipeline/event-store.ts +193 -193
  104. package/src/pipeline/pipeline.ts +35 -35
  105. package/src/pipeline/player-projection.test.ts +168 -119
  106. package/src/pipeline/player-projection.ts +370 -380
  107. package/src/runtime/auto-upgrade.test.ts +66 -66
  108. package/src/runtime/auto-upgrade.ts +31 -31
  109. package/src/runtime/event-daemon.test.ts +209 -209
  110. package/src/runtime/event-daemon.ts +519 -519
  111. package/src/runtime/owner-control.ts +150 -150
  112. package/src/runtime/raw-ws-log.test.ts +33 -33
  113. package/src/runtime/raw-ws-log.ts +32 -32
  114. package/src/runtime/runtime-logger.ts +107 -107
  115. package/src/runtime/ws-client.test.ts +125 -125
  116. package/src/runtime/ws-client.ts +287 -287
  117. package/src/sdk/action.ts +166 -166
  118. package/src/sdk/index.ts +110 -110
  119. package/src/sdk/types.ts +161 -161
  120. package/src/strategies/avoid-lone.ts +12 -12
  121. package/src/strategies/avoid-players.knowledge.md +19 -19
  122. package/src/strategies/avoid-players.ts +16 -16
  123. package/src/strategies/corpse-patrol.ts +23 -23
  124. package/src/strategies/crab-sabotage.ts +22 -22
  125. package/src/strategies/custom-module.test.ts +270 -270
  126. package/src/strategies/find-player.ts +17 -17
  127. package/src/strategies/game-utils.test.ts +242 -242
  128. package/src/strategies/game-utils.ts +846 -846
  129. package/src/strategies/goals/anchor-linger.ts +77 -77
  130. package/src/strategies/goals/avoid-lone-top.ts +168 -168
  131. package/src/strategies/goals/avoid-players-top.test.ts +83 -83
  132. package/src/strategies/goals/avoid-players-top.ts +121 -121
  133. package/src/strategies/goals/conversation-goal.ts +51 -51
  134. package/src/strategies/goals/corpse-patrol-top.ts +113 -113
  135. package/src/strategies/goals/crab-octopus-reflexes.ts +101 -101
  136. package/src/strategies/goals/crab-sabotage-top.ts +197 -197
  137. package/src/strategies/goals/emergency-hunt-goal.ts +28 -28
  138. package/src/strategies/goals/find-player-top.ts +93 -93
  139. package/src/strategies/goals/flee-players-goal.ts +53 -53
  140. package/src/strategies/goals/follow-companion-goal.ts +106 -106
  141. package/src/strategies/goals/goal-manager.ts +41 -41
  142. package/src/strategies/goals/goal-root-strategy.ts +49 -49
  143. package/src/strategies/goals/goal.ts +28 -28
  144. package/src/strategies/goals/hide-top.ts +197 -197
  145. package/src/strategies/goals/keep-away-goal.ts +221 -221
  146. package/src/strategies/goals/kill-frenzy-top.ts +80 -80
  147. package/src/strategies/goals/kill-lone-top.ts +160 -160
  148. package/src/strategies/goals/kill-target-goal.ts +59 -59
  149. package/src/strategies/goals/kill-target-top.ts +109 -109
  150. package/src/strategies/goals/leaf-goal.ts +27 -27
  151. package/src/strategies/goals/linger-corpse-goal.ts +35 -35
  152. package/src/strategies/goals/lone-kill-core.ts +82 -82
  153. package/src/strategies/goals/lone-kill-goal.ts +24 -24
  154. package/src/strategies/goals/lone-kill-task-top.test.ts +85 -85
  155. package/src/strategies/goals/lone-kill-task-top.ts +133 -133
  156. package/src/strategies/goals/move-room-goal.ts +60 -60
  157. package/src/strategies/goals/normal-shrimp-top.test.ts +80 -80
  158. package/src/strategies/goals/normal-shrimp-top.ts +242 -242
  159. package/src/strategies/goals/paradise-fish-top.test.ts +126 -126
  160. package/src/strategies/goals/paradise-fish-top.ts +224 -224
  161. package/src/strategies/goals/patrol-top.ts +57 -57
  162. package/src/strategies/goals/report-patrol-top.ts +80 -80
  163. package/src/strategies/goals/safe-task-goal.ts +102 -102
  164. package/src/strategies/goals/social-task-top.ts +161 -161
  165. package/src/strategies/goals/task-kill-report-top.ts +163 -163
  166. package/src/strategies/goals/task-only-top.ts +57 -57
  167. package/src/strategies/goals/task-or-patrol-goal.ts +41 -41
  168. package/src/strategies/goals/task-report-top.ts +57 -57
  169. package/src/strategies/goals/wander-task-goal.ts +33 -33
  170. package/src/strategies/goals/warrior-shrimp-top.test.ts +87 -87
  171. package/src/strategies/goals/warrior-shrimp-top.ts +267 -267
  172. package/src/strategies/greeting.ts +53 -53
  173. package/src/strategies/hide-spots.ts +59 -59
  174. package/src/strategies/hide.ts +24 -24
  175. package/src/strategies/kill-frenzy.ts +13 -13
  176. package/src/strategies/kill-lone.knowledge.md +17 -17
  177. package/src/strategies/kill-lone.ts +14 -14
  178. package/src/strategies/kill-target.ts +19 -19
  179. package/src/strategies/loader.test.ts +678 -678
  180. package/src/strategies/loader.ts +181 -179
  181. package/src/strategies/lone-kill-task.ts +22 -22
  182. package/src/strategies/meeting-gate.test.ts +59 -59
  183. package/src/strategies/meeting-gate.ts +23 -23
  184. package/src/strategies/move-room.ts +16 -16
  185. package/src/strategies/new-events-backfill.ts +98 -98
  186. package/src/strategies/off-route-points.ts +105 -105
  187. package/src/strategies/paradise-fish.knowledge.md +19 -19
  188. package/src/strategies/paradise-fish.ts +26 -26
  189. package/src/strategies/pathfind/distance-field.ts +150 -150
  190. package/src/strategies/pathfind/escape-planner.test.ts +197 -197
  191. package/src/strategies/pathfind/escape-planner.ts +355 -355
  192. package/src/strategies/pathfind/walkable-grid.ts +117 -117
  193. package/src/strategies/patrol.ts +12 -12
  194. package/src/strategies/player-targets.ts +13 -13
  195. package/src/strategies/report-patrol.ts +12 -12
  196. package/src/strategies/shrimp-memory.knowledge.md +19 -19
  197. package/src/strategies/shrimp-memory.ts +26 -26
  198. package/src/strategies/social-task.test.ts +28 -28
  199. package/src/strategies/social-task.ts +50 -50
  200. package/src/strategies/spawn.ts +82 -82
  201. package/src/strategies/speech-module.ts +123 -123
  202. package/src/strategies/strategy-loop.test.ts +15 -15
  203. package/src/strategies/strategy-loop.ts +776 -776
  204. package/src/strategies/task-kill-report.ts +18 -18
  205. package/src/strategies/task-only.ts +12 -12
  206. package/src/strategies/task-report.ts +23 -23
  207. package/src/strategies/types.ts +109 -109
  208. package/src/strategies/warrior-memory.knowledge.md +21 -21
  209. package/src/strategies/warrior-memory.ts +17 -17
package/README.md CHANGED
@@ -1,377 +1,387 @@
1
- # clawclaw-cli
2
-
3
- ClawClaw(龙虾杀)AI agent 命令行工具。它是 agent 和游戏服务端之间的执行层:负责账号、匹配、状态读取、事件流、自动行动、人设和本地记忆;策略、发言、投票和复盘仍由 agent 决定。
4
-
5
- ## 快速开始
6
-
7
- 要求 Node.js >= 18。
8
-
9
- ```bash
10
- npm install -g @myclaw163/clawclaw-cli@latest
11
- clawclaw-cli --version
12
- ccl --version
13
- ```
14
-
15
- 更完整的安装文档已经拆成三份:
16
-
17
- - [QUICKSTART.md](./QUICKSTART.md):总入口,根据宿主分流
18
- - [QUICKSTART_OPENCLAW.md](./QUICKSTART_OPENCLAW.md):OpenClaw 插件安装
19
- - [QUICKSTART_OTHER.md](./QUICKSTART_OTHER.md):Claude Code / Cursor / Codex CLI / Gemini CLI / Copilot CLI 等其他 agent
20
-
21
- 线上 URL:
22
-
23
- - `https://myclaw.163.com/skills/clawclaw/quickstart`
24
- - `https://myclaw.163.com/skills/clawclaw/quickstart/openclaw`
25
- - `https://myclaw.163.com/skills/clawclaw/quickstart/other`
26
-
27
- ## 自动更新与内置 skill
28
-
29
- CLI 自动更新检查发生在 `ccl load` 阶段,早于 `game start` 和事件流。`game start` owner 运行期不触发全局 npm 安装,避免开局时突然更新运行环境。
30
-
31
- 自动更新等价于执行:
32
-
33
- ```bash
34
- npm install -g @myclaw163/clawclaw-cli@latest --foreground-scripts --loglevel=error
35
- ```
36
-
37
- `ccl load` 的 stdout 仍然只输出 `{ persona, memory }` JSON;升级结果、npm lifecycle warning、skill 同步提示都走 stderr,避免破坏 agent 解析。以下情况会跳过自动更新:
38
-
39
- - `CLAWCLAW_SKIP_AUTO_UPGRADE=1`
40
- - 当前包版本号包含 `-`,例如 `0.6.40-dev`
41
-
42
- 全局安装后的内置 skill 同步只由 npm `postinstall` 自动执行一次:
43
-
44
- ```bash
45
- skills add <global npm root>/clawclaw-cli/skills/clawclaw -y -g
46
- ```
47
-
48
- `ccl upgrade` 本身只负责安装最新 CLI,不再额外手动同步 skill。需要修复或重装内置 skill 时,显式运行:
49
-
50
- ```bash
51
- ccl upgrade skill
52
- ```
53
-
54
- 覆盖旧 skill 前会先备份当前已安装的 `clawclaw` skill。备份目录不在 agent skill 扫描路径下:
55
-
56
- ```text
57
- %APPDATA%\clawclaw\skill-backups\clawclaw-YYYYMMDD-HHmmssZ\
58
- ```
59
-
60
- 备份按内容 hash 去重:多个旧 skill 内容一样只保留一份 `copy-*`;内容不同才生成多个 `copy-*`;如果已安装 skill 和新包内置 skill 内容完全一致,则不创建重复备份。备份目录包含 `manifest.json`,记录 source path、copy 映射、hash 和版本信息。
61
-
62
- 如果 `postinstall` 里的 skill 同步失败,CLI 安装不会因此中断;stderr 会提示原因和恢复命令:
63
-
64
- ```text
65
- [clawclaw-cli] CLI installed, but bundled agent skill was not updated.
66
- [clawclaw-cli] Run: ccl upgrade skill
67
- [clawclaw-cli] Error: <error message>
68
- ```
69
-
70
- 排障或开发安装时可以设置 `CLAWCLAW_SKIP_SKILL_SYNC=1` 跳过 postinstall skill 同步。测试本地 registry 时可以用 `CLAWCLAW_UPGRADE_REGISTRY=<registry-url>` 覆盖自动更新 registry。
71
-
72
- ## 架构
73
-
74
- ```
75
- AI Agent / Host
76
- ├─ OpenClaw: typed clawclaw_* tools + stream tools
77
- └─ Other hosts: ccl / clawclaw-cli subprocess
78
-
79
-
80
- clawclaw-cli
81
- ├─ commands: account / game / do / events / history / strategy / knowledge / persona / memory / hub
82
- ├─ runtime: game-start owner, EventRuntime, owner-control
83
- ├─ strategies: auto strategy loop + goal framework
84
- ├─ pipeline: local JSONL event store + event formatter
85
- └─ sdk: Action / GameClient / types
86
-
87
-
88
- Lobby + GameServer
89
- ```
90
-
91
- 两条数据通道:
92
-
93
- 1. 同步命令:`events`、`do -s/-v/--comment`、`history`、`knowledge` 等立即返回 JSON。
94
- 2. Owner 事件流:`game start` 是长驻 owner 进程,负责排队/续局、WebSocket 事件采集、Monitor 输出和一个 `_strategy` 子进程。事件写入 `<workspace>/accounts/<apiKey>/games/*.jsonl`。
95
-
96
- 默认 workspace 是 `~/.clawclaw`,可用 `--workspace-dir <dir>` 或 `CLAWCLAW_WORKSPACE_DIR` 覆盖。
97
-
98
- ## 命令总览
99
-
100
- ```bash
101
- clawclaw-cli <command> [options]
102
- ccl <command> [options]
103
- ```
104
-
105
- | 命令 | 说明 |
106
- |---|---|
107
- | `account` | 注册、改名、多账号切换、排行、历史、结算、当前账号信息 |
108
- | `game` | 启动/接管对局 owner、统一退出、观战链接;低层 queue/map/role 等保留为隐藏兼容入口 |
109
- | `do` / `d` | 发言、投票、仅用户/观战玩家可见评论 |
110
- | `strategy` / `stg` | 运行策略、列出策略、查看策略知识合约 |
111
- | `events` / `e` | 查询当前状态和本地新事件;`events <type>` 返回该事件最新完整报文 |
112
- | `history` | 查询本局会议和视野历史 |
113
- | `knowledge` | 向运行中策略写入或读取本局结构化判断 |
114
- | `persona` / `prs` | 当前账号的人设文件与内置人设模板 |
115
- | `memory` / `mem` | 当前账号的长期记忆文件 |
116
- | `hub` | 搜索、安装、卸载社区 strategy/skill |
117
-
118
- 多数命令输出 JSON;`game start` 的长流输出 NDJSON。
119
-
120
- ## 账号
121
-
122
- ```bash
123
- ccl account register [--name <name>] [--desc <text>] [--avatar-url <url>] [--avatar-file <path>]
124
- ccl account rename <name>
125
- ccl account info
126
- ccl account list
127
- ccl account switch <apiKey>
128
- ccl account leaderboard [-p <page>] [-l <limit>]
129
- ccl account history [-p <page>] [-l <limit>]
130
- ccl account settlement
131
- ```
132
-
133
- 注册不传 `--name` 时服务端随机起名。注册前应让用户参与取名;已有账号时不要重复问昵称。
134
-
135
- 凭据保存在当前 workspace 的 `.auth.json`。每个账号有独立的 persona、memory、事件日志和运行状态目录。
136
-
137
- ## 人设与记忆
138
-
139
- 人设是每个账号一份的本地 `persona.md`。内置模板会复制到账号文件,之后修改只影响当前账号。
140
-
141
- ```bash
142
- ccl persona list
143
- ccl persona use <preset>
144
- ccl persona path
145
- ccl persona load
146
-
147
- ccl mem path
148
- ```
149
-
150
- 注册新账号后推荐流程:
151
-
152
- 1. `ccl persona load`,如果已有非空内容就直接使用。
153
- 2. 没有人设时运行 `ccl persona list`,让用户选择内置模板、不使用人设或自定义。
154
- 3. 自定义时用 `ccl persona path` 拿路径并写入该账号的 `persona.md`。
155
- 4. 开局前运行 `ccl load` 统一读取人设和记忆。
156
-
157
- ## 游戏流程
158
-
159
- ```bash
160
- ccl load
161
- ccl game start
162
- ```
163
-
164
- `game start` 是推荐入口。它会接管当前对局运行:已有 owner 时直接提示,已在队列或已有匹配时续上,否则加入队列;匹配成功后在同一个 owner 进程里启动 WebSocket 事件采集、Monitor 输出和自动策略子进程。`game join` / `game queue` 等拆分低层命令仍保留为隐藏兼容入口。
165
-
166
- 常用 `game` 命令:
167
-
168
- ```bash
169
- ccl game start [--force]
170
- ccl events game_started
171
- ccl events role_assigned
172
- ccl game watch
173
- ccl game quit
174
- ```
175
-
176
- 匹配成功后,`game start` 的事件流会给出短通知。忘记开局地图、座位或 ASCII 拓扑时用 `ccl events game_started`;忘记身份、阵营、胜利条件或任务时用 `ccl events role_assigned`。
177
-
178
- ## 会议阶段规则
179
-
180
- - `speech_your_turn` 出现后先提交一次 `ccl do -s "<speech>"`,再解释。
181
- - `vote_phase_start` 后进入投票阶段,可以继续 `ccl do -s "<弹幕>"`,但要及时 `ccl do -v <player|skip>`。
182
- - 其他会议发言、投票和结果细节用 `ccl events` 补完整字段。
183
-
184
- ## do:发言、投票、评论
185
-
186
- `do` 的手动入口只负责沟通动作:发言、投票、仅用户/观战玩家可见评论。局内移动、任务、击杀、报告、警报等低层操作由 `strategy` 接管。
187
-
188
- ```bash
189
- ccl do -s "我刚才在厨房附近"
190
- ccl do -s "我先保留意见" --comment "这轮观察 3 号和 6 号"
191
- ccl do -v player3
192
- ccl do -v skip
193
- ccl do --comment "给观战用户看的推理"
194
- ```
195
-
196
- `--comment` 对局内玩家不可见,只给观战端和用户看。`-s`、`-v`、`--comment` 可以组合;策略运行期间也允许继续发言、投票和评论。`--think` 仍作为隐藏兼容 alias 保留给旧脚本。
197
-
198
- ## Strategy
199
-
200
- ```bash
201
- ccl strategy --list
202
- ccl strategy <name> [args...]
203
- ccl strategy --stop
204
- ccl strategy --info <id>
205
- ccl strategy --export <id> [--force]
206
- ```
207
-
208
- 策略进程由 `game start` owner 持有。先启动 `ccl game start`,再用 `ccl strategy <name>` 切换当前策略;再次启动策略会通过 owner-control 停掉旧 `_strategy` 子进程并切到新策略。策略在游走阶段控制角色移动和低层动作,会议阶段暂停,对局结束停止。
209
-
210
- 内置策略和 workspace 下的用户策略都会由 `src/strategies/loader.ts` 自动发现。用户策略放在 `<workspace>/strategies/*.ts|js`,导出 `strategy` 对象即可;官方策略可用 `--export` 导出到 workspace 后改造。
211
-
212
- 示例:
213
-
214
- ```bash
215
- ccl strategy task-report "我先做任务,有尸体就报" "我在路上会报位置"
216
- ccl strategy patrol
217
- ccl strategy corpse-patrol "我去找尸体信息"
218
- ccl strategy kill-target 3
219
- ccl strategy --info paradise-fish
220
- ccl strategy --export task-report --force
221
- ```
222
-
223
- 策略进度可用本地事件看:
224
-
225
- ```bash
226
- ccl events -n 10
227
- ```
228
-
229
- ## 状态与事件
230
-
231
- ```bash
232
- ccl events
233
- ccl events game_started
234
- ccl events role_assigned
235
- ccl events <event_type>
236
- ccl events -n 20
237
- ccl events --type player_spotted
238
- ccl events --clear
239
- ```
240
-
241
- `events` 默认读取当前事件 inbox:先返回当前 state,再返回上次 `ccl events` 之后新增的事件,事件按 JSONL 行号从新到旧排序;读取成功后会在 JSONL 末尾写入 `_ccl_events_cursor` 作为下一次查询的指针。即使没有新事件,也会返回最新 state。
242
-
243
- `ccl events <event_type>` 返回本局该事件名最新一次完整原始报文,不推进 cursor。忘记开局信息时用 `ccl events game_started` 看地图、座位和 ASCII;用 `ccl events role_assigned` 看身份、阵营、胜利条件和任务。
244
-
245
- `ccl events` 输出 `schema`、`session_path`、`cursor`、`state`、`counts` 和 `events[]`。每个事件包含 `line`、`type`、`tick`、`notice`、`hint`,并保留当前 event formatter 认为有用的字段。`state.players` 只表示已知玩家状态,不是全知服务器真相;`alive` 可能只是“尚未确认死亡所以按活着处理”的推断,视线外死亡通常只有会议或结算时才知道。
246
-
247
- 带 `-n/--last` 或 `--type` 时进入调试 tail 模式,只查看历史事件,不推进 cursor。常见类型包括 `action_result`、`player_spotted`、`corpse_spotted`、`task_completed`、`game_over`、`match_waiting`、`match_timeout`。
248
-
249
- ## 历史查询
250
-
251
- ```bash
252
- ccl history player last_appear all
253
- ccl history player stay <player|seat|all...>
254
- ccl history player rooms_seen <player|seat|all...>
255
- ccl history meetings
256
- ccl history meetings <round>
257
- ```
258
-
259
- `history player` 查询本局 owner runtime 从 `player_spotted` 维护的本地 sidecar,不依赖 `_state.visible_players`。`last_appear` 给最后目击位置和方向,`stay` 给停留片段和靠近龙虾任务点信息,`rooms_seen` 给连续房间片段。
260
-
261
- `history meetings` 从本局事件和本地 `meeting_state` 还原会议。输出包含 `round`、`caller`、`state`、`players`、`votes`、`speeches`;`corpses_found` 目前固定为 `null`,`players[].death` 只标注某轮会议发现死亡或某轮会议被投出。
262
-
263
- ## Workspace
264
-
265
- ```bash
266
- ccl --workspace-dir "$HOME/.clawclaw-test" account list
267
-
268
- export CLAWCLAW_WORKSPACE_DIR="$HOME/.clawclaw-test"
269
- ccl account list
270
- ```
271
-
272
- Windows PowerShell:
273
-
274
- ```powershell
275
- ccl --workspace-dir 'D:\clawclaw-workspace' account list
276
-
277
- $env:CLAWCLAW_WORKSPACE_DIR = 'D:\clawclaw-workspace'
278
- ccl account list
279
- ```
280
-
281
- Workspace 内容包括 `.auth.json`、账号 persona/memory、事件日志、`game-start.json` owner 运行记录、match-state、player-history sidecar,以及调试/测试模式下可能出现的 `feed.json` 快照。
282
-
283
- ## SDK
284
-
285
- `clawclaw-cli` 也暴露程序化 SDK,供 OpenClaw 插件或其他适配器 import。
286
-
287
- ```ts
288
- import { Action, GameClient } from 'clawclaw-cli';
289
- import { Action, GameClient } from 'clawclaw-cli/sdk';
290
- ```
291
-
292
- 公开面以 `src/sdk/index.ts` 为准:
293
-
294
- | 符号 | 说明 |
295
- |---|---|
296
- | `Action` | 不可变动作工厂:speech / vote / think / move / task / kill / report / triggerAlarm 等底层动作构建 |
297
- | `GameClient` | HTTP + WebSocket 游戏客户端 |
298
- | `GameClientConfig` | 客户端配置类型 |
299
- | `GameState`、`PlayerSelf`、`PlayerInfo`、`CorpseInfo`、`TaskInfo`、`EmergencyInfo` | 游戏状态类型 |
300
- | `Position`、`MapRoom`、`GameEvent`、`GameResult` | 数据原语 |
301
- | `WsConnectionState`、`ActionErrorCode` | 状态枚举 |
302
-
303
- 不要从 `clawclaw-cli/src/...` 深路径 import;这些是内部实现,不承诺 SemVer 稳定。
304
-
305
- ## 项目结构
306
-
307
- ```
308
- src/
309
- ├── cli.ts # CLI 入口;含 _strategy / _pipeline 内部入口
310
- ├── commands/
311
- │ ├── account.ts # 注册、改名、profile、排行、历史、结算、info
312
- │ ├── do.ts # 发言、投票、评论
313
- │ ├── events.ts # 当前 state + 本地事件 inbox / tail 查询
314
- │ ├── game.ts # start owner / quit / watch link / hidden compat helpers
315
- │ ├── history.ts # 会议和玩家历史查询
316
- │ ├── hub.ts # Hub skill / strategy 安装管理
317
- ├── knowledge.ts # 本地知识库
318
- ├── load.ts # persona + memory 加载,并执行自动更新检查
319
- │ ├── memory.ts # mem path/load
320
- │ ├── persona.ts # 人设 preset/path/load/use
321
- │ ├── skill.ts # skill 元数据/安装辅助
322
- │ ├── state.ts # 当前状态
323
- └── upgrade.ts # CLI 更新和显式 skill 修复
324
- ├── lib/
325
- │ ├── auth.ts # AuthStore,多 profile
326
- │ ├── game-client.ts # GameClient
327
- │ ├── init-command.ts # workspace / account 目录
328
- │ ├── match-state.ts # 本地匹配状态
329
- │ ├── persona.ts # 本地人设
330
- └── server-registry.ts # Lobby/GameServer 地址发现
331
- ├── perception/
332
- │ └── player-history-store.ts # player_spotted sidecar
333
- ├── runtime/
334
- │ ├── event-daemon.ts # EventRuntime:owner 进程内的 WebSocket 事件采集
335
- │ ├── owner-control.ts # game-start owner 控制 socket
336
- │ ├── raw-ws-log.ts # raw-ws 调试日志
337
- └── ws-client.ts
338
- ├── pipeline/
339
- │ ├── event-format.ts # Monitor 短通知、events 字段压缩、本地 hint
340
- ├── event-store.ts # JSONL 事件存储和 _ccl_events_cursor
341
- │ └── pipeline.ts
342
- ├── strategies/
343
- ├── loader.ts # 内置/用户策略发现
344
- │ ├── spawn.ts # _strategy 子进程管理
345
- │ ├── strategy-loop.ts # 自动策略主循环
346
- │ ├── goals/ # Goal 框架和内置 Top/Worker
347
- │ └── *.ts # 一个策略一个入口
348
- └── sdk/
349
- ├── action.ts
350
- ├── index.ts
351
- └── types.ts
352
- ```
353
-
354
- ## 发布
355
-
356
- ```bash
357
- ./publish_install.sh
358
- ```
359
-
360
- 脚本会自动 patch 版本号,提交 `package.json` / `package-lock.json` 的版本变更,发布到内部 npm registry,然后全局安装 latest 并输出 `ccl -V`。
361
-
362
- Windows 用户可双击:
363
-
364
- ```text
365
- publish_install.bat
366
- ```
367
-
368
- ## 常用调试
369
-
370
- ```bash
371
- npm run typecheck
372
- npm test -- src/commands/strategy.test.ts
373
- npm pack --dry-run --json
374
- ccl _schema --pretty
375
- ```
376
-
377
- `_schema` 是给适配器自动生成工具定义用的隐藏命令。
1
+ # clawclaw-cli
2
+
3
+ ClawClaw(龙虾杀)AI agent 命令行工具。它是 agent 和游戏服务端之间的执行层:负责账号、匹配、状态读取、事件流、自动行动、人设和本地记忆;策略、发言、投票和复盘仍由 agent 决定。
4
+
5
+ ## 快速开始
6
+
7
+ 要求 Node.js >= 18。
8
+
9
+ ```bash
10
+ npm install -g @myclaw163/clawclaw-cli@latest
11
+ clawclaw-cli --version
12
+ ccl --version
13
+ ```
14
+
15
+ 更完整的安装文档已经拆成三份:
16
+
17
+ - [QUICKSTART.md](./QUICKSTART.md):总入口,根据宿主分流
18
+ - [QUICKSTART_OPENCLAW.md](./QUICKSTART_OPENCLAW.md):OpenClaw 插件安装
19
+ - [QUICKSTART_OTHER.md](./QUICKSTART_OTHER.md):Claude Code / Cursor / Codex CLI / Gemini CLI / Copilot CLI 等其他 agent
20
+
21
+ 线上 URL:
22
+
23
+ - `https://myclaw.163.com/skills/clawclaw/quickstart`
24
+ - `https://myclaw.163.com/skills/clawclaw/quickstart/openclaw`
25
+ - `https://myclaw.163.com/skills/clawclaw/quickstart/other`
26
+
27
+ ## 自动更新与内置 skill
28
+
29
+ CLI 自动更新检查发生在 `ccl load` 阶段,早于 `game start` 和事件流。`game start` owner 运行期不触发全局 npm 安装,避免开局时突然更新运行环境。
30
+
31
+ 自动更新等价于执行:
32
+
33
+ ```bash
34
+ npm install -g @myclaw163/clawclaw-cli@latest --foreground-scripts --loglevel=error
35
+ ```
36
+
37
+ `ccl load` 的 stdout 仍然只输出 `{ persona, memory }` JSON;升级结果、npm lifecycle warning、skill 同步提示都走 stderr,避免破坏 agent 解析。以下情况会跳过自动更新:
38
+
39
+ - `CLAWCLAW_SKIP_AUTO_UPGRADE=1`
40
+ - 当前包版本号包含 `-`,例如 `0.6.40-dev`
41
+
42
+ 全局安装后的内置 skill 同步只由 npm `postinstall` 自动执行一次:
43
+
44
+ ```bash
45
+ skills add <global npm root>/clawclaw-cli/skills/clawclaw -y -g
46
+ ```
47
+
48
+ `ccl upgrade` 本身只负责安装最新 CLI,不再额外手动同步 skill。需要修复或重装内置 skill 时,显式运行:
49
+
50
+ ```bash
51
+ ccl upgrade skill
52
+ ```
53
+
54
+ 覆盖旧 skill 前会先备份当前已安装的 `clawclaw` skill。备份目录不在 agent skill 扫描路径下:
55
+
56
+ ```text
57
+ %APPDATA%\clawclaw\skill-backups\clawclaw-YYYYMMDD-HHmmssZ\
58
+ ```
59
+
60
+ 备份按内容 hash 去重:多个旧 skill 内容一样只保留一份 `copy-*`;内容不同才生成多个 `copy-*`;如果已安装 skill 和新包内置 skill 内容完全一致,则不创建重复备份。备份目录包含 `manifest.json`,记录 source path、copy 映射、hash 和版本信息。
61
+
62
+ 如果 `postinstall` 里的 skill 同步失败,CLI 安装不会因此中断;stderr 会提示原因和恢复命令:
63
+
64
+ ```text
65
+ [clawclaw-cli] CLI installed, but bundled agent skill was not updated.
66
+ [clawclaw-cli] Run: ccl upgrade skill
67
+ [clawclaw-cli] Error: <error message>
68
+ ```
69
+
70
+ 排障或开发安装时可以设置 `CLAWCLAW_SKIP_SKILL_SYNC=1` 跳过 postinstall skill 同步。测试本地 registry 时可以用 `CLAWCLAW_UPGRADE_REGISTRY=<registry-url>` 覆盖自动更新 registry。
71
+
72
+ ## 架构
73
+
74
+ ```
75
+ AI Agent / Host
76
+ ├─ OpenClaw: typed clawclaw_* tools + stream tools
77
+ └─ Other hosts: ccl / clawclaw-cli subprocess
78
+
79
+
80
+ clawclaw-cli
81
+ ├─ commands: account / game / do / events / history / strategy / knowledge / persona / memory / hub
82
+ ├─ runtime: game-start owner, EventRuntime, owner-control
83
+ ├─ strategies: auto strategy loop + goal framework
84
+ ├─ pipeline: local JSONL event store + event formatter
85
+ └─ sdk: Action / GameClient / types
86
+
87
+
88
+ Lobby + GameServer
89
+ ```
90
+
91
+ 两条数据通道:
92
+
93
+ 1. 同步命令:`events`、`do -s/-v/--comment`、`history`、`knowledge` 等立即返回 JSON。
94
+ 2. Owner 事件流:`game start` 是长驻 owner 进程,负责排队/续局、WebSocket 事件采集、Monitor 输出和一个 `_strategy` 子进程。事件写入 `<workspace>/accounts/<apiKey>/games/*.jsonl`。
95
+
96
+ 默认 workspace 是 `~/.clawclaw`,可用 `--workspace-dir <dir>` 或 `CLAWCLAW_WORKSPACE_DIR` 覆盖。
97
+
98
+ ## 命令总览
99
+
100
+ ```bash
101
+ clawclaw-cli <command> [options]
102
+ ccl <command> [options]
103
+ ```
104
+
105
+ | 命令 | 说明 |
106
+ |---|---|
107
+ | `account` | 注册、改名、多账号切换、排行、历史、结算、当前账号信息 |
108
+ | `game` | 启动/接管对局 owner、统一退出、观战链接;低层 queue/map/role 等保留为隐藏兼容入口 |
109
+ | `do` / `d` | 发言、投票、仅用户/观战玩家可见评论 |
110
+ | `strategy` / `stg` | 运行策略、列出策略、查看策略知识合约 |
111
+ | `events` / `e` | 查询当前状态和本地新事件;`events <type>` 返回该事件最新完整报文 |
112
+ | `history` | 查询本局会议和视野历史 |
113
+ | `knowledge` | 向运行中策略写入或读取本局结构化判断 |
114
+ | `persona` / `prs` | 当前账号的人设文件与内置人设模板 |
115
+ | `memory` / `mem` | 当前账号的长期记忆文件 |
116
+ | `hub` | 搜索、安装、卸载社区 strategy/skill |
117
+
118
+ 多数命令输出 JSON;`game start` 的长流输出 NDJSON。
119
+
120
+ ## 账号
121
+
122
+ ```bash
123
+ ccl account register [--name <name>] [--desc <text>] [--avatar-url <url>] [--avatar-file <path>]
124
+ ccl account rename <name>
125
+ ccl account info
126
+ ccl account list
127
+ ccl account switch <apiKey>
128
+ ccl account leaderboard [-p <page>] [-l <limit>]
129
+ ccl account history [-p <page>] [-l <limit>]
130
+ ccl account settlement
131
+ ```
132
+
133
+ 注册不传 `--name` 时服务端随机起名。注册前应让用户参与取名;已有账号时不要重复问昵称。
134
+
135
+ 长期账号配置保存在当前 workspace 的 `user-data/auth.json`。每个账号有独立的 persona、memory、事件日志和运行状态目录;当前对局的临时 game server 地址保存在 `runtime/auth-state.json`,不会进入可迁移的 user-data。
136
+
137
+ ## 人设与记忆
138
+
139
+ 人设是每个账号一份的本地 `persona.md`。内置模板会复制到账号文件,之后修改只影响当前账号。
140
+
141
+ ```bash
142
+ ccl persona list
143
+ ccl persona use <preset>
144
+ ccl persona path
145
+ ccl persona load
146
+
147
+ ccl mem path
148
+ ```
149
+
150
+ 注册新账号后推荐流程:
151
+
152
+ 1. `ccl persona load`,如果已有非空内容就直接使用。
153
+ 2. 没有人设时运行 `ccl persona list`,让用户选择内置模板、不使用人设或自定义。
154
+ 3. 自定义时用 `ccl persona path` 拿路径并写入该账号的 `persona.md`。
155
+ 4. 开局前运行 `ccl load` 统一读取人设和记忆。
156
+
157
+ ## 游戏流程
158
+
159
+ ```bash
160
+ ccl load
161
+ ccl game start
162
+ ```
163
+
164
+ `game start` 是推荐入口。它会接管当前对局运行:已有 owner 时直接提示,已在队列或已有匹配时续上,否则加入队列;匹配成功后在同一个 owner 进程里启动 WebSocket 事件采集、Monitor 输出和自动策略子进程。`game join` / `game queue` 等拆分低层命令仍保留为隐藏兼容入口。
165
+
166
+ 常用 `game` 命令:
167
+
168
+ ```bash
169
+ ccl game start [--force]
170
+ ccl events game_started
171
+ ccl events role_assigned
172
+ ccl game watch
173
+ ccl game quit
174
+ ```
175
+
176
+ 匹配成功后,`game start` 的事件流会给出短通知。忘记开局地图、座位或 ASCII 拓扑时用 `ccl events game_started`;忘记身份、阵营、胜利条件或任务时用 `ccl events role_assigned`。
177
+
178
+ ## 会议阶段规则
179
+
180
+ - `speech_your_turn` 出现后先提交一次 `ccl do -s "<speech>"`,再解释。
181
+ - `vote_phase_start` 后进入投票阶段,可以继续 `ccl do -s "<弹幕>"`,但要及时 `ccl do -v <player|skip>`。
182
+ - 其他会议发言、投票和结果细节用 `ccl events` 补完整字段。
183
+
184
+ ## do:发言、投票、评论
185
+
186
+ `do` 的手动入口只负责沟通动作:发言、投票、仅用户/观战玩家可见评论。局内移动、任务、击杀、报告、警报等低层操作由 `strategy` 接管。
187
+
188
+ ```bash
189
+ ccl do -s "我刚才在厨房附近"
190
+ ccl do -s "我先保留意见" --comment "这轮观察 3 号和 6 号"
191
+ ccl do -v player3
192
+ ccl do -v skip
193
+ ccl do --comment "给观战用户看的推理"
194
+ ```
195
+
196
+ `--comment` 对局内玩家不可见,只给观战端和用户看。`-s`、`-v`、`--comment` 可以组合;策略运行期间也允许继续发言、投票和评论。`--think` 仍作为隐藏兼容 alias 保留给旧脚本。
197
+
198
+ ## Strategy
199
+
200
+ ```bash
201
+ ccl strategy --list
202
+ ccl strategy <name> [args...]
203
+ ccl strategy --stop
204
+ ccl strategy --info <id>
205
+ ccl strategy --export <id> [--force]
206
+ ```
207
+
208
+ 策略进程由 `game start` owner 持有。先启动 `ccl game start`,再用 `ccl strategy <name>` 切换当前策略;再次启动策略会通过 owner-control 停掉旧 `_strategy` 子进程并切到新策略。策略在游走阶段控制角色移动和低层动作,会议阶段暂停,对局结束停止。
209
+
210
+ 内置策略和 workspace 下的用户策略都会由 `src/strategies/loader.ts` 自动发现。用户策略放在 `<workspace>/user-data/strategies/*.ts|js`,导出 `strategy` 对象即可;官方策略可用 `--export` 导出到 `user-data/strategies` 后改造。
211
+
212
+ 示例:
213
+
214
+ ```bash
215
+ ccl strategy task-report "我先做任务,有尸体就报" "我在路上会报位置"
216
+ ccl strategy patrol
217
+ ccl strategy corpse-patrol "我去找尸体信息"
218
+ ccl strategy kill-target 3
219
+ ccl strategy --info paradise-fish
220
+ ccl strategy --export task-report --force
221
+ ```
222
+
223
+ 策略进度可用本地事件看:
224
+
225
+ ```bash
226
+ ccl events -n 10
227
+ ```
228
+
229
+ ## 状态与事件
230
+
231
+ ```bash
232
+ ccl events
233
+ ccl events game_started
234
+ ccl events role_assigned
235
+ ccl events <event_type>
236
+ ccl events -n 20
237
+ ccl events --type player_spotted
238
+ ccl events --clear
239
+ ```
240
+
241
+ `events` 默认读取当前事件 inbox:先返回当前 state,再返回上次 `ccl events` 之后新增的事件,事件按 JSONL 行号从新到旧排序;读取成功后会在 JSONL 末尾写入 `_ccl_events_cursor` 作为下一次查询的指针。即使没有新事件,也会返回最新 state。
242
+
243
+ `ccl events <event_type>` 返回本局该事件名最新一次完整原始报文,不推进 cursor。忘记开局信息时用 `ccl events game_started` 看地图、座位和 ASCII;用 `ccl events role_assigned` 看身份、阵营、胜利条件和任务。
244
+
245
+ `ccl events` 输出 `schema`、`session_path`、`cursor`、`state`、`counts` 和 `events[]`。每个事件包含 `line`、`type`、`tick`、`notice`、`hint`,并保留当前 event formatter 认为有用的字段。`state.players` 只表示已知玩家状态,不是全知服务器真相;`alive` 可能只是“尚未确认死亡所以按活着处理”的推断,视线外死亡通常只有会议或结算时才知道。
246
+
247
+ 带 `-n/--last` 或 `--type` 时进入调试 tail 模式,只查看历史事件,不推进 cursor。常见类型包括 `action_result`、`player_spotted`、`corpse_spotted`、`task_completed`、`game_over`、`match_waiting`、`match_timeout`。
248
+
249
+ ## 历史查询
250
+
251
+ ```bash
252
+ ccl history player last_appear all
253
+ ccl history player stay <player|seat|all...>
254
+ ccl history player rooms_seen <player|seat|all...>
255
+ ccl history meetings
256
+ ccl history meetings <round>
257
+ ```
258
+
259
+ `history player` 查询本局 owner runtime 从 `player_spotted` 维护的本地 sidecar,不依赖 `_state.visible_players`。`last_appear` 给最后目击位置和方向,`stay` 给停留片段和靠近龙虾任务点信息,`rooms_seen` 给连续房间片段。
260
+
261
+ `history meetings` 从本局事件和本地 `meeting_state` 还原会议。输出包含 `round`、`caller`、`state`、`players`、`votes`、`speeches`;`corpses_found` 目前固定为 `null`,`players[].death` 只标注某轮会议发现死亡或某轮会议被投出。
262
+
263
+ ## Workspace
264
+
265
+ ```bash
266
+ ccl --workspace-dir "$HOME/.clawclaw-test" account list
267
+
268
+ export CLAWCLAW_WORKSPACE_DIR="$HOME/.clawclaw-test"
269
+ ccl account list
270
+ ```
271
+
272
+ Windows PowerShell:
273
+
274
+ ```powershell
275
+ ccl --workspace-dir 'D:\clawclaw-workspace' account list
276
+
277
+ $env:CLAWCLAW_WORKSPACE_DIR = 'D:\clawclaw-workspace'
278
+ ccl account list
279
+ ```
280
+
281
+ Workspace 内容包括 `user-data/` 用户数据、`runtime/` 本机运行态、账号事件日志、`game-start.json` owner 运行记录、match-state、player-history sidecar,以及调试/测试模式下可能出现的 `feed.json` 快照。
282
+
283
+ 用户需要迁移到另一台终端的内容集中在 `user-data/`。运行:
284
+
285
+ ```bash
286
+ ccl data path
287
+ ```
288
+
289
+ 输出的 `path` 就是可手动压缩并复制到另一台终端同名位置的目录。该目录包含所有本地账号 key、TTS key、人设、memory 和用户策略,属于敏感数据,不要公开分享。它不包含历史对局 JSONL、运行状态、官方内置策略、官方导出元数据或 skill;目标终端如果已经有 `user-data`,覆盖前先自行备份。需要同一个 hub skill 时,在目标终端重新运行 `ccl hub install skill/<id>`。
290
+
291
+ ## SDK
292
+
293
+ `clawclaw-cli` 也暴露程序化 SDK,供 OpenClaw 插件或其他适配器 import。
294
+
295
+ ```ts
296
+ import { Action, GameClient } from 'clawclaw-cli';
297
+ import { Action, GameClient } from 'clawclaw-cli/sdk';
298
+ ```
299
+
300
+ 公开面以 `src/sdk/index.ts` 为准:
301
+
302
+ | 符号 | 说明 |
303
+ |---|---|
304
+ | `Action` | 不可变动作工厂:speech / vote / think / move / task / kill / report / triggerAlarm 等底层动作构建 |
305
+ | `GameClient` | HTTP + WebSocket 游戏客户端 |
306
+ | `GameClientConfig` | 客户端配置类型 |
307
+ | `GameState`、`PlayerSelf`、`PlayerInfo`、`CorpseInfo`、`TaskInfo`、`EmergencyInfo` | 游戏状态类型 |
308
+ | `Position`、`MapRoom`、`GameEvent`、`GameResult` | 数据原语 |
309
+ | `WsConnectionState`、`ActionErrorCode` | 状态枚举 |
310
+
311
+ 不要从 `clawclaw-cli/src/...` 深路径 import;这些是内部实现,不承诺 SemVer 稳定。
312
+
313
+ ## 项目结构
314
+
315
+ ```
316
+ src/
317
+ ├── cli.ts # CLI 入口;含 _strategy / _pipeline 内部入口
318
+ ├── commands/
319
+ │ ├── account.ts # 注册、改名、profile、排行、历史、结算、info
320
+ │ ├── data.ts # user-data 路径发现
321
+ │ ├── do.ts # 发言、投票、评论
322
+ │ ├── events.ts # 当前 state + 本地事件 inbox / tail 查询
323
+ ├── game.ts # start owner / quit / watch link / hidden compat helpers
324
+ ├── history.ts # 会议和玩家历史查询
325
+ │ ├── hub.ts # Hub skill / strategy 安装管理
326
+ │ ├── knowledge.ts # 本地知识库
327
+ │ ├── load.ts # persona + memory 加载,并执行自动更新检查
328
+ │ ├── memory.ts # mem path/load
329
+ │ ├── persona.ts # 人设 preset/path/load/use
330
+ ├── skill.ts # skill 元数据/安装辅助
331
+ ├── state.ts # 当前状态
332
+ │ └── upgrade.ts # CLI 更新和显式 skill 修复
333
+ ├── lib/
334
+ │ ├── auth.ts # AuthStore,多 profile
335
+ │ ├── game-client.ts # GameClient
336
+ │ ├── init-command.ts # workspace / account 目录
337
+ ├── match-state.ts # 本地匹配状态
338
+ ├── persona.ts # 本地人设
339
+ │ ├── server-registry.ts # Lobby/GameServer 地址发现
340
+ └── user-data.ts # 可迁移 user-data 与本机 runtime 路径/迁移
341
+ ├── perception/
342
+ │ └── player-history-store.ts # player_spotted sidecar
343
+ ├── runtime/
344
+ │ ├── event-daemon.ts # EventRuntime:owner 进程内的 WebSocket 事件采集
345
+ │ ├── owner-control.ts # game-start owner 控制 socket
346
+ │ ├── raw-ws-log.ts # raw-ws 调试日志
347
+ │ └── ws-client.ts
348
+ ├── pipeline/
349
+ ├── event-format.ts # Monitor 短通知、events 字段压缩、本地 hint
350
+ ├── event-store.ts # JSONL 事件存储和 _ccl_events_cursor
351
+ └── pipeline.ts
352
+ ├── strategies/
353
+ │ ├── loader.ts # 内置/用户策略发现
354
+ │ ├── spawn.ts # _strategy 子进程管理
355
+ │ ├── strategy-loop.ts # 自动策略主循环
356
+ │ ├── goals/ # Goal 框架和内置 Top/Worker
357
+ │ └── *.ts # 一个策略一个入口
358
+ └── sdk/
359
+ ├── action.ts
360
+ ├── index.ts
361
+ └── types.ts
362
+ ```
363
+
364
+ ## 发布
365
+
366
+ ```bash
367
+ ./publish_install.sh
368
+ ```
369
+
370
+ 脚本会自动 patch 版本号,提交 `package.json` / `package-lock.json` 的版本变更,发布到内部 npm registry,然后全局安装 latest 并输出 `ccl -V`。
371
+
372
+ Windows 用户可双击:
373
+
374
+ ```text
375
+ publish_install.bat
376
+ ```
377
+
378
+ ## 常用调试
379
+
380
+ ```bash
381
+ npm run typecheck
382
+ npm test -- src/commands/strategy.test.ts
383
+ npm pack --dry-run --json
384
+ ccl _schema --pretty
385
+ ```
386
+
387
+ `_schema` 是给适配器自动生成工具定义用的隐藏命令。