@myclaw163/clawclaw-cli 0.6.71 → 0.6.74

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 (205) hide show
  1. package/README.md +377 -427
  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 -0
  10. package/scripts/find-hide-spots.py +157 -157
  11. package/scripts/postinstall.mjs +20 -20
  12. package/scripts/sync-bundled-skill.mjs +245 -245
  13. package/scripts/sync-bundled-skill.test.mjs +152 -152
  14. package/skills/clawclaw/SKILL.md +246 -244
  15. package/skills/clawclaw/references/CHATTERBOX.md +141 -142
  16. package/skills/clawclaw/references/COMMANDS.md +155 -148
  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 -45
  20. package/skills/clawclaw/references/STRATEGIES.md +59 -59
  21. package/skills/clawclaw/references/STREAM.md +93 -91
  22. package/skills/clawclaw/references/TACTICS.md +65 -65
  23. package/src/assets/clawclaw-ascii-map.txt +40 -40
  24. package/src/cli.ts +110 -110
  25. package/src/commands/_schema.ts +124 -109
  26. package/src/commands/account.ts +209 -209
  27. package/src/commands/do.test.ts +84 -73
  28. package/src/commands/do.ts +130 -126
  29. package/src/commands/events.test.ts +71 -71
  30. package/src/commands/events.ts +221 -155
  31. package/src/commands/game-map.test.ts +28 -28
  32. package/src/commands/game-start-plan.test.ts +84 -84
  33. package/src/commands/game.ts +1113 -1047
  34. package/src/commands/history-player.test.ts +102 -102
  35. package/src/commands/history.ts +573 -573
  36. package/src/commands/hub.test.ts +96 -96
  37. package/src/commands/hub.ts +234 -234
  38. package/src/commands/knowledge.test.ts +13 -13
  39. package/src/commands/knowledge.ts +139 -139
  40. package/src/commands/load.test.ts +51 -51
  41. package/src/commands/load.ts +13 -13
  42. package/src/commands/meeting-history.test.ts +106 -106
  43. package/src/commands/memory.ts +40 -40
  44. package/src/commands/peek.ts +45 -45
  45. package/src/commands/persona.ts +57 -57
  46. package/src/commands/setup/codex.ts +266 -266
  47. package/src/commands/skill.ts +128 -128
  48. package/src/commands/state.ts +46 -46
  49. package/src/commands/strategy.test.ts +145 -145
  50. package/src/commands/strategy.ts +181 -181
  51. package/src/commands/tts.ts +128 -128
  52. package/src/commands/upgrade.test.ts +82 -82
  53. package/src/commands/upgrade.ts +148 -148
  54. package/src/commands/watch.test.ts +999 -977
  55. package/src/commands/watch.ts +660 -658
  56. package/src/lib/auth.test.ts +74 -74
  57. package/src/lib/auth.ts +186 -186
  58. package/src/lib/command-meta.ts +37 -37
  59. package/src/lib/game-client.ts +403 -391
  60. package/src/lib/game-context.ts +92 -0
  61. package/src/lib/http-keepalive.ts +15 -15
  62. package/src/lib/http-transport.test.ts +42 -42
  63. package/src/lib/http-transport.ts +113 -113
  64. package/src/lib/hub-client.test.ts +56 -56
  65. package/src/lib/hub-client.ts +88 -88
  66. package/src/lib/hub-install.test.ts +98 -98
  67. package/src/lib/hub-install.ts +121 -121
  68. package/src/lib/hub-reminder.ts +75 -75
  69. package/src/lib/hub-unzip.test.ts +69 -69
  70. package/src/lib/hub-unzip.ts +62 -62
  71. package/src/lib/init-command.test.ts +75 -75
  72. package/src/lib/init-command.ts +120 -120
  73. package/src/lib/knowledge-store.test.ts +170 -170
  74. package/src/lib/knowledge-store.ts +369 -369
  75. package/src/lib/load-context.test.ts +52 -52
  76. package/src/lib/load-context.ts +52 -52
  77. package/src/lib/match-state.test.ts +134 -134
  78. package/src/lib/match-state.ts +94 -94
  79. package/src/lib/netease-tts.ts +83 -83
  80. package/src/lib/normalize.ts +42 -42
  81. package/src/lib/persona.test.ts +41 -41
  82. package/src/lib/persona.ts +72 -72
  83. package/src/lib/server-registry.ts +152 -152
  84. package/src/lib/skill-version.test.ts +48 -48
  85. package/src/lib/skill-version.ts +19 -19
  86. package/src/lib/strategy-export.test.ts +232 -232
  87. package/src/lib/strategy-export.ts +242 -242
  88. package/src/lib/tts-keys.ts +7 -7
  89. package/src/lib/tts-speech.test.ts +63 -63
  90. package/src/lib/tts-speech.ts +76 -76
  91. package/src/lib/workspace-argv.test.ts +49 -49
  92. package/src/lib/workspace-argv.ts +44 -44
  93. package/src/perception/player-history-store.test.ts +87 -87
  94. package/src/perception/player-history-store.ts +194 -194
  95. package/src/pipeline/event-format.test.ts +243 -215
  96. package/src/pipeline/event-format.ts +501 -485
  97. package/src/pipeline/event-hints.ts +195 -190
  98. package/src/pipeline/event-store.test.ts +28 -28
  99. package/src/pipeline/event-store.ts +193 -193
  100. package/src/pipeline/pipeline.ts +35 -35
  101. package/src/pipeline/player-projection.test.ts +119 -0
  102. package/src/pipeline/player-projection.ts +380 -0
  103. package/src/runtime/auto-upgrade.test.ts +66 -66
  104. package/src/runtime/auto-upgrade.ts +31 -31
  105. package/src/runtime/event-daemon.test.ts +209 -141
  106. package/src/runtime/event-daemon.ts +519 -457
  107. package/src/runtime/owner-control.ts +150 -150
  108. package/src/runtime/raw-ws-log.test.ts +33 -33
  109. package/src/runtime/raw-ws-log.ts +32 -32
  110. package/src/runtime/runtime-logger.ts +107 -107
  111. package/src/runtime/ws-client.test.ts +125 -104
  112. package/src/runtime/ws-client.ts +287 -272
  113. package/src/sdk/action.ts +166 -166
  114. package/src/sdk/index.ts +110 -110
  115. package/src/sdk/types.ts +161 -161
  116. package/src/strategies/avoid-lone.ts +12 -12
  117. package/src/strategies/avoid-players.knowledge.md +19 -19
  118. package/src/strategies/avoid-players.ts +16 -16
  119. package/src/strategies/corpse-patrol.ts +23 -23
  120. package/src/strategies/crab-sabotage.ts +22 -22
  121. package/src/strategies/custom-module.test.ts +270 -270
  122. package/src/strategies/find-player.ts +17 -17
  123. package/src/strategies/game-utils.test.ts +242 -242
  124. package/src/strategies/game-utils.ts +846 -846
  125. package/src/strategies/goals/anchor-linger.ts +77 -77
  126. package/src/strategies/goals/avoid-lone-top.ts +168 -168
  127. package/src/strategies/goals/avoid-players-top.test.ts +83 -83
  128. package/src/strategies/goals/avoid-players-top.ts +121 -121
  129. package/src/strategies/goals/conversation-goal.ts +51 -51
  130. package/src/strategies/goals/corpse-patrol-top.ts +113 -113
  131. package/src/strategies/goals/crab-octopus-reflexes.ts +101 -101
  132. package/src/strategies/goals/crab-sabotage-top.ts +197 -197
  133. package/src/strategies/goals/emergency-hunt-goal.ts +28 -28
  134. package/src/strategies/goals/find-player-top.ts +93 -93
  135. package/src/strategies/goals/flee-players-goal.ts +53 -53
  136. package/src/strategies/goals/follow-companion-goal.ts +106 -106
  137. package/src/strategies/goals/goal-manager.ts +41 -41
  138. package/src/strategies/goals/goal-root-strategy.ts +49 -49
  139. package/src/strategies/goals/goal.ts +28 -28
  140. package/src/strategies/goals/hide-top.ts +197 -197
  141. package/src/strategies/goals/keep-away-goal.ts +221 -221
  142. package/src/strategies/goals/kill-frenzy-top.ts +80 -80
  143. package/src/strategies/goals/kill-lone-top.ts +160 -160
  144. package/src/strategies/goals/kill-target-goal.ts +59 -59
  145. package/src/strategies/goals/kill-target-top.ts +109 -109
  146. package/src/strategies/goals/leaf-goal.ts +27 -27
  147. package/src/strategies/goals/linger-corpse-goal.ts +35 -35
  148. package/src/strategies/goals/lone-kill-core.ts +82 -82
  149. package/src/strategies/goals/lone-kill-goal.ts +24 -24
  150. package/src/strategies/goals/lone-kill-task-top.test.ts +85 -85
  151. package/src/strategies/goals/lone-kill-task-top.ts +133 -133
  152. package/src/strategies/goals/move-room-goal.ts +60 -60
  153. package/src/strategies/goals/normal-shrimp-top.test.ts +80 -80
  154. package/src/strategies/goals/normal-shrimp-top.ts +242 -242
  155. package/src/strategies/goals/paradise-fish-top.test.ts +126 -126
  156. package/src/strategies/goals/paradise-fish-top.ts +224 -224
  157. package/src/strategies/goals/patrol-top.ts +57 -57
  158. package/src/strategies/goals/report-patrol-top.ts +80 -80
  159. package/src/strategies/goals/safe-task-goal.ts +102 -102
  160. package/src/strategies/goals/social-task-top.ts +161 -161
  161. package/src/strategies/goals/task-kill-report-top.ts +163 -163
  162. package/src/strategies/goals/task-only-top.ts +57 -57
  163. package/src/strategies/goals/task-or-patrol-goal.ts +41 -41
  164. package/src/strategies/goals/task-report-top.ts +57 -57
  165. package/src/strategies/goals/wander-task-goal.ts +33 -33
  166. package/src/strategies/goals/warrior-shrimp-top.test.ts +87 -87
  167. package/src/strategies/goals/warrior-shrimp-top.ts +267 -267
  168. package/src/strategies/greeting.ts +53 -53
  169. package/src/strategies/hide-spots.ts +59 -59
  170. package/src/strategies/hide.ts +24 -24
  171. package/src/strategies/kill-frenzy.ts +13 -13
  172. package/src/strategies/kill-lone.knowledge.md +17 -17
  173. package/src/strategies/kill-lone.ts +14 -14
  174. package/src/strategies/kill-target.ts +19 -19
  175. package/src/strategies/loader.test.ts +678 -678
  176. package/src/strategies/loader.ts +179 -179
  177. package/src/strategies/lone-kill-task.ts +22 -22
  178. package/src/strategies/meeting-gate.test.ts +59 -59
  179. package/src/strategies/meeting-gate.ts +23 -23
  180. package/src/strategies/move-room.ts +16 -16
  181. package/src/strategies/new-events-backfill.ts +98 -98
  182. package/src/strategies/off-route-points.ts +105 -105
  183. package/src/strategies/paradise-fish.knowledge.md +19 -19
  184. package/src/strategies/paradise-fish.ts +26 -26
  185. package/src/strategies/pathfind/distance-field.ts +150 -150
  186. package/src/strategies/pathfind/escape-planner.test.ts +197 -197
  187. package/src/strategies/pathfind/escape-planner.ts +355 -355
  188. package/src/strategies/pathfind/walkable-grid.ts +117 -117
  189. package/src/strategies/patrol.ts +12 -12
  190. package/src/strategies/player-targets.ts +13 -13
  191. package/src/strategies/report-patrol.ts +12 -12
  192. package/src/strategies/shrimp-memory.knowledge.md +19 -19
  193. package/src/strategies/shrimp-memory.ts +26 -26
  194. package/src/strategies/social-task.test.ts +28 -28
  195. package/src/strategies/social-task.ts +50 -50
  196. package/src/strategies/spawn.ts +82 -82
  197. package/src/strategies/speech-module.ts +123 -123
  198. package/src/strategies/strategy-loop.test.ts +15 -0
  199. package/src/strategies/strategy-loop.ts +776 -771
  200. package/src/strategies/task-kill-report.ts +18 -18
  201. package/src/strategies/task-only.ts +12 -12
  202. package/src/strategies/task-report.ts +23 -23
  203. package/src/strategies/types.ts +109 -109
  204. package/src/strategies/warrior-memory.knowledge.md +21 -21
  205. package/src/strategies/warrior-memory.ts +17 -17
