Skip to content

Commit 0831291

Browse files
SeHoJooclaude
andcommitted
fix(slack): disable streaming when thinking_placeholder is off; gray out in UI
Streaming requires a placeholder message to edit into. When thinking_placeholder is false, StreamEnabled() now returns false so the final response is always sent as a new message (triggering push notification). UI: dm_stream and group_stream fields are disabled with a hint when thinking_placeholder is toggled off. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b302146 commit 0831291

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

internal/channels/slack/stream.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,12 @@ func (s *slackStream) MsgTS() string {
6969
}
7070

7171
// StreamEnabled reports whether streaming is active for DMs or groups.
72+
// Streaming requires a placeholder message to edit into; if thinking_placeholder
73+
// is disabled, streaming is also disabled and the final response is sent as a new message.
7274
func (c *Channel) StreamEnabled(isGroup bool) bool {
75+
if c.disableThinking {
76+
return false
77+
}
7378
if isGroup {
7479
return c.config.GroupStream != nil && *c.config.GroupStream
7580
}

ui/web/src/pages/channels/channel-schemas.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,10 @@ export const configSchema: Record<string, FieldDef[]> = {
115115
{ key: "group_policy", label: "Group Policy", type: "select", options: groupPolicyOptions, defaultValue: "pairing", help: "How to handle messages from channels/groups" },
116116
{ key: "require_mention", label: "Require @mention in channels", type: "boolean", defaultValue: true, help: "Bot only responds when explicitly @mentioned in channels (recommended)" },
117117
{ key: "history_limit", label: "Group History Limit", type: "number", defaultValue: 50, help: "Max pending group messages for context (0 = disabled)" },
118-
{ key: "dm_stream", label: "DM Streaming", type: "boolean", defaultValue: true, help: "Progressively edit placeholder message as LLM generates (DMs)" },
119-
{ key: "group_stream", label: "Group Streaming", type: "boolean", defaultValue: false, help: "Progressively edit placeholder message as LLM generates (channels)" },
120-
{ key: "native_stream", label: "Native Streaming (Agents & AI Apps)", type: "boolean", defaultValue: false, help: "Use Slack's ChatStreamer API for native streaming. Falls back to edit-in-place if unavailable." },
121118
{ key: "thinking_placeholder", label: "Thinking Placeholder", type: "boolean", defaultValue: true, help: "Send \"Thinking...\" before responding. Disable to skip the placeholder — the final response arrives as a new message and triggers a push notification on completion." },
119+
{ key: "dm_stream", label: "DM Streaming", type: "boolean", defaultValue: true, help: "Progressively edit placeholder message as LLM generates (DMs)", disabledWhen: { key: "thinking_placeholder", value: "false", hint: "Requires Thinking Placeholder to be enabled" } },
120+
{ key: "group_stream", label: "Group Streaming", type: "boolean", defaultValue: false, help: "Progressively edit placeholder message as LLM generates (channels)", disabledWhen: { key: "thinking_placeholder", value: "false", hint: "Requires Thinking Placeholder to be enabled" } },
121+
{ key: "native_stream", label: "Native Streaming (Agents & AI Apps)", type: "boolean", defaultValue: false, help: "Use Slack's ChatStreamer API for native streaming. Falls back to edit-in-place if unavailable." },
122122
{ key: "debounce_delay", label: "Debounce Delay (ms)", type: "number", defaultValue: 300, help: "Milliseconds to wait before dispatching rapid messages. Set 0 to disable." },
123123
{ key: "thread_ttl", label: "Thread Participation TTL (hours)", type: "number", defaultValue: 24, help: "Hours before bot stops auto-replying in threads it participated in. 0 = always require @mention." },
124124
{ key: "reaction_level", label: "Reaction Level", type: "select", options: [{ value: "off", label: "Off" }, { value: "minimal", label: "Minimal (thinking + done)" }, { value: "full", label: "Full (all status emoji)" }], defaultValue: "off", help: "Show emoji reactions on user messages during agent processing" },

0 commit comments

Comments
 (0)