zhi 1d8881577d feat: turn-based speaking + slash commands + enhanced prompts
1. Rename tool: whispergateway_tools → whispergate_tools

2. Turn-based speaking mechanism:
   - New turn-manager.ts maintains per-channel turn state
   - ChannelPolicy新增turnOrder字段配置发言顺序
   - before_model_resolve hook检查当前agent是否为发言人
   - 非当前发言人直接切换到no-reply模型
   - message_sent hook检测结束符或NO_REPLY时推进turn
   - message_received检测到human消息时重置turn

3. 注入提示词增强:
   - buildEndMarkerInstruction增加isGroupChat参数
   - 群聊时追加规则:与自己无关时主动回复NO_REPLY

4. Slash command支持:
   - /whispergate status - 查看频道策略
   - /whispergate turn-status - 查看轮流状态
   - /whispergate turn-advance - 手动推进轮流
   - /whispergate turn-reset - 重置轮流顺序
2026-02-28 12:10:52 +00:00

WhisperGate

Rule-based no-reply gate for OpenClaw.

What it does

WhisperGate adds a deterministic gate before model selection:

  1. If message is not from Discord → skip gate
  2. If sender is in bypass user list → skip gate
  3. If message ends with configured end-symbol → skip gate
  4. Otherwise switch this turn to a no-reply model/provider

The no-reply provider returns NO_REPLY for any input.


Repo layout

  • plugin/ — OpenClaw plugin (before_model_resolve hook)
  • no-reply-api/ — OpenAI-compatible minimal API that always returns NO_REPLY
  • discord-control-api/ — Discord 管理扩展 API私密频道 + 成员列表)
  • docs/ — rollout, integration, run-mode notes
  • 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)

cd no-reply-api
node server.mjs

Then render config snippet:

node scripts/render-openclaw-config.mjs

See docs/RUN_MODES.md for Docker mode.

Discord 扩展能力见:docs/DISCORD_CONTROL.md


Development plan (incremental commits)

  • Task 1: project docs + structure
  • Task 2: no-reply API MVP
  • Task 3: plugin MVP with rule chain
  • Task 4: sample config + quick verification scripts
  • Task 5: plugin rule extraction + hardening
  • Task 6: containerization + compose
  • Task 7: plugin usage notes
  • Task 8: sender normalization + TTL + one-shot decision
  • Task 9: auth-aware no-reply API
  • Task 10: smoke test helpers
  • Task 11: plugin structure checker
  • Task 12: rollout checklist
Description
Rule-based no-reply gate for OpenClaw
Readme 1.6 MiB
Languages
TypeScript 75.7%
JavaScript 23.8%
Shell 0.4%
Makefile 0.1%