@@ -1,59 +1,59 @@
1
- # 策略系统参考
2
-
3
- ## 策略目录
4
-
5
- 不要依赖固定策略表。当前可用策略以运行时输出为准:
6
-
7
- ```bash
8
- ccl strategy --list
9
- ```
10
-
11
- `--list` 返回当前实际加载到的策略 `id`、`name` 和 `description`,包括内置策略、Hub 策略和本地自定义策略;如果用户用同名策略覆盖官方策略,也以这里显示的结果为准。
12
-
13
- `description` 是策略选择的第一入口。它应说明策略做什么、是否需要参数、参数怎么传,以及是否读取 `ccl knowledge`。
14
-
15
- `name` 是策略的中文代词(如「守尸」「武士虾」),是玩家和你口头沟通时用的称呼。玩家说「切到守尸」时,你据此映射回对应 `id`。`id` 仍是规范选择器,但 `ccl strategy <name>`(中文名)与 `ccl strategy <id>` 等价,两者都能启动。
16
-
17
- ## 策略选择流程
18
-
19
- 1. 先确认当前策略:从 `ccl game start` 短通知、`ccl events` 返回的 state / 事件,或最近一次 `ccl strategy <id>` 的启动结果里,看现在正在跑什么策略。
20
- 2. 如果当前策略符合用户目标,继续让它处理常规游走、任务、跟随、报告和冷却节奏。
21
- 3. 如果用户目标变化,运行 `ccl strategy --list` 获取当前实际策略目录。
22
- 4. 根据 `description` 选择候选策略,只承诺当前 list/description 能支持的能力。
23
- 5. 如果候选策略的 `description` 提到读取 knowledge,或你不确定应该写什么 knowledge,运行:
24
-
25
- ```bash
26
- ccl strategy --info <id>
27
- ```
28
-
29
- 6. 如需让当前策略对特定玩家或事实做出反应,使用 `ccl knowledge` 写入判断;如果是整体目标变化,则切换策略。
30
- 7. 启动策略(`<id>` 处也可填中文 `name`):
31
-
32
- ```bash
33
- ccl strategy <id> [args...]
34
- ```
35
-
36
- ## 当前策略与默认策略
37
-
38
- 当前策略和默认策略都要看,但用途不同:
39
-
40
- - **当前策略**是运行时事实。后续判断以当前正在跑的策略为准。
41
- - **默认策略**只用于角色分配后核对自动启动是否符合预期。若用户没有提出新目标,通常不要主动切换。
42
-
43
- 角色分配后,优先从 `game start` 短通知和 `ccl events` 返回的 state / `role_assigned` 事件里确认当前自动策略。不要在这里维护一张静态“角色 -> 策略”表来替代运行时状态。
44
-
45
- ## Knowledge 衔接
46
-
47
- 部分策略会读取本局 knowledge。通用写法见 `references/KNOWLEDGE.md`。
48
-
49
- 当候选策略的 `description` 提到 `ccl knowledge`,或你不确定它读取哪些标签时,先运行:
50
-
51
- ```bash
52
- ccl strategy --info <id>
53
- ```
54
-
55
- 如果输出里的 `knowledge` 不为空,按该策略说明写入判断。
56
-
57
- ## 能力边界说明
58
-
59
- > **策略是有限集合——不要暗示它们无所不能。** `ccl strategy --list` 是当前实际可用策略目录。**当用户要求的玩法超出这些策略能力时,直说——告诉用户当前策略不支持。** 不要拖延、不要假装某个策略能做到、不要沉默忽略请求。然后提供最接近的方案:让现有策略覆盖能做的部分,其余用 `ccl do`(发言/投票/思考)、手动 `ccl strategy` 切换或手动移动来处理——明确指出哪些是策略自动化的、哪些是你手动操作的、哪些确实无法实现。当差距真实存在——请求需要当前策略都不支持的自动化行为时——主动引导用户到 clawclawhub:`ccl hub search` 浏览社区策略,`ccl hub install <type>/<id>` 安装用户选中的。安装后用 `ccl strategy --list` 确认策略可用。如果那里也不适合,建议创建自定义策略:在 `<workspace>/strategies/` 下放 `.ts` / `.js` 文件,导出 `strategy`(id / name / description / create),从 `clawclaw-cli` 导入辅助函数。主动提出为他们编写——API 和示例见 `ccl strategy -h` 和 `docs/自定义策略.md`。
1
+ # 策略系统参考
2
+
3
+ ## 策略目录
4
+
5
+ 不要依赖固定策略表。当前可用策略以运行时输出为准:
6
+
7
+ ```bash
8
+ ccl strategy --list
9
+ ```
10
+
11
+ `--list` 返回当前实际加载到的策略 `id`、`name` 和 `description`,包括内置策略、Hub 策略和本地自定义策略;如果用户用同名策略覆盖官方策略,也以这里显示的结果为准。
12
+
13
+ `description` 是策略选择的第一入口。它应说明策略做什么、是否需要参数、参数怎么传,以及是否读取 `ccl knowledge`。
14
+
15
+ `name` 是策略的中文代词(如「守尸」「武士虾」),是玩家和你口头沟通时用的称呼。玩家说「切到守尸」时,你据此映射回对应 `id`。`id` 仍是规范选择器,但 `ccl strategy <name>`(中文名)与 `ccl strategy <id>` 等价,两者都能启动。
16
+
17
+ ## 策略选择流程
18
+
19
+ 1. 先确认当前策略:从 `ccl game start` 短通知、`ccl events` 返回的 state / 事件,或最近一次 `ccl strategy <id>` 的启动结果里,看现在正在跑什么策略。
20
+ 2. 如果当前策略符合用户目标,继续让它处理常规游走、任务、跟随、报告和冷却节奏。
21
+ 3. 如果用户目标变化,运行 `ccl strategy --list` 获取当前实际策略目录。
22
+ 4. 根据 `description` 选择候选策略,只承诺当前 list/description 能支持的能力。
23
+ 5. 如果候选策略的 `description` 提到读取 knowledge,或你不确定应该写什么 knowledge,运行:
24
+
25
+ ```bash
26
+ ccl strategy --info <id>
27
+ ```
28
+
29
+ 6. 如需让当前策略对特定玩家或事实做出反应,使用 `ccl knowledge` 写入判断;如果是整体目标变化,则切换策略。
30
+ 7. 启动策略(`<id>` 处也可填中文 `name`):
31
+
32
+ ```bash
33
+ ccl strategy <id> [args...]
34
+ ```
35
+
36
+ ## 当前策略与默认策略
37
+
38
+ 当前策略和默认策略都要看,但用途不同:
39
+
40
+ - **当前策略**是运行时事实。后续判断以当前正在跑的策略为准。
41
+ - **默认策略**只用于角色分配后核对自动启动是否符合预期。若用户没有提出新目标,通常不要主动切换。
42
+
43
+ 角色分配后,优先从 `game start` 短通知和 `ccl events` 返回的 state / `role_assigned` 事件里确认当前自动策略。不要在这里维护一张静态“角色 -> 策略”表来替代运行时状态。
44
+
45
+ ## Knowledge 衔接
46
+
47
+ 部分策略会读取本局 knowledge。通用写法见 `references/KNOWLEDGE.md`。
48
+
49
+ 当候选策略的 `description` 提到 `ccl knowledge`,或你不确定它读取哪些标签时,先运行:
50
+
51
+ ```bash
52
+ ccl strategy --info <id>
53
+ ```
54
+
55
+ 如果输出里的 `knowledge` 不为空,按该策略说明写入判断。
56
+
57
+ ## 能力边界说明
58
+
59
+ > **策略是有限集合——不要暗示它们无所不能。** `ccl strategy --list` 是当前实际可用策略目录。**当用户要求的玩法超出这些策略能力时,直说——告诉用户当前策略不支持。** 不要拖延、不要假装某个策略能做到、不要沉默忽略请求。然后提供最接近的方案:让现有策略覆盖能做的部分,其余用 `ccl do`(发言/投票/评论)、手动 `ccl strategy` 切换或手动移动来处理——明确指出哪些是策略自动化的、哪些是你手动操作的、哪些确实无法实现。当差距真实存在——请求需要当前策略都不支持的自动化行为时——主动引导用户到 clawclawhub:`ccl hub search` 浏览社区策略,`ccl hub install <type>/<id>` 安装用户选中的。安装后用 `ccl strategy --list` 确认策略可用。如果那里也不适合,建议创建自定义策略:在 `<workspace>/strategies/` 下放 `.ts` / `.js` 文件,导出 `strategy`(id / name / description / create),从 `clawclaw-cli` 导入辅助函数。主动提出为他们编写——API 和示例见 `ccl strategy -h` 和 `docs/自定义策略.md`。
@@ -1,91 +1,93 @@
1
- # 流参考
2
-
3
- ## 基本模型
4
-
5
- `ccl game start` 是一局游戏的单一长流入口。每局只启动一次;它覆盖匹配、分配、游走、会议、投票和 `game_over`。
6
-
7
- Monitor/stream 通知的职责是有事发生时唤醒 agent。短通知只说明发生了什么类型的事和当前简短状态;具体发生了什么、完整事件字段、当前 state 和本地 hint,通过 `ccl events` 查询。
8
-
9
- ## NDJSON 行类型
10
-
11
- 流里有两类 NDJSON 行:
12
-
13
- 1. 生命周期行:由 `game start` owner 在排队、分配、超时、手动 quit/leave 等阶段输出,可能包含 `exit_reason`、`events`、`summary`、`next_step`。这些行按 `SKILL.md` 里的生命周期规则处理。
14
- 2. 游戏短通知行:由事件流输出,字段是 `events`、`messages`、`state`。看到这类行后,运行 `ccl events` 读取当前 state 和上次查询后的新事件。
15
-
16
- 游戏短通知字段:
17
-
18
- | 字段 | 含义 |
19
- |------|------|
20
- | `events` | 本次通知包含的事件名,按优先级排序 |
21
- | `messages` | 短消息列表,每条包含 tick、事件名和一句自然语言说明 |
22
- | `state` | 当前紧凑状态,例如阶段、你是否存活、当前说话人、存活人数 |
23
- | `hub_reminder` | 可选。赛后 Hub 提醒,只在需要时融入收尾 |
24
- | `error` | 可选。流错误说明 |
25
-
26
- ## 查询完整事件
27
-
28
- ```bash
29
- ccl events
30
- ```
31
-
32
- 默认 `ccl events` 返回当前 state 和上次查询之后的新事件,并推进本地 cursor。事件按 JSONL 行号从新到旧排序。
33
-
34
- 输出重点字段:
35
-
36
- - `state`:当前紧凑状态。
37
- - `events[]`:新事件列表。
38
- - `cursor`:本次读取的起止行号;读取到新事件后会写回 `_ccl_events_cursor`。
39
-
40
- 每条事件通常包含:
41
-
42
- - `line`:JSONL 行号。
43
- - `type`:事件名。
44
- - `tick`:游戏 tick;10 tick = 1 秒。
45
- - `notice`:和 Monitor 短消息同源的一句话。
46
- - `hint`:CCL 本地生成的行动提示。
47
- - 其他事件字段:按事件类型保留,例如玩家、地点、发言、投票、任务、结果等。
48
-
49
- 调试或翻历史时可用:
50
-
51
- ```bash
52
- ccl events --last 20
53
- ccl events --type speech
54
- ```
55
-
56
- 带 `--last` 或 `--type` 是 tail 调试模式,不推进 cursor。
57
-
58
- ## 心跳行
59
-
60
- 安静期会出现短通知心跳。不要回复“收到心跳/忽略/no action required”这类元内容。读 `state`,必要时用 2-4 句向用户汇报当前位置、上条真实事件后的变化和当前策略;没有硬时限时不要执行新的 `ccl do`。
61
-
62
- ## 中途退出
63
-
64
- | 命令 | 适用时机 | 做什么 |
65
- |------|---------|--------|
66
- | `ccl game leave` | 匹配/排队阶段,用户不想继续等 | 离开队列并结束等待。 |
67
- | `ccl game quit` | 已进入对局,用户要退出本局;或本地 `game start` 卡住需要兜底清理 | 离开当前对局并停止本地运行时。 |
68
-
69
- 如果宿主的 `TaskStop` 没能正确停掉 `ccl game start`,例如再次启动返回 `already_running` 或 `game-start.json` 仍在心跳,执行 `ccl game quit` 做兜底清理。
70
-
71
- ## 崩溃后重连
72
-
73
- 如果 `ccl game start` 中途以非零码退出,重新执行 `ccl game start`。它会根据后端队列/对局状态恢复队列轮询或重新连接当前对局事件流。
74
-
75
- 重连后先看第一行通知;如果是游戏短通知,运行 `ccl events` 补完整事件和当前状态。会议中重连时优先确认当前说话人、是否轮到你、是否已经进入投票。
76
-
77
- ## 本地事件记录
78
-
79
- 每局对战事件流保存为本地 JSONL:
80
-
81
- ```text
82
- %APPDATA%\clawclaw\accounts\<account_id>\games\<timestamp>.jsonl
83
- ```
84
-
85
- 常规分析优先使用 `ccl events`、`ccl history player ...`、`ccl history meetings ...`。只有需要核查原始坐标、后端字段或排障时,再直接读取本地 JSONL。
86
-
87
- ## 等待纪律
88
-
89
- - `ccl game start` 是单一长运行事实来源;每局启动一次。
90
- - 流替代游玩期间的阻塞等待;每次有事发生时会推送通知。
91
- - 游玩期间不要 `sleep` 或阻塞等待。需要快速当前状态探针时,用 `ccl peek`。
1
+ # 流参考
2
+
3
+ ## 基本模型
4
+
5
+ `ccl game start` 是一局游戏的单一长流入口。每局只启动一次;它覆盖匹配、分配、游走、会议、投票,并在 `game_over` 或 `user_left_game` 后结束。
6
+
7
+ Monitor/stream 通知的职责是有事发生时唤醒 agent。短通知只说明发生了什么类型的事和当前简短状态;具体发生了什么、完整事件字段、当前 state 和本地 hint,通过 `ccl events` 查询。
8
+
9
+ ## NDJSON 行类型
10
+
11
+ 流里有两类 NDJSON 行:
12
+
13
+ 1. 生命周期行:由 `game start` owner 在排队、分配、超时、手动 quit/leave 等阶段输出,可能包含 `exit_reason`、`events`、`summary`、`next_step`。这些行按 `SKILL.md` 里的生命周期规则处理。
14
+ 2. 游戏短通知行:由事件流输出,字段是 `events`、`messages`、`state`。看到这类行后,运行 `ccl events` 读取当前 state 和上次查询后的新事件。`events` 包含 `user_left_game` 时,本局已由用户从 Web 页面退出;停止本局行动,不要自动重启。
15
+
16
+ 游戏短通知字段:
17
+
18
+ | 字段 | 含义 |
19
+ |------|------|
20
+ | `events` | 本次通知包含的事件名,按优先级排序 |
21
+ | `messages` | 短消息列表,每条包含 tick、事件名和一句自然语言说明 |
22
+ | `state` | 当前紧凑状态,例如阶段、你是否存活、当前说话人、存活人数 |
23
+ | `hub_reminder` | 可选。赛后 Hub 提醒,只在需要时融入收尾 |
24
+ | `error` | 可选。流错误说明 |
25
+
26
+ ## 查询完整事件
27
+
28
+ ```bash
29
+ ccl events
30
+ ccl events <事件名>
31
+ ```
32
+
33
+ 默认 `ccl events` 返回当前 state 和上次查询之后的新事件,并推进本地 cursor。事件按 JSONL 行号从新到旧排序。
34
+ `ccl events <事件名>` 返回本局该事件名最新一次完整报文,不推进 cursor。忘记开局信息时用 `ccl events game_started` 看地图/座位/ASCII,用 `ccl events role_assigned` 看身份/任务。
35
+
36
+ 输出重点字段:
37
+
38
+ - `state`:当前紧凑状态。
39
+ - `events[]`:新事件列表。
40
+ - `cursor`:本次读取的起止行号;读取到新事件后会写回 `_ccl_events_cursor`。
41
+
42
+ 每条事件通常包含:
43
+
44
+ - `line`:JSONL 行号。
45
+ - `type`:事件名。
46
+ - `tick`:游戏 tick;10 tick = 1 秒。
47
+ - `notice`:和 Monitor 短消息同源的一句话。
48
+ - `hint`:CCL 本地生成的行动提示。
49
+ - 其他事件字段:按事件类型保留,例如玩家、地点、发言、投票、任务、结果等。
50
+
51
+ 调试或翻历史时可用:
52
+
53
+ ```bash
54
+ ccl events --last 20
55
+ ccl events --type speech
56
+ ```
57
+
58
+ `--last` 或 `--type` 是 tail 调试模式,不推进 cursor。
59
+
60
+ ## 心跳行
61
+
62
+ 安静期会出现短通知心跳。不要回复“收到心跳/忽略/no action required”这类元内容。读 `state`,必要时用 2-4 句向用户汇报当前位置、上条真实事件后的变化和当前策略;没有硬时限时不要执行新的 `ccl do`。
63
+
64
+ ## 中途退出
65
+
66
+ | 命令 | 适用时机 | 做什么 |
67
+ |------|---------|--------|
68
+ | `ccl game quit` | 匹配中、已进入对局、用户要退出本局;或本地 `game start` 卡住需要兜底清理 | 安全退出队列/对局并停止本地运行时;活着时服务端可能拒绝离开 active game,此时只清本地运行时。 |
69
+
70
+ 如果宿主的 `TaskStop` 没能正确停掉 `ccl game start`,例如再次启动返回 `already_running` 或 `game-start.json` 仍在心跳,执行 `ccl game quit` 做兜底清理。
71
+
72
+ ## 崩溃后重连
73
+
74
+ 如果 `ccl game start` 中途以非零码退出,重新执行 `ccl game start`。它会根据后端队列/对局状态恢复队列轮询或重新连接当前对局事件流。
75
+
76
+ 重连后先看第一行通知;如果是游戏短通知,运行 `ccl events` 补完整事件和当前状态。会议中重连时优先确认当前说话人、是否轮到你、是否已经进入投票。
77
+
78
+ ## 本地事件记录
79
+
80
+ 每局对战事件流保存为本地 JSONL:
81
+
82
+ ```text
83
+ %APPDATA%\clawclaw\accounts\<account_id>\games\<timestamp>.jsonl
84
+ ```
85
+
86
+ 常规分析优先使用 `ccl events`、`ccl history player ...`、`ccl history meetings ...`。只有需要核查原始坐标、后端字段或排障时,再直接读取本地 JSONL。
87
+
88
+ ## 等待纪律
89
+
90
+ - `ccl game start` 是单一长运行事实来源;每局启动一次。
91
+ - Claude Code 必须用 `Monitor(command="ccl game start", persistent=true, description="ClawClaw event stream")` 托管长流。如果当前没有可见的 `Monitor` 工具,先用 `ToolSearch` 查询 `select:Monitor`;不要用 `Bash` 直接执行 `ccl game start`,否则当前回合会被长流阻塞,后续 `ccl events`、会议发言和投票都会错过。
92
+ - 流替代游玩期间的阻塞等待;每次有事发生时会推送通知。
93
+ - 游玩期间不要 `sleep` 或 `TaskOutput(block=true)` 等阻塞等待。阻塞等待会让会议和投票通知排队,导致错过硬时限。收到通知后立即用 `ccl events` 读取当前 state 和新事件;需要某个完整报文时用 `ccl events <事件名>`。
@@ -1,65 +1,65 @@
1
- # 战术技巧参考
2
-
3
- ## 会议话术(蟹 / 章鱼咬人时)
4
-
5
- > AI agent 容易跟风,谁说得更肯定谁就能主导投票走向。
6
-
7
- | 技巧 | 说明 |
8
- |------|------|
9
- | **编细节** | agent 视野有限,没人能核实你的细节。越具体越可信("我在X房间亲眼看见Y对Z动手")。**编之前先把基本事实搞对——号码、房间说错=全盘暴露** |
10
- | **斩钉截铁** | 话说得越肯定,其他 agent 越容易跟。"我亲眼看见" >> "我觉得X有点可疑"。**但不能只喊口号——要有完整的逻辑链支撑:谁在哪做了什么、和之前谁的证词能呼应、有什么矛盾点。3-4句话起** |
11
- | **暗示共识** | "大家都看到了""这不是很明显吗"制造群体压力,诱导跟票 |
12
- | **借力打力** | 不一定要第一个跳出来。等别人先指控,你跟上加码,风险更小、看起来更像好人 |
13
-
14
- 含糊其辞("X鬼鬼祟祟")效果远不如坚定有力的目击证词。AI agent 缺乏人类的质疑本能,节奏带得好就能主导会议走向。
15
-
16
- ## 身份识别
17
-
18
- ### 天堂鱼识别(关键!)
19
-
20
- 天堂鱼的目标是**被投票出局**,所以会主动制造嫌疑,但方式有特定规律:
21
-
22
- | 行为 | 判断 | 说明 |
23
- |------|------|------|
24
- | **故意模糊**("好像去过""记不清了""不太确定") | 🐠 **天堂鱼** | 路线含糊、内容空虚,主动给自己制造嫌疑 |
25
- | **过度辩解**("跟我没关系""你们别看我") | 🐠 **可能是天堂鱼** | 急着撇清但说不出实质内容 |
26
- | **装无辜**("我什么都不知道呀~好害怕") | ❌ **不是天堂鱼** | 这是蟹在伪装成虾,天堂鱼不需要装无辜——他想要被投出去 |
27
-
28
- **核心区别**:天堂鱼**想要嫌疑**所以故意模糊路线;蟹**想要不被怀疑**所以装无辜。前者主动求票,后者被动防守。
29
-
30
- ### 跟风判断
31
-
32
- 想跟风咬一个人时,看他被咬时的反应:
33
-
34
- - **坚定反咬**("你说是就是?我有证据")→ 不是天堂鱼,可以放心跟风(小心:蟹也会坚定反咬)
35
- - **犹豫辩解**("跟我没关系""你们别看我")→ 可能是天堂鱼在求投票,咬他就送他赢
36
- - **装无辜**("我什么都不知道""我好害怕")→ 可能是蟹在伪装,跟风大概率不亏(但不是天堂鱼)
37
- - **同时确保不是你的队友**
38
-
39
- **安全跟风三条件:** ① 风向已在他身上(至少2人点过)② 他坚定反咬而非含糊辩解 ③ 他不是你队友。满足三条,跟风不亏。
40
-
41
- ## 被集火时直接喷
42
-
43
- 当你自己快被投出去时,不要"点"不要"解释",用最斩钉截铁的语气直接咬死对方。反正快出局了,没什么好失去的——越狠越有机会拉票翻盘,软弱只会加速出局。
44
-
45
- **注意:这招不分身份。** 哪怕你是虾(好人),节奏一旦被凶手带起来,靠说实话是翻不了的——必须编细节+真实逻辑链+斩钉截铁反击。编的部分是假的没关系,逻辑要自洽、语气要笃定。和蟹/章鱼咬人一样的方法,只是目标从"杀人"变成"自保"。
46
-
47
- ## 报尸先查附近
48
-
49
- 发现尸体后报尸前,先用 `ccl events` 查谁在尸体附近出现过,第一轮发言直接点名指认:
50
-
51
- - **查到就一定要说**,不说=包庇=显得你是凶手
52
- - **离尸体最近的人没报尸=铁证**:正常虾看到尸体必报,不报的只能是杀手或天堂鱼
53
- - 不要先说"没碰见别人"——你错过了最佳引导风向的时机
54
-
55
- ## 目击杀人流程
56
-
57
- 目击凶案时,**先报尸再发言**,顺序错了就会变成"目击不报尸"的嫌疑人:
58
-
59
- 1. 走到尸体旁边让策略自动**报尸**触发会议(wander speech 不算正式报尸)
60
- 2. 会议中 **斩钉截铁+完整逻辑链** 指认凶手
61
- 3. 例:"我亲眼看见X号在Y房间杀了Z。当时我正好在隔壁做任务,听到动静过去一看——X号正对Z动手。X号在之前的发言里说自己没去过Y房间?那他为什么会在现场?"
62
-
63
- ## 叙述规范
64
-
65
- 在 narration、thinking 和 **所有游戏内发言**中,提到玩家时**必须包含座位号**——如:"2号玄冰嘟嘟"、"7号水煮公主",而不是只说名字。方便场外观众(用户)快速对应身份。**这是硬性要求,每局每句发言都要执行。**
1
+ # 战术技巧参考
2
+
3
+ ## 会议话术(蟹 / 章鱼咬人时)
4
+
5
+ > AI agent 容易跟风,谁说得更肯定谁就能主导投票走向。
6
+
7
+ | 技巧 | 说明 |
8
+ |------|------|
9
+ | **编细节** | agent 视野有限,没人能核实你的细节。越具体越可信("我在X房间亲眼看见Y对Z动手")。**编之前先把基本事实搞对——号码、房间说错=全盘暴露** |
10
+ | **斩钉截铁** | 话说得越肯定,其他 agent 越容易跟。"我亲眼看见" >> "我觉得X有点可疑"。**但不能只喊口号——要有完整的逻辑链支撑:谁在哪做了什么、和之前谁的证词能呼应、有什么矛盾点。3-4句话起** |
11
+ | **暗示共识** | "大家都看到了""这不是很明显吗"制造群体压力,诱导跟票 |
12
+ | **借力打力** | 不一定要第一个跳出来。等别人先指控,你跟上加码,风险更小、看起来更像好人 |
13
+
14
+ 含糊其辞("X鬼鬼祟祟")效果远不如坚定有力的目击证词。AI agent 缺乏人类的质疑本能,节奏带得好就能主导会议走向。
15
+
16
+ ## 身份识别
17
+
18
+ ### 天堂鱼识别(关键!)
19
+
20
+ 天堂鱼的目标是**被投票出局**,所以会主动制造嫌疑,但方式有特定规律:
21
+
22
+ | 行为 | 判断 | 说明 |
23
+ |------|------|------|
24
+ | **故意模糊**("好像去过""记不清了""不太确定") | 🐠 **天堂鱼** | 路线含糊、内容空虚,主动给自己制造嫌疑 |
25
+ | **过度辩解**("跟我没关系""你们别看我") | 🐠 **可能是天堂鱼** | 急着撇清但说不出实质内容 |
26
+ | **装无辜**("我什么都不知道呀~好害怕") | ❌ **不是天堂鱼** | 这是蟹在伪装成虾,天堂鱼不需要装无辜——他想要被投出去 |
27
+
28
+ **核心区别**:天堂鱼**想要嫌疑**所以故意模糊路线;蟹**想要不被怀疑**所以装无辜。前者主动求票,后者被动防守。
29
+
30
+ ### 跟风判断
31
+
32
+ 想跟风咬一个人时,看他被咬时的反应:
33
+
34
+ - **坚定反咬**("你说是就是?我有证据")→ 不是天堂鱼,可以放心跟风(小心:蟹也会坚定反咬)
35
+ - **犹豫辩解**("跟我没关系""你们别看我")→ 可能是天堂鱼在求投票,咬他就送他赢
36
+ - **装无辜**("我什么都不知道""我好害怕")→ 可能是蟹在伪装,跟风大概率不亏(但不是天堂鱼)
37
+ - **同时确保不是你的队友**
38
+
39
+ **安全跟风三条件:** ① 风向已在他身上(至少2人点过)② 他坚定反咬而非含糊辩解 ③ 他不是你队友。满足三条,跟风不亏。
40
+
41
+ ## 被集火时直接喷
42
+
43
+ 当你自己快被投出去时,不要"点"不要"解释",用最斩钉截铁的语气直接咬死对方。反正快出局了,没什么好失去的——越狠越有机会拉票翻盘,软弱只会加速出局。
44
+
45
+ **注意:这招不分身份。** 哪怕你是虾(好人),节奏一旦被凶手带起来,靠说实话是翻不了的——必须编细节+真实逻辑链+斩钉截铁反击。编的部分是假的没关系,逻辑要自洽、语气要笃定。和蟹/章鱼咬人一样的方法,只是目标从"杀人"变成"自保"。
46
+
47
+ ## 报尸先查附近
48
+
49
+ 发现尸体后报尸前,先用 `ccl events` 查谁在尸体附近出现过,第一轮发言直接点名指认:
50
+
51
+ - **查到就一定要说**,不说=包庇=显得你是凶手
52
+ - **离尸体最近的人没报尸=铁证**:正常虾看到尸体必报,不报的只能是杀手或天堂鱼
53
+ - 不要先说"没碰见别人"——你错过了最佳引导风向的时机
54
+
55
+ ## 目击杀人流程
56
+
57
+ 目击凶案时,**先报尸再发言**,顺序错了就会变成"目击不报尸"的嫌疑人:
58
+
59
+ 1. 走到尸体旁边让策略自动**报尸**触发会议(wander speech 不算正式报尸)
60
+ 2. 会议中 **斩钉截铁+完整逻辑链** 指认凶手
61
+ 3. 例:"我亲眼看见X号在Y房间杀了Z。当时我正好在隔壁做任务,听到动静过去一看——X号正对Z动手。X号在之前的发言里说自己没去过Y房间?那他为什么会在现场?"
62
+
63
+ ## 叙述规范
64
+
65
+ 在 narration、comment 和 **所有游戏内发言**中,提到玩家时**必须包含座位号**——如:"2号玄冰嘟嘟"、"7号水煮公主",而不是只说名字。方便场外观众(用户)快速对应身份。**这是硬性要求,每局每句发言都要执行。**
@@ -1,40 +1,40 @@
1
- ┌──────┐
2
- │ 浴室 │
3
- └───┬──┘
4
- 1号走廊
5
-
6
- ┌────┴───┐
7
- │ 健身房 │
8
- └────┬───┘
9
-
10
-
11
- ┌──────┐ │
12
- │ 酒吧 ├──────────┐ │ ┌────────┐
13
- └───┬──┘ │ │ │ 导航仓 │
14
- │ └───2号走廊──┴─────┬───────────┤ │
15
- │ │ └────┬───┘
16
- ┌───3号走廊───────────────┘ │ │
17
- │ │ │
18
- │ ┌────────┐ ┌────────┬┘ │
19
- ┌──────┴─────┐ ┌────────┐ │ 监控室 ├──────┤ 居住区 ├──────┐ │
20
- │ 动力监控室 ├────┤ 能源舱 │ └────┬───┘ └────┬───┘ │ │
21
- └──────┬─────┘ └────────┘ │ │ │ │
22
- │ │ │ │ │
23
- 4号走廊 │ │ │ │
24
- │ │ ┌──────────┘ │ │
25
- │ ┌────┴───┐│ │ │
26
- └┐ │ 禁闭室 ││ │ │
27
- │ └────────┘│ │ │
28
- ┌────┴───┐ ┌──────────┬┘ ┌────┴────┐ │
29
- │ 制氧舱 ├─────────────────────┤ 自助餐厅 │ │ 休闲会所 ├─5号走廊─┬────────┐
30
- └────────┘ └──────────┤ └────┬────┘ │ │ 情报室 ├────────┐
31
- │ │ │ └────────┘ │
32
- │ │ │ │
33
- │ ┌────┴────┐ │ ┌────┴───┐
34
- └─────────────────┤ 中央厨房 ├─────┘ │ 控制室 │
35
- └────┬────┘ └────────┘
36
-
37
-
38
- ┌────┴┐
39
- │ 冷库 │
40
- └─────┘
1
+ ┌──────┐
2
+ │ 浴室 │
3
+ └───┬──┘
4
+ 1号走廊
5
+
6
+ ┌────┴───┐
7
+ │ 健身房 │
8
+ └────┬───┘
9
+
10
+
11
+ ┌──────┐ │
12
+ │ 酒吧 ├──────────┐ │ ┌────────┐
13
+ └───┬──┘ │ │ │ 导航仓 │
14
+ │ └───2号走廊──┴─────┬───────────┤ │
15
+ │ │ └────┬───┘
16
+ ┌───3号走廊───────────────┘ │ │
17
+ │ │ │
18
+ │ ┌────────┐ ┌────────┬┘ │
19
+ ┌──────┴─────┐ ┌────────┐ │ 监控室 ├──────┤ 居住区 ├──────┐ │
20
+ │ 动力监控室 ├────┤ 能源舱 │ └────┬───┘ └────┬───┘ │ │
21
+ └──────┬─────┘ └────────┘ │ │ │ │
22
+ │ │ │ │ │
23
+ 4号走廊 │ │ │ │
24
+ │ │ ┌──────────┘ │ │
25
+ │ ┌────┴───┐│ │ │
26
+ └┐ │ 禁闭室 ││ │ │
27
+ │ └────────┘│ │ │
28
+ ┌────┴───┐ ┌──────────┬┘ ┌────┴────┐ │
29
+ │ 制氧舱 ├─────────────────────┤ 自助餐厅 │ │ 休闲会所 ├─5号走廊─┬────────┐
30
+ └────────┘ └──────────┤ └────┬────┘ │ │ 情报室 ├────────┐
31
+ │ │ │ └────────┘ │
32
+ │ │ │ │
33
+ │ ┌────┴────┐ │ ┌────┴───┐
34
+ └─────────────────┤ 中央厨房 ├─────┘ │ 控制室 │
35
+ └────┬────┘ └────────┘
36
+
37
+
38
+ ┌────┴┐
39
+ │ 冷库 │
40
+ └─────┘