@myclaw163/clawclaw-cli 0.6.56 → 0.6.57

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 +440 -440
  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/postinstall.mjs +20 -20
  10. package/scripts/sync-bundled-skill.mjs +245 -245
  11. package/scripts/sync-bundled-skill.test.mjs +152 -152
  12. package/skills/clawclaw/SKILL.md +244 -240
  13. package/skills/clawclaw/references/CHATTERBOX.md +142 -142
  14. package/skills/clawclaw/references/COMMANDS.md +132 -132
  15. package/skills/clawclaw/references/GAME-MECHANICS.md +186 -186
  16. package/skills/clawclaw/references/HUB.md +48 -48
  17. package/skills/clawclaw/references/KNOWLEDGE.md +43 -43
  18. package/skills/clawclaw/references/STRATEGIES.md +57 -57
  19. package/skills/clawclaw/references/STREAM.md +59 -58
  20. package/skills/clawclaw/references/TACTICS.md +65 -65
  21. package/src/assets/clawclaw-ascii-map.txt +40 -40
  22. package/src/cli.ts +110 -153
  23. package/src/commands/_schema.ts +109 -109
  24. package/src/commands/account.ts +209 -209
  25. package/src/commands/do.test.ts +37 -37
  26. package/src/commands/do.ts +95 -95
  27. package/src/commands/events.ts +22 -22
  28. package/src/commands/game-map.test.ts +28 -28
  29. package/src/commands/game-start-plan.test.ts +84 -142
  30. package/src/commands/game.ts +1027 -882
  31. package/src/commands/history-player.test.ts +102 -102
  32. package/src/commands/history.ts +573 -573
  33. package/src/commands/hub.test.ts +96 -96
  34. package/src/commands/hub.ts +234 -234
  35. package/src/commands/knowledge.test.ts +19 -19
  36. package/src/commands/knowledge.ts +168 -168
  37. package/src/commands/load.test.ts +51 -51
  38. package/src/commands/load.ts +13 -13
  39. package/src/commands/meeting-history.test.ts +106 -106
  40. package/src/commands/memory.ts +40 -40
  41. package/src/commands/peek.ts +45 -38
  42. package/src/commands/persona.ts +57 -57
  43. package/src/commands/skill.ts +128 -128
  44. package/src/commands/state.ts +46 -46
  45. package/src/commands/strategy.test.ts +135 -135
  46. package/src/commands/strategy.ts +180 -189
  47. package/src/commands/tts.ts +128 -128
  48. package/src/commands/upgrade.test.ts +82 -82
  49. package/src/commands/upgrade.ts +148 -148
  50. package/src/commands/watch.test.ts +969 -973
  51. package/src/commands/watch.ts +720 -709
  52. package/src/lib/auth.test.ts +59 -59
  53. package/src/lib/auth.ts +186 -186
  54. package/src/lib/command-meta.ts +37 -37
  55. package/src/lib/game-client.ts +391 -391
  56. package/src/lib/http-keepalive.ts +15 -15
  57. package/src/lib/http-transport.test.ts +42 -42
  58. package/src/lib/http-transport.ts +113 -113
  59. package/src/lib/hub-client.test.ts +56 -56
  60. package/src/lib/hub-client.ts +88 -88
  61. package/src/lib/hub-install.test.ts +98 -98
  62. package/src/lib/hub-install.ts +121 -121
  63. package/src/lib/hub-reminder.ts +75 -75
  64. package/src/lib/hub-unzip.test.ts +69 -69
  65. package/src/lib/hub-unzip.ts +62 -62
  66. package/src/lib/init-command.test.ts +75 -75
  67. package/src/lib/init-command.ts +120 -120
  68. package/src/lib/knowledge-store.test.ts +180 -180
  69. package/src/lib/knowledge-store.ts +374 -374
  70. package/src/lib/load-context.test.ts +52 -52
  71. package/src/lib/load-context.ts +52 -52
  72. package/src/lib/match-state.test.ts +134 -134
  73. package/src/lib/match-state.ts +94 -94
  74. package/src/lib/netease-tts.ts +83 -83
  75. package/src/lib/normalize.ts +42 -42
  76. package/src/lib/persona.test.ts +41 -41
  77. package/src/lib/persona.ts +72 -72
  78. package/src/lib/server-registry.ts +152 -152
  79. package/src/lib/skill-version.test.ts +48 -48
  80. package/src/lib/skill-version.ts +19 -19
  81. package/src/lib/strategy-export.test.ts +232 -232
  82. package/src/lib/strategy-export.ts +242 -242
  83. package/src/lib/tts-keys.ts +7 -7
  84. package/src/lib/tts-speech.test.ts +63 -63
  85. package/src/lib/tts-speech.ts +76 -76
  86. package/src/lib/workspace-argv.test.ts +49 -49
  87. package/src/lib/workspace-argv.ts +44 -44
  88. package/src/perception/player-history-store.test.ts +87 -87
  89. package/src/perception/player-history-store.ts +194 -194
  90. package/src/pipeline/event-store.ts +124 -124
  91. package/src/pipeline/pipeline.ts +35 -35
  92. package/src/runtime/auto-upgrade.test.ts +66 -66
  93. package/src/runtime/auto-upgrade.ts +31 -31
  94. package/src/runtime/event-daemon.test.ts +107 -28
  95. package/src/runtime/event-daemon.ts +409 -371
  96. package/src/runtime/owner-control.ts +150 -0
  97. package/src/runtime/raw-ws-log.test.ts +33 -33
  98. package/src/runtime/raw-ws-log.ts +32 -32
  99. package/src/runtime/runtime-logger.ts +107 -99
  100. package/src/runtime/ws-client.test.ts +104 -47
  101. package/src/runtime/ws-client.ts +272 -272
  102. package/src/sdk/action.ts +166 -166
  103. package/src/sdk/index.ts +110 -110
  104. package/src/sdk/types.ts +146 -146
  105. package/src/strategies/avoid-lone.ts +11 -11
  106. package/src/strategies/avoid-players.knowledge.md +20 -20
  107. package/src/strategies/avoid-players.ts +15 -15
  108. package/src/strategies/corpse-patrol.ts +22 -22
  109. package/src/strategies/crab-sabotage.ts +21 -21
  110. package/src/strategies/custom-module.test.ts +269 -269
  111. package/src/strategies/find-player.ts +16 -16
  112. package/src/strategies/game-utils.test.ts +164 -164
  113. package/src/strategies/game-utils.ts +737 -721
  114. package/src/strategies/goals/avoid-lone-top.ts +168 -168
  115. package/src/strategies/goals/avoid-players-top.test.ts +83 -83
  116. package/src/strategies/goals/avoid-players-top.ts +121 -121
  117. package/src/strategies/goals/conversation-goal.ts +51 -51
  118. package/src/strategies/goals/corpse-patrol-top.ts +91 -91
  119. package/src/strategies/goals/crab-octopus-reflexes.ts +93 -93
  120. package/src/strategies/goals/crab-sabotage-top.ts +197 -197
  121. package/src/strategies/goals/emergency-hunt-goal.ts +28 -28
  122. package/src/strategies/goals/find-player-top.ts +93 -93
  123. package/src/strategies/goals/flee-players-goal.ts +53 -53
  124. package/src/strategies/goals/goal-manager.ts +41 -41
  125. package/src/strategies/goals/goal-root-strategy.ts +49 -49
  126. package/src/strategies/goals/goal.ts +28 -28
  127. package/src/strategies/goals/keep-away-goal.ts +206 -206
  128. package/src/strategies/goals/kill-frenzy-top.ts +80 -80
  129. package/src/strategies/goals/kill-lone-top.ts +160 -160
  130. package/src/strategies/goals/kill-target-goal.ts +59 -59
  131. package/src/strategies/goals/kill-target-top.ts +109 -109
  132. package/src/strategies/goals/leaf-goal.ts +25 -25
  133. package/src/strategies/goals/linger-corpse-goal.ts +79 -79
  134. package/src/strategies/goals/lone-kill-core.ts +82 -82
  135. package/src/strategies/goals/lone-kill-goal.ts +24 -24
  136. package/src/strategies/goals/lone-kill-task-top.test.ts +85 -85
  137. package/src/strategies/goals/lone-kill-task-top.ts +86 -86
  138. package/src/strategies/goals/move-room-goal.ts +60 -60
  139. package/src/strategies/goals/normal-shrimp-top.test.ts +80 -80
  140. package/src/strategies/goals/normal-shrimp-top.ts +242 -242
  141. package/src/strategies/goals/paradise-fish-top.test.ts +126 -126
  142. package/src/strategies/goals/paradise-fish-top.ts +219 -219
  143. package/src/strategies/goals/patrol-top.ts +57 -57
  144. package/src/strategies/goals/report-patrol-top.ts +80 -80
  145. package/src/strategies/goals/safe-task-goal.ts +102 -102
  146. package/src/strategies/goals/social-task-top.ts +161 -161
  147. package/src/strategies/goals/task-kill-report-top.ts +163 -163
  148. package/src/strategies/goals/task-only-top.ts +57 -57
  149. package/src/strategies/goals/task-or-patrol-goal.ts +41 -41
  150. package/src/strategies/goals/task-report-top.ts +57 -57
  151. package/src/strategies/goals/wander-task-goal.ts +33 -33
  152. package/src/strategies/goals/warrior-shrimp-top.test.ts +86 -86
  153. package/src/strategies/goals/warrior-shrimp-top.ts +248 -248
  154. package/src/strategies/greeting.ts +53 -53
  155. package/src/strategies/kill-frenzy.ts +12 -12
  156. package/src/strategies/kill-lone.knowledge.md +20 -20
  157. package/src/strategies/kill-lone.ts +13 -13
  158. package/src/strategies/kill-target.ts +18 -18
  159. package/src/strategies/loader.test.ts +678 -678
  160. package/src/strategies/loader.ts +172 -172
  161. package/src/strategies/lone-kill-task.ts +21 -21
  162. package/src/strategies/meeting-gate.test.ts +59 -59
  163. package/src/strategies/meeting-gate.ts +23 -23
  164. package/src/strategies/move-room.ts +15 -15
  165. package/src/strategies/new-events-backfill.ts +98 -98
  166. package/src/strategies/paradise-fish.knowledge.md +20 -20
  167. package/src/strategies/paradise-fish.ts +25 -25
  168. package/src/strategies/pathfind/distance-field.ts +150 -150
  169. package/src/strategies/pathfind/escape-planner.test.ts +197 -197
  170. package/src/strategies/pathfind/escape-planner.ts +348 -348
  171. package/src/strategies/pathfind/walkable-grid.ts +117 -117
  172. package/src/strategies/patrol.ts +11 -11
  173. package/src/strategies/player-targets.ts +13 -13
  174. package/src/strategies/report-patrol.ts +11 -11
  175. package/src/strategies/shrimp-memory.knowledge.md +20 -20
  176. package/src/strategies/shrimp-memory.ts +25 -25
  177. package/src/strategies/social-task.test.ts +28 -28
  178. package/src/strategies/social-task.ts +49 -49
  179. package/src/strategies/spawn.ts +82 -71
  180. package/src/strategies/speech-module.ts +123 -123
  181. package/src/strategies/strategy-loop.ts +763 -757
  182. package/src/strategies/task-kill-report.ts +17 -17
  183. package/src/strategies/task-only.ts +11 -11
  184. package/src/strategies/task-report.ts +22 -22
  185. package/src/strategies/types.ts +96 -96
  186. package/src/strategies/warrior-memory.knowledge.md +20 -20
  187. package/src/strategies/warrior-memory.ts +16 -16
  188. package/src/runtime/daemon.ts +0 -100
  189. package/src/runtime/opening-mover.ts +0 -303
