Files
Dirigent/TASKLIST.md
zhi e4454bfc1a refactor: remove turn tools, rename discord tools, rewrite installer
- Remove turn management tools (turn-status/advance/reset) — internal only,
  accessible via /dirigent slash commands
- Rename discord tools: dirigent_discord_channel_create,
  dirigent_discord_channel_update, dirigent_discord_member_list
- Rewrite install script:
  - Dynamic OpenClaw dir resolution (OPENCLAW_DIR env → openclaw CLI → ~/.openclaw)
  - Plugin installed to $(openclaw_dir)/plugins/dirigent
  - New --update mode: git pull from latest branch + reinstall
  - Cleaner uninstall: removes installed plugin files
- Update docs (FEAT.md, README.md, CHANGELOG.md, TASKLIST.md)
2026-03-07 17:24:36 +00:00

4.0 KiB
Raw Blame History

Dirigent Fixes & Improvements

Note: Project rename from WhisperGate → Dirigent implies updating all code/docs references (plugin/tool names, strings, files, configs).

1) Identity Prompt Enhancements

  • Current prompt only includes agent-id + discord name.
  • Add Discord userId to identity injection.
  • Done: buildAgentIdentity() now resolves and includes Discord userId via resolveDiscordUserId().

2) Scheduling Identifier (Default: ➡️)

  • Add a configurable scheduling identifier (default: ➡️).
  • Update agent prompt to explain:
    • The scheduling identifier itself is meaningless.
    • When receiving <@USER_ID> + scheduling identifier, the agent should check chat history and decide whether to reply.
    • If no reply needed, return NO_REPLY.
  • Done: Added schedulingIdentifier config field; buildSchedulingIdentifierInstruction() injected for group chats.

3) Moderator Handoff Message Format

  • Moderator should no longer send semantic messages to activate agents.
  • Replace with: <@TARGET_USER_ID> + scheduling identifier (e.g., <@123>➡️).
  • Done: Both before_message_write and message_sent handoff messages now use <@userId> + scheduling identifier format.

4) Prompt Language

  • All prompts must be in English (including end-marker instructions and group-chat rules).
  • Done: buildEndMarkerInstruction() and buildSchedulingIdentifierInstruction() output English. Slash command help text in English.

5) Full Project Rename

  • Project name changed to Dirigent.
  • Update all strings across repo:
    • plugin name/id → dirigent
    • tool name → dirigent_tools
    • slash command → /dirigent
    • docs, config, scripts, examples
    • any text mentions
    • dist output dir → dist/dirigent
    • docker service → dirigent-no-reply-api
    • config key fallback: still reads legacy whispergate entry if dirigent not found
  • Done: All files updated.

6) Split dirigent_tools into Individual Tools

  • Before: Single dirigent_tools tool with action parameter managing 9 sub-actions.
  • After: 6 individual tools (Discord tools prefixed dirigent_discord_*):
    • dirigent_discord_channel_create — Create private Discord channel
    • dirigent_discord_channel_update — Update channel permissions
    • dirigent_discord_member_list — List guild members
    • dirigent_policy_get — Get all channel policies
    • dirigent_policy_set — Set/update a channel policy
    • dirigent_policy_delete — Delete a channel policy
  • Turn management (status/advance/reset) NOT exposed as tools — purely internal plugin logic, accessible via /dirigent slash commands.
  • Shared Discord API helper executeDiscordAction() extracted to reduce duplication.
  • Done: All tools registered individually with specific parameter schemas.

7) Human @Mention Override

  • When a message from a humanList user contains <@USER_ID> mentions:
    • Extract mentioned Discord user IDs from the message content.
    • Map user IDs → accountIds via bot token decoding (reverse of resolveDiscordUserId).
    • Filter to agents in the current turn order.
    • Order by their position in the current turn order.
    • Temporarily replace the speaking order with only those agents.
    • After the cycle returns to the first agent, restore the original order and go dormant.
  • Edge cases handled:
    • All override agents NO_REPLY → restore original order, go dormant.
    • resetTurn clears any active override.
    • New human message without mentions → restores override before normal handling.
    • Mentioned users not in turn order → ignored, normal flow.
  • New functions in turn-manager.ts: setMentionOverride(), hasMentionOverride().
  • New helpers in index.ts: buildUserIdToAccountIdMap(), extractMentionedUserIds().
  • Done: Override logic integrated in message_received handler.

Open Items / Notes

  • User requested the previous README commit should have been pushed to main directly (was pushed to a branch). Address separately if needed.