Josh Avant
d777460966
fix(slack): apply sender policy to group DMs ( #104007 )
2026-07-10 19:57:58 -05:00
xingzhou
babc287afe
fix(slack): time out stalled external file uploads ( #103442 )
...
* fix(slack): time out stalled external file uploads
* fix(slack): scope external upload timeout
* fix(slack): restrict external upload transport
* fix(slack): restrict external upload transport
* fix(slack): preserve external upload retry safety
* test(slack): use compatible guarded fetch runtime
* test(plugin-sdk): update public export baseline
* fix(slack): harden external upload delivery
* refactor(slack): isolate upload completion
Keep ordinary Enterprise Grid traffic on the Bolt listener client. Use a team-scoped no-retry client only for one-shot external upload completion, while preserving the bounded raw-upload timeout and safe durable replay classification.
* fix(slack): refresh upload release metadata
* chore(slack): leave release notes release-owned
* fix(slack): classify failed uploads before completion
* fix(slack): keep upload completion untimed
* test(plugin-sdk): refresh public export baseline
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 23:52:35 +01:00
JC
59e95fe3fd
feat: support GPT-5.6 Ultra across OpenClaw and Codex runtimes ( #98021 )
...
* feat: support GPT-5.6 Ultra across agent runtimes
Co-authored-by: J Cai <anyech@gmail.com >
* fix: keep harness projections discovery-free
* fix(codex): mirror V2 native subagent tasks
* chore: refresh plugin SDK surface budgets
* test: expose Ultra wire effort proof
* test(cron): avoid hoisted mock initialization race
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 15:23:24 +01:00
RickLin
f74e0184a6
fix(slack): remember event-carried channel types so mpDMs key one session ( #102676 ) ( #102811 )
...
* fix(slack): remember event-carried channel types so mpDMs key one session (#102676 )
Human-authored mpDM messages carry channel_type: "mpim" and key the room
slack:group:<channelId>. Bot-authored ingress shapes omit channel_type; when the
conversations.info fill cannot resolve the type either (e.g. missing mpim:read scope),
C-prefix inference falls back to "channel" and keys a second, parallel
slack:channel:<channelId> session for the same room — modern mpDM ids are C-prefixed,
so prefix inference cannot disambiguate.
Remember explicit channel_type values already seen on events for each channel (bounded
process-local map alongside the existing channel/user caches) and consult that memory
after the event value and the channel-info fill, before prefix inference. The
system-event session-key resolver consults the same memory so system events for the
room key identically. No new network lookups; classification stays consistent with
normalizeSlackChannelType on every ingress path.
* fix(slack): scope remembered channel types by event scope
Key the remembered channel_type map with the same account/team scoping as
channelCache (scopedKey), so multi-workspace enterprise installs cannot
cross-contaminate remembered types between scopes that share a channel id.
* fix(slack): keep mpDM events on one session
Cache explicit Slack channel types at the monitor boundary so typeless bot/edit/delete events reuse mpDM group sessions without poisoning metadata lookup.
Co-authored-by: RickLin <ObliviateRickLin@users.noreply.github.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: RickLin <ObliviateRickLin@users.noreply.github.com >
2026-07-10 10:24:43 +01:00
Peter Steinberger
ffa3d9a336
fix(slack): restore folded IDs at Web API boundaries ( #103214 )
...
* fix(slack): preserve delivery target case
Co-authored-by: 唐梓夷0668001293 <tang.ziyi@xydigit.com >
* fix(slack): restore API IDs at Web API boundaries
Co-authored-by: 唐梓夷0668001293 <tang.ziyi@xydigit.com >
---------
Co-authored-by: 唐梓夷0668001293 <tang.ziyi@xydigit.com >
2026-07-10 06:37:57 +01:00
Peter Steinberger
fa3eb673cd
feat(slack): accept spoken mentions in audio clips ( #103416 )
...
* feat(slack): support spoken audio mentions
* chore: keep release notes in PR body
2026-07-09 22:33:26 -07:00
Peter Steinberger
add2c586c2
feat(slack): support native chart presentations ( #102635 )
2026-07-10 04:05:23 +01:00
Peter Steinberger
36227737c5
fix(slack): preserve standalone reply anchors ( #102905 )
...
Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com >
2026-07-09 15:56:52 +01:00
lzyyzznl
0aae1ea816
fix(slack): use truncateUtf16Safe for message body preview truncation ( #102612 )
...
* fix(slack): use truncateUtf16Safe for message body preview truncation
One .slice(0, 160) truncation site in the Slack message handler may
cut UTF-16 surrogate pairs in half when the message body preview
contains multi-byte characters such as emoji. Replace it with
truncateUtf16Safe to keep the truncated output valid Unicode.
* test(slack): cover UTF-16 preview boundary
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 12:37:49 +01:00
Peter Steinberger
42a8679c4d
fix: restore release validation on main ( #102516 )
...
* test(qqbot): assert approval fence exactly
* fix(release): wait for ClawHub publish logging
* fix(ci): repair Bun global install smoke
* test(slack): fix app identity fixture
2026-07-09 09:39:08 +01:00
kevinlin-openai
245b91b83d
feat(slack): support Enterprise Grid org installs ( #102372 )
...
* feat(slack): support Enterprise Grid org installs
* docs: refresh generated docs map
* fix(slack): satisfy enterprise routing CI
* fix(slack): accept org auth without app id
* docs(plugin-sdk): document channel policy hooks
* fix(slack): reuse canonical sender for enterprise replies
* test(slack): fix enterprise sender lint
---------
Co-authored-by: Kevin Lin <kevin@dendron.so >
2026-07-08 23:53:19 -07:00
Vincent Koc
7e0324263b
fix(text): keep reachable truncation boundaries UTF-16 safe
...
Consolidates #102007 , #101818 , and #101782 .
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
Co-authored-by: NIO <nocodet@mail.com >
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-07 23:37:52 -07:00
Vincent Koc
5a5b4c5b10
refactor(slack): localize internal declarations ( #102044 )
2026-07-07 22:39:20 -07:00
Vincent Koc
22ae651e9a
fix(channels): keep native think menus responsive ( #101926 )
2026-07-07 18:58:39 -07:00
Ayaan Zaidi
e3b43a0001
perf(slack): bound thread history pagination
2026-07-08 03:40:37 +05:30
Ayaan Zaidi
1993ead6f5
perf(slack): drop process-wide write client concurrency cap
2026-07-08 03:40:37 +05:30
Ayaan Zaidi
04b55c35d2
perf(slack): parallelize independent inbound prepare lookups
2026-07-08 03:40:37 +05:30
Vincent Koc
b88f80940a
refactor: localize internal implementation symbols ( #101831 )
2026-07-07 10:23:36 -07:00
Vincent Koc
3d206140f3
refactor: localize internal implementation constants ( #101758 )
2026-07-07 08:34:13 -07:00
Vincent Koc
fdc7892a6e
refactor: localize internal implementation types ( #101731 )
2026-07-07 07:41:04 -07:00
xingzhou
4e29b2f5ab
fix(slack): bound conversation info cache ( #101562 )
2026-07-07 05:55:00 -07:00
Peter Steinberger
a2a68d154b
fix(agent): preserve explicit recipient sessions ( #101507 )
...
* fix(agent): honor recipient session routing
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
* fix(agent): preserve canonical recipient routes
* fix(agent): require exact recipient routes
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
* fix(agent): harden recipient route resolution
* fix(imessage): require canonical recipient handles
* fix(agent): refine provider recipient exactness
* fix(agent): bound direct alias session routing
* fix(signal): preserve direct alias route type
* fix(agent): honor binding-scoped recipient sessions
* fix(routing): honor configured main session aliases
* fix(clickclack): align account-owned session routes
* fix(twitch): preserve canonical recipient sessions
* fix(routing): isolate stable outbound identities
* chore: defer recipient session changelog
* fix(sms): use dedicated channel SDK facade
---------
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
2026-07-07 10:07:13 +01:00
clawSean
d84aabf642
feat: add channel pairing request hook ( #97733 )
...
* feat: add channel pairing request hook
* fix(plugin-sdk): keep pairing hook types internal
* docs: regenerate docs map
* docs: regenerate docs map
* docs: regenerate docs map
* fix(plugin-sdk): keep pairing hook types internal
* fix(plugin-sdk): keep pairing hook types internal
* docs: refresh plugin hook docs
* docs: refresh plugin hook docs
* docs: refresh plugin hook docs
---------
Co-authored-by: clawSean <260045960+clawSean@users.noreply.github.com >
Co-authored-by: Omar Shahine <omarshahine@users.noreply.github.com >
2026-07-05 19:11:58 -07:00
Peter Steinberger
a6e19fe014
fix(slack): avoid repeated thread root media ( #100516 )
...
* fix(slack): avoid repeated thread root media
* test(slack): cover reset thread media seeding
2026-07-06 02:17:44 +01:00
scoootscooob
7e7fc0075e
[codex] Honor all ack scope for room events ( #87433 )
...
* fix(discord): honor all ack scope for room events
* fix(channels): align all ack scope for room events
* fix(channels): centralize ambient ack scope
* test(telegram): restore room-event ack fixture
* test(discord): satisfy promise executor lint
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 01:28:41 +01:00
Gorkem Erdogan
e7c0673fc5
fix(slack): react action rejects emoji glyphs; member-info userId affordance unclear ( #100375 )
...
* fix(slack): normalize react emoji glyphs and clarify member-info userId param
Slack's reactions.add/remove only accept shortcode names, never a raw
Unicode glyph, but the react action's emoji param had no description
steering models away from passing one, so calls like
emoji="✅ " failed with invalid_name. Consolidates the glyph-to-shortcode
map that already existed privately in the ack-reaction dispatch path into
the shared normalizeSlackEmojiName export in actions.ts, the layer that
owns the actual Slack API calls, so the message-tool react action gets the
same normalization.
Also tightens the generic userId param description so models stop trying
target on member-info, which has no target mode and requires userId
directly.
* fix(slack): preserve emoji reaction semantics
* fix(slack): default reactions to inbound message
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 00:15:32 +01:00
Peter Steinberger
4da855a1ff
fix(slack): prefer native status by default ( #100462 )
...
Co-authored-by: Peter Steinberger <steipete@openai.com >
2026-07-05 23:10:08 +01:00
Joey Frasier (Boothe)
7e0d530e07
fix(slack): reconcile ambiguous sends before replay ( #97480 )
...
* fix(slack): reconcile ambiguous sends exactly
Co-authored-by: Joey Frasier (Boothe) <joey.frasier@worksuite.com >
* test(infra): cover durable dispatch context
* fix(slack): keep reply policy internal
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-05 01:48:57 -07:00
truiem-bot
420b3cdd29
feat(slack): support per-channel replyToMode ( #82253 )
...
* feat(slack): support per-channel replyToMode
* fix(slack): align per-channel threading contexts
* fix(slack): preserve queued channel reply mode
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 23:41:24 -04:00
Jeff Sutherland
1945a8e5de
Warn on shared Slack Socket Mode connections ( #79938 )
...
* Warn on shared Slack Socket Mode connections
* fix(slack): harden shared socket diagnostics
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 22:41:18 -04:00
Yuya Hirayama
fe8234621e
Fail closed when Slack mention detection is unavailable ( #91584 )
...
* fix(slack): fail closed when mention detection is unavailable
* fix(slack): coordinate app mention retry history
* fix(slack): reject user-token mention identity
* fix(slack): reject user-token mention identity
---------
Co-authored-by: OpenClaw Agent <openclaw-agent@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 21:36:53 -04:00
Hana Chang
4ec7842be0
feat(slack): add ignoreOtherMentions channel config ( #53467 )
...
* feat(slack): add ignoreOtherMentions channel config
Mirrors the existing Discord `ignoreOtherMentions` option for Slack
channels. When set on a channel entry, drop channel/group/MPIM messages
that mention another user or subteam but not this bot — the inverse of
`requireMention`. Useful in busy channels where the bot would otherwise
reply to side conversations.
Implementation lives in `prepareSlackMessage` right after the
`allowBots: "mentions"` bot-drop gate and before the `shouldRequireMention`
non-mention drop, so it integrates with the new `messageIngress` ingress
pipeline. The gate is conditional on `canDetectMention` (botUserId
resolvable via `auth.test` or explicit mention regexes configured) to
avoid false drops when we have no reliable way to tell bot vs non-bot
mentions apart.
Slack implicit mentions (thread participation) are intentionally NOT
respected here — they fire for every message in a bot-participated
thread, so honoring them would defeat the feature in any active thread.
The gate matches on `wasMentioned` (explicit) and `hasAnyMention`, with
the existing `shouldBypassMention` override (e.g. authorized commands)
also respected.
Includes config types, zod schema, channel-config resolution,
prepare-message implementation, full test coverage in
`prepare.test.ts`, regenerated channel + docs baselines, and Slack
docs entry.
* refactor(slack): harden other-mention filtering
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 20:08:14 -04:00
Rohang2005
03fe813d1e
fix(slack): forward per-agent identity overlay on heartbeat and runtimeSend ( #84297 ) ( #84335 )
...
* fix(slack): preserve agent identity on heartbeat sends
Co-authored-by: Rohang2005 <rohan.ganesh05@gmail.com >
* fix(slack): preserve identity when custom icons fail
* fix(slack): reuse accepted identity across chunks
* fix(slack): narrow identity fallback input
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 20:05:47 -04:00
Dallin Romney
c2fc7aa28a
refactor: consolidate exact keyed async queues ( #99691 )
...
* refactor: consolidate keyed async queues
* chore: refresh merge-ref CI
* refactor: encapsulate keyed queue ownership
2026-07-04 16:45:07 -07:00
Peter Steinberger
be8b5f6c4f
fix(slack): preserve custom identity while streaming ( #100084 )
...
Use supported chat.startStream authorship and avoid edit-based previews when custom identity cannot stream.
Co-authored-by: MoerAI <friendnt@g.skku.edu >
2026-07-04 18:56:36 -04:00
Peter
526c024fc0
fix(slack): preserve interaction thread status ( #82895 )
...
* fix(slack): preserve interaction thread status
Co-authored-by: Intern Dev <dev@wukongai.io >
* test(slack): type message thread timestamps
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Intern Dev <dev@wukongai.io >
2026-07-04 18:56:11 -04:00
notask-007
94ff3c6b85
fix(slack): include attachment text in thread context ( #97727 )
...
* fix(slack): include attachment text in thread context
* fix(slack): cover attachment block fallback
* fix(slack): collect full block thread text
* refactor(slack): share thread block text extraction
Co-authored-by: notask-007 <37237335+chthtlo@users.noreply.github.com >
---------
Co-authored-by: notask-007 <>
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 14:49:43 -04:00
Peter Steinberger
0869edc23b
fix(slack): stop logging inbound message previews ( #96312 )
2026-07-04 13:14:09 -04:00
ash
b0476e5c8e
fix(slack): include assistant loading messages ( #85507 )
...
* fix(slack): include assistant loading messages
* fix(slack): preserve assistant status wording
* fix(slack): preserve assistant status wording
* fix(slack): preserve assistant status wording
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 13:13:11 -04:00
Jonathan Tsai
6169e5ddae
fix(slack): allow channel-id reads for name-allowlisted channels ( #95313 )
...
* fix(slack): allow channel-id reads for name-allowlisted channels
* fix(slack): trust API lookup for read target names
* fix(slack): resolve name-allowlisted reads safely
Co-authored-by: Jonathan Tsai <jontsai@users.noreply.github.com >
* fix(slack): resolve name-allowlisted reads safely
* fix(slack): resolve name-allowlisted reads safely
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 12:03:34 -04:00
ZOOWH
f683c9e9bd
fix(slack): restore native presentation delivery ( #95463 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 11:06:08 -04:00
Vincent Koc
787f3a2ce5
test(channels): align outbound delivery assertions
2026-07-04 15:13:16 +02:00
Peter Steinberger
706443c79b
fix(slack): remove unused unsafe auth fetch helper ( #99944 )
...
* fix(slack): remove unused unsafe auth fetch helper
Co-authored-by: liyuanbin <li.yuanbin1@xydigit.com >
* fix(slack): remove unused unsafe auth fetch helper
---------
Co-authored-by: liyuanbin <li.yuanbin1@xydigit.com >
2026-07-04 08:21:32 -04:00
Peter Steinberger
65e2819136
fix(slack): warn when bot token authenticates as user ( #99931 )
...
Co-authored-by: luyifan <al3060388206@gmail.com >
2026-07-04 07:04:30 -04:00
qingminlong
bd2740fedc
fix(slack): preserve time colons in interactive labels ( #99877 )
...
* fix(slack): preserve time colons in button labels
* fix(slack): preserve clock labels in interactive replies
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 03:14:13 -07:00
Peter Steinberger
eafe2a8d0b
refactor: consolidate duplicated plugin state and doctor migration plumbing onto SDK seams ( #99850 )
...
* refactor(plugin-sdk): add createPersistentDedupeCache and migrate channel presence caches
* refactor(matrix): adopt SDK approval reaction target store
* refactor(plugin-sdk): share doctor legacy-state migration fs helpers
* refactor(memory-core): dedupe qmd cache entry envelope validation
* chore(plugin-sdk): pin surface budgets for shared dedupe and doctor helpers
* test(matrix): use future approval expiry fixtures for reaction targets
* test(matrix): use future approval expiry fixtures for reaction targets
2026-07-04 01:51:03 -07:00
xingzhou
741d9524be
fix: outbound recovery can replay already sent replies ( #99600 )
...
* fix(outbound): avoid replaying sent recovery deliveries
* fix(outbound): persist recovery send state before ack
Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com >
* fix(outbound): preserve partial send evidence across adapters
* test(line): cover multi-send delivery progress
* fix(outbound): preserve repeated receipt result multiplicity
* test(heartbeat): expect delivery progress callback
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 01:09:12 -07:00
Peter Steinberger
fbdfd19622
Fix Slack retry for session init conflicts ( #99647 )
...
* Fix Slack retry for session init conflicts
* fix(slack): separate native and relay retries
* style(slack): make completion exits explicit
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-03 15:45:36 -07:00
Dallin Romney
792060bb63
refactor(shared): consolidate Discord Slack and Telegram lazy loaders ( #99298 )
2026-07-02 18:45:48 -07:00
Ted Li
b67df3797a
fix(telegram): explain disabled plugin approval failures ( #95973 )
...
* fix: explain disabled Telegram plugin approvals
* fix: handle disabled Telegram native plugin approvals
* fix: resolve exec approval surface independently
* fix: tie plugin approval setup guidance to plugin surface
* Revert "fix: tie plugin approval setup guidance to plugin surface"
This reverts commit 34e3c10e23ec8d3cf00ff803188df4226cd60f8d.
* fix: gate plugin approval setup guidance
* fix: gate plugin approval availability by delivery
* fix: preserve plugin approval approver auth
* fix: make plugin setup guidance explicit
* test: trim approval guidance proof radius
* Avoid setup guidance on routed approval timeout
* Carry plugin approval delivery route into timeouts
* Keep turn-source approval route visible
* fix(approvals): prefer delivered approval clients
* fix(approvals): prefer delivered approval clients
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-02 14:15:25 -07:00