claws-code 0.8.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 (180) hide show
  1. package/.claude/commands/claws-auto.md +90 -0
  2. package/.claude/commands/claws-bin.md +28 -0
  3. package/.claude/commands/claws-cleanup.md +28 -0
  4. package/.claude/commands/claws-do.md +82 -0
  5. package/.claude/commands/claws-fix.md +40 -0
  6. package/.claude/commands/claws-goal.md +111 -0
  7. package/.claude/commands/claws-help.md +54 -0
  8. package/.claude/commands/claws-plan.md +103 -0
  9. package/.claude/commands/claws-report.md +29 -0
  10. package/.claude/commands/claws-status.md +37 -0
  11. package/.claude/commands/claws-update.md +32 -0
  12. package/.claude/commands/claws.md +64 -0
  13. package/.claude/rules/claws-default-behavior.md +76 -0
  14. package/.claude/settings.json +112 -0
  15. package/.claude/settings.local.json +19 -0
  16. package/.claude/skills/claws-auto-engine/SKILL.md +97 -0
  17. package/.claude/skills/claws-goal-tracker/SKILL.md +106 -0
  18. package/.claude/skills/claws-prompt-templates/SKILL.md +203 -0
  19. package/.claude/skills/claws-wave-lead/SKILL.md +126 -0
  20. package/.claude/skills/claws-wave-subworker/SKILL.md +60 -0
  21. package/CHANGELOG.md +1949 -0
  22. package/LICENSE +21 -0
  23. package/README.md +420 -0
  24. package/bin/cli.js +84 -0
  25. package/cli.js +223 -0
  26. package/docs/ARCHITECTURE.md +511 -0
  27. package/docs/event-protocol.md +588 -0
  28. package/docs/features.md +562 -0
  29. package/docs/guide.md +891 -0
  30. package/docs/index.html +716 -0
  31. package/docs/protocol.md +323 -0
  32. package/extension/.vscodeignore +15 -0
  33. package/extension/CHANGELOG.md +1906 -0
  34. package/extension/LICENSE +21 -0
  35. package/extension/README.md +137 -0
  36. package/extension/docs/features.md +424 -0
  37. package/extension/docs/protocol.md +197 -0
  38. package/extension/esbuild.mjs +25 -0
  39. package/extension/icon.png +0 -0
  40. package/extension/native/.metadata.json +10 -0
  41. package/extension/native/node-pty/LICENSE +69 -0
  42. package/extension/native/node-pty/README.md +165 -0
  43. package/extension/native/node-pty/lib/conpty_console_list_agent.js +16 -0
  44. package/extension/native/node-pty/lib/conpty_console_list_agent.js.map +1 -0
  45. package/extension/native/node-pty/lib/eventEmitter2.js +47 -0
  46. package/extension/native/node-pty/lib/eventEmitter2.js.map +1 -0
  47. package/extension/native/node-pty/lib/index.js +52 -0
  48. package/extension/native/node-pty/lib/index.js.map +1 -0
  49. package/extension/native/node-pty/lib/interfaces.js +7 -0
  50. package/extension/native/node-pty/lib/interfaces.js.map +1 -0
  51. package/extension/native/node-pty/lib/shared/conout.js +11 -0
  52. package/extension/native/node-pty/lib/shared/conout.js.map +1 -0
  53. package/extension/native/node-pty/lib/terminal.js +190 -0
  54. package/extension/native/node-pty/lib/terminal.js.map +1 -0
  55. package/extension/native/node-pty/lib/types.js +7 -0
  56. package/extension/native/node-pty/lib/types.js.map +1 -0
  57. package/extension/native/node-pty/lib/unixTerminal.js +346 -0
  58. package/extension/native/node-pty/lib/unixTerminal.js.map +1 -0
  59. package/extension/native/node-pty/lib/utils.js +39 -0
  60. package/extension/native/node-pty/lib/utils.js.map +1 -0
  61. package/extension/native/node-pty/lib/windowsConoutConnection.js +125 -0
  62. package/extension/native/node-pty/lib/windowsConoutConnection.js.map +1 -0
  63. package/extension/native/node-pty/lib/windowsPtyAgent.js +320 -0
  64. package/extension/native/node-pty/lib/windowsPtyAgent.js.map +1 -0
  65. package/extension/native/node-pty/lib/windowsTerminal.js +199 -0
  66. package/extension/native/node-pty/lib/windowsTerminal.js.map +1 -0
  67. package/extension/native/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  68. package/extension/native/node-pty/lib/worker/conoutSocketWorker.js.map +1 -0
  69. package/extension/native/node-pty/package.json +64 -0
  70. package/extension/native/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  71. package/extension/native/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  72. package/extension/native/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  73. package/extension/native/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  74. package/extension/native/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  75. package/extension/native/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  76. package/extension/native/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  77. package/extension/native/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  78. package/extension/native/node-pty/prebuilds/win32-arm64/pty.node +0 -0
  79. package/extension/native/node-pty/prebuilds/win32-arm64/winpty-agent.exe +0 -0
  80. package/extension/native/node-pty/prebuilds/win32-arm64/winpty.dll +0 -0
  81. package/extension/native/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  82. package/extension/native/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  83. package/extension/native/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  84. package/extension/native/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  85. package/extension/native/node-pty/prebuilds/win32-x64/pty.node +0 -0
  86. package/extension/native/node-pty/prebuilds/win32-x64/winpty-agent.exe +0 -0
  87. package/extension/native/node-pty/prebuilds/win32-x64/winpty.dll +0 -0
  88. package/extension/package-lock.json +605 -0
  89. package/extension/package.json +343 -0
  90. package/extension/scripts/bundle-native.mjs +104 -0
  91. package/extension/scripts/deploy-dev.mjs +60 -0
  92. package/extension/src/ansi-strip.ts +52 -0
  93. package/extension/src/backends/vscode/claws-pty.ts +483 -0
  94. package/extension/src/backends/vscode/status-bar.ts +99 -0
  95. package/extension/src/backends/vscode/vscode-backend.ts +282 -0
  96. package/extension/src/capture-store.ts +125 -0
  97. package/extension/src/event-log.ts +629 -0
  98. package/extension/src/event-schemas.ts +478 -0
  99. package/extension/src/extension.js +492 -0
  100. package/extension/src/extension.ts +873 -0
  101. package/extension/src/lifecycle-engine.ts +60 -0
  102. package/extension/src/lifecycle-rules.ts +171 -0
  103. package/extension/src/lifecycle-store.ts +506 -0
  104. package/extension/src/peer-registry.ts +176 -0
  105. package/extension/src/pipeline-registry.ts +82 -0
  106. package/extension/src/platform.ts +64 -0
  107. package/extension/src/protocol.ts +532 -0
  108. package/extension/src/server-config.ts +98 -0
  109. package/extension/src/server.ts +2210 -0
  110. package/extension/src/task-registry.ts +51 -0
  111. package/extension/src/terminal-backend.ts +211 -0
  112. package/extension/src/terminal-manager.ts +395 -0
  113. package/extension/src/topic-registry.ts +70 -0
  114. package/extension/src/topic-utils.ts +46 -0
  115. package/extension/src/transport.ts +45 -0
  116. package/extension/src/uninstall-cleanup.ts +232 -0
  117. package/extension/src/wave-registry.ts +314 -0
  118. package/extension/src/websocket-transport.ts +153 -0
  119. package/extension/tsconfig.json +23 -0
  120. package/lib/capabilities.js +145 -0
  121. package/lib/dry-run.js +43 -0
  122. package/lib/install.js +1018 -0
  123. package/lib/mcp-setup.js +92 -0
  124. package/lib/platform.js +240 -0
  125. package/lib/preflight.js +152 -0
  126. package/lib/shell-hook.js +343 -0
  127. package/lib/uninstall.js +162 -0
  128. package/lib/verify.js +166 -0
  129. package/mcp_server.js +3529 -0
  130. package/package.json +48 -0
  131. package/rules/claws-default-behavior.md +72 -0
  132. package/scripts/_helpers/atomic-file.mjs +137 -0
  133. package/scripts/_helpers/fix-repair.js +64 -0
  134. package/scripts/_helpers/json-safe.mjs +218 -0
  135. package/scripts/bump-version.sh +84 -0
  136. package/scripts/codegen/gen-docs.mjs +61 -0
  137. package/scripts/codegen/gen-json-schema.mjs +62 -0
  138. package/scripts/codegen/gen-mcp-tools.mjs +358 -0
  139. package/scripts/codegen/gen-types.mjs +172 -0
  140. package/scripts/codegen/index.mjs +42 -0
  141. package/scripts/dev-hooks/check-extension-dirs.js +77 -0
  142. package/scripts/dev-hooks/check-open-claws-terminals.js +70 -0
  143. package/scripts/dev-hooks/check-stale-main.js +55 -0
  144. package/scripts/dev-hooks/check-tag-pushed.js +51 -0
  145. package/scripts/dev-hooks/check-tag-vs-main.js +56 -0
  146. package/scripts/dev-vsix-install.sh +60 -0
  147. package/scripts/fix.sh +702 -0
  148. package/scripts/gen-client-types.mjs +81 -0
  149. package/scripts/git-hooks/pre-commit +31 -0
  150. package/scripts/hooks/lifecycle-state.js +61 -0
  151. package/scripts/hooks/package.json +4 -0
  152. package/scripts/hooks/post-tool-use-claws.js +292 -0
  153. package/scripts/hooks/pre-bash-no-verify-block.js +72 -0
  154. package/scripts/hooks/pre-tool-use-claws.js +206 -0
  155. package/scripts/hooks/session-start-claws.js +97 -0
  156. package/scripts/hooks/stop-claws.js +88 -0
  157. package/scripts/inject-claude-md.js +205 -0
  158. package/scripts/inject-dev-hooks.js +96 -0
  159. package/scripts/inject-global-claude-md.js +140 -0
  160. package/scripts/inject-settings-hooks.js +370 -0
  161. package/scripts/install.ps1 +146 -0
  162. package/scripts/install.sh +1729 -0
  163. package/scripts/monitor-arm-watch.js +155 -0
  164. package/scripts/rebuild-node-pty.sh +245 -0
  165. package/scripts/report.sh +232 -0
  166. package/scripts/shell-hook.fish +164 -0
  167. package/scripts/shell-hook.ps1 +33 -0
  168. package/scripts/shell-hook.sh +232 -0
  169. package/scripts/stream-events.js +399 -0
  170. package/scripts/terminal-wrapper.sh +36 -0
  171. package/scripts/test-enforcement.sh +132 -0
  172. package/scripts/test-install.sh +174 -0
  173. package/scripts/test-installer-parity.sh +135 -0
  174. package/scripts/test-template-enforcement.sh +76 -0
  175. package/scripts/uninstall.sh +143 -0
  176. package/scripts/update.sh +337 -0
  177. package/scripts/verify-release.sh +323 -0
  178. package/scripts/verify-wrapped.sh +194 -0
  179. package/templates/CLAUDE.global.md +135 -0
  180. package/templates/CLAUDE.project.md +37 -0
