- Task 1: Identity prompt now includes Discord userId
- Task 2: Added configurable schedulingIdentifier (default: ➡️)
- Task 3: Moderator handoff uses <@userId>+identifier instead of semantic messages
- Task 4: All prompts/comments/help text converted to English
- Task 5: Full project rename WhisperGate → Dirigent across all files
Breaking: config key changed from plugins.entries.whispergate to plugins.entries.dirigent
Breaking: channel policies file renamed to dirigent-channel-policies.json
Breaking: tool name changed from whispergate_tools to dirigent_tools
1.5 KiB
1.5 KiB
PR Summary (Dirigent + Discord Control)
Scope
This PR delivers two tracks:
- Dirigent deterministic no-reply gate for Discord sessions
- Discord control extension API for private-channel/member-list gaps
Delivered Features
Dirigent
- Deterministic rule chain:
- non-discord => skip
- bypass sender => skip
- ending symbol matched => skip
- else => no-reply provider/model override
NO_REPLYbackend API (/v1/chat/completions,/v1/responses,/v1/models)- Optional API bearer auth (
AUTH_TOKEN) - Prompt prepend on bypass/end-symbol paths:
你的这次发言必须以🔚作为结尾。
- Rule validation script and fixtures
Discord Control API
channel-private-createchannel-private-update(merge/replace)member-listwith optional field projection- Action gate + guild allowlist + caller allowlist + bearer auth
- Dry-run support for channel private actions
Runtime Mode
- No-Docker-first
- Run directly with Node.js
Security Defaults (recommended)
- Set
AUTH_TOKEN - Set
REQUIRE_AUTH_TOKEN=true - Use
ALLOWED_GUILD_IDS - Use
ALLOWED_CALLER_IDS - Keep Discord bot token in env only (
DISCORD_BOT_TOKEN)
Known Limits
- This repo cannot elevate bot privileges; Discord admin permissions still govern all actions.
member-listdepends on Discord API permission/intents availability.
Rollback
- Disable plugin entry or remove plugin path from OpenClaw config
- Stop
discord-control-apiprocess - Keep no-reply API stopped if not needed