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.
- package/.claude/commands/claws-auto.md +90 -0
- package/.claude/commands/claws-bin.md +28 -0
- package/.claude/commands/claws-cleanup.md +28 -0
- package/.claude/commands/claws-do.md +82 -0
- package/.claude/commands/claws-fix.md +40 -0
- package/.claude/commands/claws-goal.md +111 -0
- package/.claude/commands/claws-help.md +54 -0
- package/.claude/commands/claws-plan.md +103 -0
- package/.claude/commands/claws-report.md +29 -0
- package/.claude/commands/claws-status.md +37 -0
- package/.claude/commands/claws-update.md +32 -0
- package/.claude/commands/claws.md +64 -0
- package/.claude/rules/claws-default-behavior.md +76 -0
- package/.claude/settings.json +112 -0
- package/.claude/settings.local.json +19 -0
- package/.claude/skills/claws-auto-engine/SKILL.md +97 -0
- package/.claude/skills/claws-goal-tracker/SKILL.md +106 -0
- package/.claude/skills/claws-prompt-templates/SKILL.md +203 -0
- package/.claude/skills/claws-wave-lead/SKILL.md +126 -0
- package/.claude/skills/claws-wave-subworker/SKILL.md +60 -0
- package/CHANGELOG.md +1949 -0
- package/LICENSE +21 -0
- package/README.md +420 -0
- package/bin/cli.js +84 -0
- package/cli.js +223 -0
- package/docs/ARCHITECTURE.md +511 -0
- package/docs/event-protocol.md +588 -0
- package/docs/features.md +562 -0
- package/docs/guide.md +891 -0
- package/docs/index.html +716 -0
- package/docs/protocol.md +323 -0
- package/extension/.vscodeignore +15 -0
- package/extension/CHANGELOG.md +1906 -0
- package/extension/LICENSE +21 -0
- package/extension/README.md +137 -0
- package/extension/docs/features.md +424 -0
- package/extension/docs/protocol.md +197 -0
- package/extension/esbuild.mjs +25 -0
- package/extension/icon.png +0 -0
- package/extension/native/.metadata.json +10 -0
- package/extension/native/node-pty/LICENSE +69 -0
- package/extension/native/node-pty/README.md +165 -0
- package/extension/native/node-pty/lib/conpty_console_list_agent.js +16 -0
- package/extension/native/node-pty/lib/conpty_console_list_agent.js.map +1 -0
- package/extension/native/node-pty/lib/eventEmitter2.js +47 -0
- package/extension/native/node-pty/lib/eventEmitter2.js.map +1 -0
- package/extension/native/node-pty/lib/index.js +52 -0
- package/extension/native/node-pty/lib/index.js.map +1 -0
- package/extension/native/node-pty/lib/interfaces.js +7 -0
- package/extension/native/node-pty/lib/interfaces.js.map +1 -0
- package/extension/native/node-pty/lib/shared/conout.js +11 -0
- package/extension/native/node-pty/lib/shared/conout.js.map +1 -0
- package/extension/native/node-pty/lib/terminal.js +190 -0
- package/extension/native/node-pty/lib/terminal.js.map +1 -0
- package/extension/native/node-pty/lib/types.js +7 -0
- package/extension/native/node-pty/lib/types.js.map +1 -0
- package/extension/native/node-pty/lib/unixTerminal.js +346 -0
- package/extension/native/node-pty/lib/unixTerminal.js.map +1 -0
- package/extension/native/node-pty/lib/utils.js +39 -0
- package/extension/native/node-pty/lib/utils.js.map +1 -0
- package/extension/native/node-pty/lib/windowsConoutConnection.js +125 -0
- package/extension/native/node-pty/lib/windowsConoutConnection.js.map +1 -0
- package/extension/native/node-pty/lib/windowsPtyAgent.js +320 -0
- package/extension/native/node-pty/lib/windowsPtyAgent.js.map +1 -0
- package/extension/native/node-pty/lib/windowsTerminal.js +199 -0
- package/extension/native/node-pty/lib/windowsTerminal.js.map +1 -0
- package/extension/native/node-pty/lib/worker/conoutSocketWorker.js +22 -0
- package/extension/native/node-pty/lib/worker/conoutSocketWorker.js.map +1 -0
- package/extension/native/node-pty/package.json +64 -0
- package/extension/native/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
- package/extension/native/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
- package/extension/native/node-pty/prebuilds/darwin-x64/pty.node +0 -0
- package/extension/native/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
- package/extension/native/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/extension/native/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/extension/native/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
- package/extension/native/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/extension/native/node-pty/prebuilds/win32-arm64/pty.node +0 -0
- package/extension/native/node-pty/prebuilds/win32-arm64/winpty-agent.exe +0 -0
- package/extension/native/node-pty/prebuilds/win32-arm64/winpty.dll +0 -0
- package/extension/native/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/extension/native/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/extension/native/node-pty/prebuilds/win32-x64/conpty.node +0 -0
- package/extension/native/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/extension/native/node-pty/prebuilds/win32-x64/pty.node +0 -0
- package/extension/native/node-pty/prebuilds/win32-x64/winpty-agent.exe +0 -0
- package/extension/native/node-pty/prebuilds/win32-x64/winpty.dll +0 -0
- package/extension/package-lock.json +605 -0
- package/extension/package.json +343 -0
- package/extension/scripts/bundle-native.mjs +104 -0
- package/extension/scripts/deploy-dev.mjs +60 -0
- package/extension/src/ansi-strip.ts +52 -0
- package/extension/src/backends/vscode/claws-pty.ts +483 -0
- package/extension/src/backends/vscode/status-bar.ts +99 -0
- package/extension/src/backends/vscode/vscode-backend.ts +282 -0
- package/extension/src/capture-store.ts +125 -0
- package/extension/src/event-log.ts +629 -0
- package/extension/src/event-schemas.ts +478 -0
- package/extension/src/extension.js +492 -0
- package/extension/src/extension.ts +873 -0
- package/extension/src/lifecycle-engine.ts +60 -0
- package/extension/src/lifecycle-rules.ts +171 -0
- package/extension/src/lifecycle-store.ts +506 -0
- package/extension/src/peer-registry.ts +176 -0
- package/extension/src/pipeline-registry.ts +82 -0
- package/extension/src/platform.ts +64 -0
- package/extension/src/protocol.ts +532 -0
- package/extension/src/server-config.ts +98 -0
- package/extension/src/server.ts +2210 -0
- package/extension/src/task-registry.ts +51 -0
- package/extension/src/terminal-backend.ts +211 -0
- package/extension/src/terminal-manager.ts +395 -0
- package/extension/src/topic-registry.ts +70 -0
- package/extension/src/topic-utils.ts +46 -0
- package/extension/src/transport.ts +45 -0
- package/extension/src/uninstall-cleanup.ts +232 -0
- package/extension/src/wave-registry.ts +314 -0
- package/extension/src/websocket-transport.ts +153 -0
- package/extension/tsconfig.json +23 -0
- package/lib/capabilities.js +145 -0
- package/lib/dry-run.js +43 -0
- package/lib/install.js +1018 -0
- package/lib/mcp-setup.js +92 -0
- package/lib/platform.js +240 -0
- package/lib/preflight.js +152 -0
- package/lib/shell-hook.js +343 -0
- package/lib/uninstall.js +162 -0
- package/lib/verify.js +166 -0
- package/mcp_server.js +3529 -0
- package/package.json +48 -0
- package/rules/claws-default-behavior.md +72 -0
- package/scripts/_helpers/atomic-file.mjs +137 -0
- package/scripts/_helpers/fix-repair.js +64 -0
- package/scripts/_helpers/json-safe.mjs +218 -0
- package/scripts/bump-version.sh +84 -0
- package/scripts/codegen/gen-docs.mjs +61 -0
- package/scripts/codegen/gen-json-schema.mjs +62 -0
- package/scripts/codegen/gen-mcp-tools.mjs +358 -0
- package/scripts/codegen/gen-types.mjs +172 -0
- package/scripts/codegen/index.mjs +42 -0
- package/scripts/dev-hooks/check-extension-dirs.js +77 -0
- package/scripts/dev-hooks/check-open-claws-terminals.js +70 -0
- package/scripts/dev-hooks/check-stale-main.js +55 -0
- package/scripts/dev-hooks/check-tag-pushed.js +51 -0
- package/scripts/dev-hooks/check-tag-vs-main.js +56 -0
- package/scripts/dev-vsix-install.sh +60 -0
- package/scripts/fix.sh +702 -0
- package/scripts/gen-client-types.mjs +81 -0
- package/scripts/git-hooks/pre-commit +31 -0
- package/scripts/hooks/lifecycle-state.js +61 -0
- package/scripts/hooks/package.json +4 -0
- package/scripts/hooks/post-tool-use-claws.js +292 -0
- package/scripts/hooks/pre-bash-no-verify-block.js +72 -0
- package/scripts/hooks/pre-tool-use-claws.js +206 -0
- package/scripts/hooks/session-start-claws.js +97 -0
- package/scripts/hooks/stop-claws.js +88 -0
- package/scripts/inject-claude-md.js +205 -0
- package/scripts/inject-dev-hooks.js +96 -0
- package/scripts/inject-global-claude-md.js +140 -0
- package/scripts/inject-settings-hooks.js +370 -0
- package/scripts/install.ps1 +146 -0
- package/scripts/install.sh +1729 -0
- package/scripts/monitor-arm-watch.js +155 -0
- package/scripts/rebuild-node-pty.sh +245 -0
- package/scripts/report.sh +232 -0
- package/scripts/shell-hook.fish +164 -0
- package/scripts/shell-hook.ps1 +33 -0
- package/scripts/shell-hook.sh +232 -0
- package/scripts/stream-events.js +399 -0
- package/scripts/terminal-wrapper.sh +36 -0
- package/scripts/test-enforcement.sh +132 -0
- package/scripts/test-install.sh +174 -0
- package/scripts/test-installer-parity.sh +135 -0
- package/scripts/test-template-enforcement.sh +76 -0
- package/scripts/uninstall.sh +143 -0
- package/scripts/update.sh +337 -0
- package/scripts/verify-release.sh +323 -0
- package/scripts/verify-wrapped.sh +194 -0
- package/templates/CLAUDE.global.md +135 -0
- 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`
|