@@ -0,0 +1,126 @@
1
+ ---
2
+ name: claws-wave-lead
3
+ description: LEAD orchestration playbook for Claws Wave Army. Covers registration, sub-worker dispatch, PIAFEUR loop, and wave completion.
4
+ type: skill
5
+ ---
6
+
7
+ # Skill: claws-wave-lead
8
+
9
+ You are the **LEAD** of a Claws Wave Army. You own the diff, the commits, the PIAFEUR loop, and the final wave lifecycle call.
10
+
11
+ ## MANDATORY — Monitor arming after every dispatch
12
+
13
+ **After every `claws_dispatch_subworker` call, your VERY NEXT tool call MUST be `Monitor(...)` with the `monitor_arm_command` from the response. Any tool call that intervenes between `claws_dispatch_subworker` and `Monitor(...)` is a sequencing bug.**
14
+
15
+ Arm per-worker, not per-wave. Dispatch one, arm immediately, then dispatch the next:
16
+
17
+ ```
18
+ 1. claws_dispatch_subworker({ waveId, role:'tester', mission:'...' }) → r1
19
+ 2. Monitor(command=r1.monitor_arm_command, ...) ← MUST be step 2
20
+ 3. claws_dispatch_subworker({ waveId, role:'reviewer', mission:'...' }) → r2
21
+ 4. Monitor(command=r2.monitor_arm_command, ...) ← MUST be step 4
22
+ ```
23
+
24
+ Skipping or deferring Monitor leaves the sub-worker flying blind — no completion signal reaches the LEAD and the wave stalls.
25
+
26
+ ## Boot sequence
27
+
28
+ ```
29
+ 0. (Sidecar is already running — started by the SessionStart hook. No action needed.)
30
+ 1. claws_hello({ role:'orchestrator', peerName:'<waveId>-lead', waveId, subWorkerRole:'lead' })
31
+ // capabilities:['push'] is auto-granted as of v0.7.13 — passing it is optional, harmless
32
+ 2. claws_wave_create({ waveId, layers:[...], manifest:['tester','reviewer','auditor','doc'] })
33
+ 3. Publish wave.<waveId>.lead.boot
34
+ 4. Dispatch sub-workers via claws_dispatch_subworker (handles boot internally)
35
+ 5. Begin PIAFEUR loop
36
+ ```
37
+
38
+ > **Critical:** the global `.claws/events.log` sidecar is already running — do NOT spawn a
39
+ > second sidecar via Bash, do NOT `tail -F .claws/events.log` in any background process.
40
+ > The only acceptable per-worker watcher is the `Monitor()` tool armed with the
41
+ > `monitor_arm_command` returned in each `claws_dispatch_subworker` response. Any
42
+ > `Bash(run_in_background=true)` invocation for event observation is a wave-discipline
43
+ > violation and will be detected by the per-worker arming enforcement layer.
44
+
45
+ ## Sub-worker dispatch
46
+
47
+ Use `claws_dispatch_subworker` — it handles boot internally. Do NOT sequence manual claws_create + claws_send chains.
48
+
49
+ Dispatch and arm in lock-step — one dispatch, one Monitor, then the next:
50
+
51
+ ```
52
+ // Step 1: dispatch first sub-worker
53
+ const r1 = claws_dispatch_subworker({ waveId, role:'tester', mission:'...print MARK_TESTER_OK when done. go.' })
54
+ // Step 2: arm Monitor IMMEDIATELY — MUST be your very next tool call after step 1
55
+ Monitor(command=r1.monitor_arm_command,
56
+ description="claws monitor | term=" + r1.terminal_id,
57
+ timeout_ms=3600000, persistent=false)
58
+
59
+ // Step 3: dispatch next sub-worker
60
+ const r2 = claws_dispatch_subworker({ waveId, role:'reviewer', mission:'...' })
61
+ // Step 4: arm Monitor IMMEDIATELY — MUST be your very next tool call after step 3
62
+ Monitor(command=r2.monitor_arm_command,
63
+ description="claws monitor | term=" + r2.terminal_id,
64
+ timeout_ms=3600000, persistent=false)
65
+ ```
66
+
67
+ `monitor_arm_command` is in every dispatch response. Arming it is **mandatory** — not a suggestion, not optional. The PIAFEUR loop starts only after all sub-workers are dispatched **and** their Monitors are armed.
68
+
69
+ ## PIAFEUR loop
70
+
71
+ ```
72
+ Plan — outline the exact diff in file/function terms
73
+ Implement — write the code; npx tsc --noEmit after every .ts edit
74
+ Audit — read the diff as a reviewer; fix issues immediately
75
+ Fix — address reviewer/auditor findings
76
+ Evaluate — npm test; assert zero failures
77
+ Update — git commit (conventional message, no --no-verify)
78
+ Repeat — next iteration or advance to harvest
79
+ ```
80
+
81
+ ## Heartbeat discipline
82
+
83
+ Publish `worker.<peerId>.heartbeat` every 20 s. Server violation timer fires at 25 s.
84
+
85
+ ## Wave completion sequence
86
+
87
+ ```
88
+ // Loop on claws_drain_events until all sub-workers publish their .complete event
89
+ const EXPECTED = new Set(['tester','reviewer','auditor','doc']);
90
+ const completed = new Set();
91
+ const HARD_TIMEOUT_MS = 20 * 60 * 1000;
92
+ let cursor = 0;
93
+
94
+ while (completed.size < EXPECTED.size) {
95
+ if (Date.now() - startedAt > HARD_TIMEOUT_MS) {
96
+ // log missing roles, break
97
+ break;
98
+ }
99
+ const { events, cursor: next } = claws_drain_events({ since_index: cursor, wait_ms: 15000 });
100
+ cursor = next;
101
+ for (const evt of events) {
102
+ const m = evt.topic?.match(/^wave\.[^.]+\.(\w+)\.complete$/);
103
+ if (m && EXPECTED.has(m[1])) completed.add(m[1]);
104
+ }
105
+ }
106
+
107
+ // Final gates: npm test green, git commit passes hooks
108
+ claws_publish({ topic:`wave.${waveId}.lead.complete`, payload:{...} })
109
+ claws_wave_complete({ waveId, summary:'...', commits:[...], regressionClean:true })
110
+ // Print sentinel ONLY AFTER wave_complete returns
111
+ // LEAD_COMPLETE_<waveId>
112
+ ```
113
+
114
+ ## Schemas used
115
+
116
+ - `WaveLeadBootV1` — on boot
117
+ - `WaveLeadCompleteV1` — on wave complete
118
+ - `WorkerHeartbeatV1` — every 20 s
119
+ - `WorkerPhaseV1` — phase transitions
120
+ - `WorkerEventV1` kind=ERROR — blocking failures
121
+
122
+ ## References
123
+
124
+ - `extension/src/wave-registry.ts`
125
+ - `extension/src/event-schemas.ts`
126
+ - `.claude/skills/claws-wave-subworker/SKILL.md`
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: claws-wave-subworker
3
+ description: Sub-worker discipline contract for Claws Wave Army. Covers registration, heartbeat, phase events, and completion sequence.
4
+ type: skill
5
+ ---
6
+
7
+ # Skill: claws-wave-subworker
8
+
9
+ You are a **sub-worker** in a Claws Wave Army. Your role is one of: `tester` | `reviewer` | `auditor` | `bench` | `doc`.
10
+
11
+ ## Universal contract
12
+
13
+ | Rule | Requirement |
14
+ |---|---|
15
+ | Register | `claws_hello` with `waveId` + `subWorkerRole` + `capabilities:['push']` within 60 s |
16
+ | Boot event | Publish `wave.<waveId>.<role>.boot` immediately after hello |
17
+ | Heartbeat | Publish `worker.<peerId>.heartbeat` every 20 s — server violation at 25 s |
18
+ | Phase events | Publish `worker.<peerId>.phase` on every lifecycle transition |
19
+ | Error events | Publish `worker.<peerId>.event` kind=ERROR for any blocking failure |
20
+ | No --no-verify | Every commit must pass pre-commit hooks |
21
+ | Full suite | `npm test` before every commit — zero failures required |
22
+ | Type gate | `npx tsc --noEmit` after every `.ts` edit |
23
+ | Complete event | Publish `wave.<waveId>.<role>.complete` as **absolute final act** before sentinel |
24
+ | Sentinel order | Print role sentinel ONLY AFTER the complete event is published |
25
+
26
+ > **capabilities:['push'] is mandatory** — without it `claws_publish` is silently rejected (BUG-03). Pass it in the initial `claws_hello`.
27
+
28
+ ## Boot sequence
29
+
30
+ ```
31
+ 0. (Sidecar already running via SessionStart hook — do NOT spawn another or tail events.log; the LEAD arms Monitor for you)
32
+ 1. claws_hello({ role:'worker', peerName:'<waveId>-<role>', waveId, subWorkerRole:'<role>', capabilities:['push'] })
33
+ // Save returned peerId — use it for all subsequent publish topics (worker.<peerId>.*)
34
+ 2. Publish wave.<waveId>.<role>.boot
35
+ 3. Start heartbeat: publish worker.<peerId>.heartbeat every 20 s
36
+ 4. Begin role-specific work; publish worker.<peerId>.phase on every lifecycle transition
37
+ 5. Publish wave.<waveId>.<role>.complete ← FINAL act before sentinel
38
+ 6. Print role sentinel (e.g. ROLE_COMPLETE_<slug>) ← ONLY after complete event published
39
+ 7. Stop heartbeat
40
+ 8. Close terminal
41
+ ```
42
+
43
+ ## Role-specific contracts
44
+
45
+ **TESTER**: write failing tests first (RED phase), then re-run after LEAD commits (GREEN).
46
+ **REVIEWER**: read-only. Publish `wave.<waveId>.review.finding` per issue. CRITICAL/HIGH must be addressed.
47
+ **AUDITOR**: read-only. Sweep for race conditions, schema mismatches, error gaps, security issues.
48
+ **BENCH**: run performance benchmarks after GREEN. Compare against baseline.
49
+ **DOC**: update CHANGELOG, gap docs, template files. Never modify source `.ts` files.
50
+
51
+ ## Schemas used
52
+
53
+ - `WorkerHeartbeatV1`, `WorkerPhaseV1`, `WorkerEventV1`
54
+ - `WaveTesterRedCompleteV1`, `WaveReviewFindingV1`, `WaveAuditFindingV1`, `WaveBenchMetricV1`, `WaveDocCompleteV1`
55
+
56
+ ## References
57
+
58
+ - `extension/src/event-schemas.ts`
59
+ - `extension/src/wave-registry.ts`
60
+ - `.claude/skills/claws-wave-lead/SKILL.md`