-
-
Notifications
You must be signed in to change notification settings - Fork 80.7k
message(action=send) without to fails for plugin channels under message_tool_only #94597
Copy link
Copy link
Open
Labels
P1High-priority user-facing bug, regression, or broken workflow.High-priority user-facing bug, regression, or broken workflow.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.ClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.Channel message delivery can be lost, duplicated, or misrouted.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.Good issue quality with a plausible reproduction path needing some confirmation.
Description
Metadata
Metadata
Assignees
Labels
P1High-priority user-facing bug, regression, or broken workflow.High-priority user-facing bug, regression, or broken workflow.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.ClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.Channel message delivery can be lost, duplicated, or misrouted.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.Good issue quality with a plausible reproduction path needing some confirmation.
Type
Fields
Priority
None yet
Environment
messages.groupChat.visibleReplies: "message_tool"Steps to reproduce
messages.groupChat.visibleRepliesto"message_tool"message({action: "send", text: "hello"})without explicitto/targetExpected behavior
message(action=send)withouttoshould auto-resolve the current conversation target and deliver the message to the group.Actual behavior
message({action: "send"})withouttoreturns{ success: false }with no error message.toIS explicitly provided, it works correctly.visibleRepliesto"automatic"works around the issue.Root cause analysis
Core issue:
shouldUseInternalSourceReplySinkintercepts plugin channelsIn
internal-source-reply.ts,shouldUseInternalSourceReplySink()interceptsmessage(action=send)calls whensourceReplyDeliveryMode === "message_tool_only"and the call has no explicit route params (to/target/channelId). It checkshasConfiguredCurrentSourceChannel()as a fallback, but this returnsfalsefor external plugin channels. The call is routed tohandleInternalSourceReplySendAction()— an internal UI reply sink — and never reaches the plugin'shandleAction.Plugin parameter reading (already fixed)
The plugin's
handleActionwas readingctx.argsinstead ofctx.params, and session target extraction usedparts[2]instead of the last segment. These have been fixed in the plugin.Request
shouldUseInternalSourceReplySink()should check whether the current channel plugin has an activehandleAction/ outbound path and route to the plugin instead of the internal sink when the plugin is capable of handling the send action.