Files
Dirigent/TASKLIST.md
zhi 0729e83b38 feat: split dirigent_tools into individual tools + human @mention override
Feature 1: Split dirigent_tools
- Replace monolithic dirigent_tools (9 actions) with 9 individual tools
- Discord: dirigent_channel_create, dirigent_channel_update, dirigent_member_list
- Policy: dirigent_policy_get, dirigent_policy_set, dirigent_policy_delete
- Turn: dirigent_turn_status, dirigent_turn_advance, dirigent_turn_reset
- Extract shared executeDiscordAction() helper

Feature 2: Human @mention override
- When humanList user @mentions agents, temporarily override turn order
- Only mentioned agents cycle, ordered by their turn order position
- Original order restores when cycle returns to first agent or all NO_REPLY
- New: setMentionOverride(), hasMentionOverride(), extractMentionedUserIds()
- New: buildUserIdToAccountIdMap() for reverse userId→accountId resolution

Bump version to 0.3.0
2026-03-07 16:55:01 +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: 9 individual tools, each with focused parameters:
    • dirigent_channel_create — Create private Discord channel
    • dirigent_channel_update — Update channel permissions
    • dirigent_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
    • dirigent_turn_status — Show turn status
    • dirigent_turn_advance — Manually advance turn
    • dirigent_turn_reset — Reset turn order
  • 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.