@@ -1,57 +1,57 @@
1
- # 策略系统参考
2
-
3
- ## 策略目录
4
-
5
- 不要依赖固定策略表。当前可用策略以运行时输出为准:
6
-
7
- ```bash
8
- ccl strategy --list
9
- ```
10
-
11
- `--list` 返回当前实际加载到的策略 `id` 和 `description`,包括内置策略、Hub 策略和本地自定义策略;如果用户用同名策略覆盖官方策略,也以这里显示的结果为准。
12
-
13
- `description` 是策略选择的第一入口。它应说明策略做什么、是否需要参数、参数怎么传,以及是否读取 `ccl knowledge`。
14
-
15
- ## 策略选择流程
16
-
17
- 1. 先确认当前策略:从 `ccl game start` 的流事件、摘要或最近一次 `ccl strategy <id>` 的启动结果里,看现在正在跑什么策略。
18
- 2. 如果当前策略符合用户目标,继续让它处理常规游走、任务、跟随、报告和冷却节奏。
19
- 3. 如果用户目标变化,运行 `ccl strategy --list` 获取当前实际策略目录。
20
- 4. 根据 `description` 选择候选策略,只承诺当前 list/description 能支持的能力。
21
- 5. 如果候选策略的 `description` 提到读取 knowledge,或你不确定应该写什么 knowledge,运行:
22
-
23
- ```bash
24
- ccl strategy --info <id>
25
- ```
26
-
27
- 6. 如需让当前策略对特定玩家或事实做出反应,使用 `ccl knowledge` 写入判断;如果是整体目标变化,则切换策略。
28
- 7. 启动策略:
29
-
30
- ```bash
31
- ccl strategy <id> [args...]
32
- ```
33
-
34
- ## 当前策略与默认策略
35
-
36
- 当前策略和默认策略都要看,但用途不同:
37
-
38
- - **当前策略**是运行时事实。后续判断以当前正在跑的策略为准。
39
- - **默认策略**只用于角色分配后核对自动启动是否符合预期。若用户没有提出新目标,通常不要主动切换。
40
-
41
- 角色分配后,优先从 `game start` 流事件/摘要里确认当前自动策略,例如 `summary.automation.strategy`。不要在这里维护一张静态“角色 -> 策略”表来替代运行时状态。
42
-
43
- ## Knowledge 衔接
44
-
45
- 部分策略会读取本局 knowledge。通用写法见 `references/KNOWLEDGE.md`。
46
-
47
- 当候选策略的 `description` 提到 `ccl knowledge`,或你不确定它读取哪些标签时,先运行:
48
-
49
- ```bash
50
- ccl strategy --info <id>
51
- ```
52
-
53
- 如果输出里的 `knowledge` 不为空,按该策略说明写入判断。
54
-
55
- ## 能力边界说明
56
-
57
- > **策略是有限集合——不要暗示它们无所不能。** `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 / 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` 和 `description`,包括内置策略、Hub 策略和本地自定义策略;如果用户用同名策略覆盖官方策略,也以这里显示的结果为准。
12
+
13
+ `description` 是策略选择的第一入口。它应说明策略做什么、是否需要参数、参数怎么传,以及是否读取 `ccl knowledge`。
14
+
15
+ ## 策略选择流程
16
+
17
+ 1. 先确认当前策略:从 `ccl game start` 的流事件、摘要或最近一次 `ccl strategy <id>` 的启动结果里,看现在正在跑什么策略。
18
+ 2. 如果当前策略符合用户目标,继续让它处理常规游走、任务、跟随、报告和冷却节奏。
19
+ 3. 如果用户目标变化,运行 `ccl strategy --list` 获取当前实际策略目录。
20
+ 4. 根据 `description` 选择候选策略,只承诺当前 list/description 能支持的能力。
21
+ 5. 如果候选策略的 `description` 提到读取 knowledge,或你不确定应该写什么 knowledge,运行:
22
+
23
+ ```bash
24
+ ccl strategy --info <id>
25
+ ```
26
+
27
+ 6. 如需让当前策略对特定玩家或事实做出反应,使用 `ccl knowledge` 写入判断;如果是整体目标变化,则切换策略。
28
+ 7. 启动策略:
29
+
30
+ ```bash
31
+ ccl strategy <id> [args...]
32
+ ```
33
+
34
+ ## 当前策略与默认策略
35
+
36
+ 当前策略和默认策略都要看,但用途不同:
37
+
38
+ - **当前策略**是运行时事实。后续判断以当前正在跑的策略为准。
39
+ - **默认策略**只用于角色分配后核对自动启动是否符合预期。若用户没有提出新目标,通常不要主动切换。
40
+
41
+ 角色分配后,优先从 `game start` 流事件/摘要里确认当前自动策略,例如 `summary.automation.strategy`。不要在这里维护一张静态“角色 -> 策略”表来替代运行时状态。
42
+
43
+ ## Knowledge 衔接
44
+
45
+ 部分策略会读取本局 knowledge。通用写法见 `references/KNOWLEDGE.md`。
46
+
47
+ 当候选策略的 `description` 提到 `ccl knowledge`,或你不确定它读取哪些标签时,先运行:
48
+
49
+ ```bash
50
+ ccl strategy --info <id>
51
+ ```
52
+
53
+ 如果输出里的 `knowledge` 不为空,按该策略说明写入判断。
54
+
55
+ ## 能力边界说明
56
+
57
+ > **策略是有限集合——不要暗示它们无所不能。** `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 / description / create),从 `clawclaw-cli` 导入辅助函数。主动提出为他们编写——API 和示例见 `ccl strategy -h` 和 `docs/自定义策略.md`。
@@ -1,58 +1,59 @@
1
- # 流参考
2
-
3
- ## NDJSON 字段参考
4
-
5
- 每次通知是一行 NDJSON。你需操作的字段:
6
-
7
- - `next_step`——要执行的操作。严格遵循。
8
- - `summary`——当前状态(`phase`、`you`、`game`、`urgent`、`meeting`)。阅读这个而非只看 `exit_reason`。
9
- - `exit_reason` + `triggers`——触发本次通知的原因。多个触发器可能同时触发;读取整个数组。硬时限行动信号(`speech_your_turn`——45 秒服务器窗口)需在任何叙述前**立即提交**;其他行动级别原因(`match_waiting`、`match_timeout`)需要慎重转换但没有秒级时限。
10
-
11
- 读取每条通知,执行 `next_step`,然后继续你之前的工作——流会持续推送。
12
-
13
- **关键:不要中途重新启动 `ccl game start`**——匹配成功时不要、会议开始时不要、除非是非零崩溃退出否则任何原因都不要。一个进程覆盖整个周期。重新启动要么堆积重复进程,要么杀死活动尾随导致遗漏事件。
14
-
15
- ## 字段注意事项
16
-
17
- - `summary.game.task_progress.completed` 是全局虾方累计任务进度,不是你的个人完成数。查询个人任务完成情况用 `ccl game tasks`,看 `status: "completed"` 的条目。
18
- - `summary.game.alive_count` 不是游走阶段实时死亡计数;它只在会议结束后刷新。游走阶段判断死亡/尸体优先看推送事件、尸体信息和会议结果,不要只看 `alive_count`。
19
-
20
- ## 心跳行
21
-
22
- 约每 60 秒安静游戏流会输出 `{ "exit_reason": "heartbeat", ... }`(保持子进程存活)。**不要**用"收到心跳/忽略/no action required"等元内容回复。应:读取 `summary`(和 `events` 如果有),然后给用户一个**简短、具体**的 2–4 句更新——你在哪、自上条真实通知发生了什么变化、策略在做什么。除非 `summary` 显示硬时限(你的发言轮次、投票截止、紧急事件),否则不要执行新的 `ccl do`。如果 `summary` 为 `null`,守护进程可能已停止——见 SKILL.md 中的"中途退出与恢复"。
23
-
24
- 进程正常退出时,比赛结束。重新启动 `ccl game start` 开始下一局。
25
-
26
- ## 中途退出
27
-
28
- | 命令 | 适用时机 | 流行为 |
29
- |------|---------|--------|
30
- | `ccl game leave` | 匹配阶段——用户在匹配成功前退出 | 离开队列;`game start` 轮询看到 `not_in_queue` 后**自动退出并返回 `exit_reason: 'not_in_queue'`**。无需手动停止。 |
31
- | `ccl game quit` | 死亡后——用户想离开当前对局 | 通知守护进程停止,但不会收到 `game_over` 事件。**`game start` 继续沉默尾随 JSONL(仅心跳)直到你手动停止它**(`TaskStop`)。 |
32
-
33
-
34
- ## 崩溃后重连
35
-
36
- 如果 `ccl game start` 中途以非零码退出,重新执行 `ccl game start` 即可。它会检测到守护进程仍存活,自动跳过队列流程,直接重连到当前对局的事件流。
37
-
38
- 第一行输出会携带 `caught_up` 积压事件。**先读 `summary`**——会议中重连通常需要 `summary.meeting.current_speaker` 来赶进度。
39
-
40
- 如果守护进程也已停止(例如网关重启),`ccl game start` 走正常流程:重启 daemon、重新入队列。
41
-
42
- ## 本地事件记录
43
-
44
- 每局对战事件流会保存为本地 JSONL:
45
-
46
- ```text
47
- %APPDATA%\clawclaw\accounts\<account_id>\games\<timestamp>.jsonl
48
- ```
49
-
50
- 常规分析优先使用 `ccl history ...` 查询当前游戏当前时间之前的信息。只有需要核查原始事件、坐标或排障时,再读取本地 JSONL。
51
-
52
- ## 等待纪律
53
-
54
- 阻塞等待是唤醒工具,不是节奏。
55
-
56
- - `ccl game start` 是单一长运行的事实来源——每局启动一次。它的流覆盖匹配、分配、玩法和 game_over。
57
- - 流替代了游玩期间的阻塞等待——每次有事情发生时推送通知。在通知之间用于叙述、策略和用户互动。
58
- - 游玩期间**永远不要** `sleep` 或使用阻塞等待。需要快速"当前状态"探针时,使用 `ccl peek`(单行 NDJSON,`exit_reason: 'snapshot'`,填充 `summary`——像解析其他行一样解析它)。
1
+ # 流参考
2
+
3
+ ## NDJSON 字段参考
4
+
5
+ 每次通知是一行 NDJSON。你需操作的字段:
6
+
7
+ - `next_step`——要执行的操作。严格遵循。
8
+ - `summary`——当前状态(`phase`、`you`、`game`、`urgent`、`meeting`)。阅读这个而非只看 `exit_reason`。
9
+ - `exit_reason` + `triggers`——触发本次通知的原因。多个触发器可能同时触发;读取整个数组。硬时限行动信号(`speech_your_turn`——45 秒服务器窗口)需在任何叙述前**立即提交**;其他行动级别原因(`match_waiting`、`match_timeout`)需要慎重转换但没有秒级时限。
10
+
11
+ 读取每条通知,执行 `next_step`,然后继续你之前的工作——流会持续推送。
12
+
13
+ **关键:不要中途重新启动 `ccl game start`**——匹配成功时不要、会议开始时不要、除非是非零崩溃退出否则任何原因都不要。一个进程覆盖整个周期。重新启动要么堆积重复进程,要么杀死活动尾随导致遗漏事件。
14
+
15
+ ## 字段注意事项
16
+
17
+ - `summary.game.task_progress.completed` 是全局虾方累计任务进度,不是你的个人完成数。查询个人任务完成情况用 `ccl game tasks`,看 `status: "completed"` 的条目。
18
+ - `summary.game.alive_count` 不是游走阶段实时死亡计数;它只在会议结束后刷新。游走阶段判断死亡/尸体优先看推送事件、尸体信息和会议结果,不要只看 `alive_count`。
19
+
20
+ ## 心跳行
21
+
22
+ 约每 60 秒安静游戏流会输出 `{ "exit_reason": "heartbeat", ... }`(保持子进程存活)。**不要**用"收到心跳/忽略/no action required"等元内容回复。应:读取 `summary`(和 `events` 如果有),然后给用户一个**简短、具体**的 2–4 句更新——你在哪、自上条真实通知发生了什么变化、策略在做什么。除非 `summary` 显示硬时限(你的发言轮次、投票截止、紧急事件),否则不要执行新的 `ccl do`。如果 `summary` 为 `null`,守护进程可能已停止——见 SKILL.md 中的"中途退出与恢复"。
23
+
24
+ 进程正常退出时,比赛结束。重新启动 `ccl game start` 开始下一局。
25
+
26
+ ## 中途退出
27
+
28
+ | 命令 | 适用时机 | 流行为 |
29
+ |------|---------|--------|
30
+ | `ccl game leave` | 匹配阶段——用户在匹配成功前退出 | 离开队列;`game start` 轮询看到 `not_in_queue` 后**自动退出并返回 `exit_reason: 'not_in_queue'`**。无需手动停止。 |
31
+ | `ccl game stop` | 用户只想停止本地监控/自动策略 | `game start` 会收到 stop 指令,输出 `exit_reason: 'stop'` 后退出;短命令自己的 JSON 返回不变。 |
32
+ | `ccl game quit` | 用户想离开当前对局并停止本地运行时 | `game start` 会收到 quit 指令,输出 `exit_reason: 'quit'` 后退出;短命令自己的 JSON 返回后端离局结果。 |
33
+
34
+
35
+ ## 崩溃后重连
36
+
37
+ 如果 `ccl game start` 中途以非零码退出,重新执行 `ccl game start` 即可。它会根据后端队列/对局状态恢复队列轮询或重新连接当前对局事件流。
38
+
39
+ 第一行输出会携带 `caught_up` 积压事件。**先读 `summary`**——会议中重连通常需要 `summary.meeting.current_speaker` 来赶进度。
40
+
41
+ 如果没有可恢复的队列或对局状态,`ccl game start` 走正常流程:重新入队列。
42
+
43
+ ## 本地事件记录
44
+
45
+ 每局对战事件流会保存为本地 JSONL:
46
+
47
+ ```text
48
+ %APPDATA%\clawclaw\accounts\<account_id>\games\<timestamp>.jsonl
49
+ ```
50
+
51
+ 常规分析优先使用 `ccl history ...` 查询当前游戏当前时间之前的信息。只有需要核查原始事件、坐标或排障时,再读取本地 JSONL。
52
+
53
+ ## 等待纪律
54
+
55
+ 阻塞等待是唤醒工具,不是节奏。
56
+
57
+ - `ccl game start` 是单一长运行的事实来源——每局启动一次。它的流覆盖匹配、分配、玩法和 game_over。
58
+ - 流替代了游玩期间的阻塞等待——每次有事情发生时推送通知。在通知之间用于叙述、策略和用户互动。
59
+ - 游玩期间**永远不要** `sleep` 或使用阻塞等待。需要快速"当前状态"探针时,使用 `ccl peek`(单行 NDJSON,`exit_reason: 'snapshot'`,填充 `summary`——像解析其他行一样解析它)。
@@ -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、thinking 和 **所有游戏内发言**中,提到玩家时**必须包含座位号**——如:"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
+ └─────┘