fix: reply in the Slack DM thread the user wrote in
- chat-sdk-bridge: forward thread.id to the router for DMs so sub-thread context survives into delivery. Previously hardcoded to null, which collapsed every reply to the DM top level. - router: when a DM (is_group=0) is wired as `shared`, don't auto-escalate to per-thread — keep one session for the whole DM and let thread_id flow through to the adapter. - agent-runner poll-loop: defer follow-up messages whose thread_id differs from the active turn's routing. Mixing threads into one streaming turn sent every reply to the first thread because routing is captured at turn start. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
exe.dev user
parent
79fd142be4
commit
fdece8047e
@@ -144,8 +144,12 @@ export async function routeInbound(event: InboundEvent): Promise<void> {
|
||||
// wiring says, because "thread = session" is the first-class model for
|
||||
// threaded platforms. Agent-shared is preserved because it expresses a
|
||||
// cross-channel intent the adapter can't know about.
|
||||
//
|
||||
// Exception: DMs (is_group=0). Sub-threads within a DM are a UX affordance,
|
||||
// not a conversation boundary — treat the whole DM as one session and let
|
||||
// threadId flow through to delivery so replies land in the right sub-thread.
|
||||
let effectiveSessionMode = match.session_mode;
|
||||
if (adapter && adapter.supportsThreads && effectiveSessionMode !== 'agent-shared') {
|
||||
if (adapter && adapter.supportsThreads && effectiveSessionMode !== 'agent-shared' && mg.is_group !== 0) {
|
||||
effectiveSessionMode = 'per-thread';
|
||||
}
|
||||
const { session, created } = resolveSession(match.agent_group_id, mg.id, event.threadId, effectiveSessionMode);
|
||||
|
||||
Reference in New Issue
Block a user