115 lines
3.3 KiB
Markdown
115 lines
3.3 KiB
Markdown
# WhisperGate
|
||
|
||
Rule-based no-reply gate + turn manager for OpenClaw (Discord).
|
||
|
||
## What it does
|
||
|
||
WhisperGate adds deterministic logic **before model selection** and **turn-based speaking** for multi-agent Discord channels:
|
||
|
||
- **Rule gate (before_model_resolve)**
|
||
1. Non-Discord → skip
|
||
2. Sender in bypass list / human list → skip
|
||
3. Message ends with configured end symbol → skip
|
||
4. Otherwise → route to no-reply model/provider
|
||
|
||
- **End-symbol enforcement**
|
||
- Injects instruction like: `你的这次发言必须以🔚作为结尾…`
|
||
- In group chats, also injects: “无关/不需要回应就 NO_REPLY”
|
||
|
||
- **Turn-based speaking (multi-bot)**
|
||
- Only the current speaker is allowed to respond
|
||
- Others are forced to no-reply
|
||
- Turn advances on **end-symbol** or **NO_REPLY**
|
||
- If all bots NO_REPLY, channel becomes **dormant** until a new human message
|
||
|
||
- **Moderator handoff (optional)**
|
||
- When the current speaker NO_REPLYs, a moderator bot can post a handoff message to wake the next speaker
|
||
|
||
- **Per-channel policy runtime**
|
||
- Policies stored in a standalone JSON file
|
||
- Update at runtime via `whispergate_tools` (memory first → persist to file)
|
||
|
||
- **Discord control actions (optional)**
|
||
- Private channel create/update + member list
|
||
- Unified via `whispergate_tools`
|
||
|
||
---
|
||
|
||
## Repo layout
|
||
|
||
- `plugin/` — OpenClaw plugin (gate + turn manager + moderator presence)
|
||
- `no-reply-api/` — OpenAI-compatible API that always returns `NO_REPLY`
|
||
- `discord-control-api/` — Discord 管理扩展 API(私密频道 + 成员列表)
|
||
- `docs/` — rollout, integration, run-mode notes, turn-wakeup analysis
|
||
- `scripts/` — smoke/dev/helper checks
|
||
- `Makefile` — common dev commands (`make check`, `make check-rules`, `make test-api`, `make smoke-discord-control`, `make up`)
|
||
- `CHANGELOG.md` — milestone summary
|
||
|
||
---
|
||
|
||
## Quick start (no Docker)
|
||
|
||
```bash
|
||
cd no-reply-api
|
||
node server.mjs
|
||
```
|
||
|
||
Then render config snippet:
|
||
|
||
```bash
|
||
node scripts/render-openclaw-config.mjs
|
||
```
|
||
|
||
See `docs/RUN_MODES.md` for Docker mode.
|
||
Discord 扩展能力见:`docs/DISCORD_CONTROL.md`。
|
||
|
||
---
|
||
|
||
## Runtime tools & commands
|
||
|
||
### Tool: `whispergate_tools`
|
||
|
||
Actions:
|
||
- `policy-get`, `policy-set-channel`, `policy-delete-channel`
|
||
- `turn-status`, `turn-advance`, `turn-reset`
|
||
- `channel-private-create`, `channel-private-update`, `member-list`
|
||
|
||
### Slash command (Discord)
|
||
|
||
```
|
||
/whispergate status
|
||
/whispergate turn-status
|
||
/whispergate turn-advance
|
||
/whispergate turn-reset
|
||
```
|
||
|
||
---
|
||
|
||
## Config highlights
|
||
|
||
Common options (see `docs/INTEGRATION.md`):
|
||
|
||
- `listMode`: `human-list` or `agent-list`
|
||
- `humanList`, `agentList`
|
||
- `endSymbols`
|
||
- `channelPoliciesFile` (per-channel overrides)
|
||
- `moderatorBotToken` (handoff messages)
|
||
- `enableDebugLogs`, `debugLogChannelIds`
|
||
|
||
---
|
||
|
||
## Development plan (incremental commits)
|
||
|
||
- [x] Task 1: project docs + structure
|
||
- [x] Task 2: no-reply API MVP
|
||
- [x] Task 3: plugin MVP with rule chain
|
||
- [x] Task 4: sample config + quick verification scripts
|
||
- [x] Task 5: plugin rule extraction + hardening
|
||
- [x] Task 6: containerization + compose
|
||
- [x] Task 7: plugin usage notes
|
||
- [x] Task 8: sender normalization + TTL + one-shot decision
|
||
- [x] Task 9: auth-aware no-reply API
|
||
- [x] Task 10: smoke test helpers
|
||
- [x] Task 11: plugin structure checker
|
||
- [x] Task 12: rollout checklist
|