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
...
Native App Locale Refresh / Refresh native ja-JP (push) Waiting to run
Native App Locale Refresh / Refresh native ko (push) Waiting to run
Native App Locale Refresh / Refresh native nl (push) Waiting to run
Native App Locale Refresh / Refresh native pl (push) Waiting to run
Native App Locale Refresh / Refresh native pt-BR (push) Waiting to run
Native App Locale Refresh / Refresh native ru (push) Waiting to run
Native App Locale Refresh / Refresh native sv (push) Waiting to run
Native App Locale Refresh / Refresh native th (push) Waiting to run
Native App Locale Refresh / Refresh native tr (push) Waiting to run
Native App Locale Refresh / Refresh native uk (push) Waiting to run
Native App Locale Refresh / Refresh native vi (push) Waiting to run
Native App Locale Refresh / Refresh native zh-CN (push) Waiting to run
Native App Locale Refresh / Refresh native zh-TW (push) Waiting to run
Native App Locale Refresh / Commit native locale refresh (push) Blocked by required conditions
OpenClaw Stable Main Closeout / Resolve stable release closeout inputs (push) Waiting to run
OpenClaw Stable Main Closeout / Verify stable main closeout (push) Blocked by required conditions
Plugin Init Scaffold Validation / Validate provider scaffold (push) Waiting to run
Plugin NPM Release / preview_plugins_npm (push) Waiting to run
Plugin NPM Release / Validate release publish approval (push) Blocked by required conditions
Plugin NPM Release / preview_plugin_pack (push) Blocked by required conditions
Plugin NPM Release / publish_plugins_npm (push) Blocked by required conditions
Plugin NPM Release / verify_plugins_npm (push) Blocked by required conditions
Workflow Sanity / no-tabs (push) Waiting to run
Workflow Sanity / actionlint (push) Waiting to run
Workflow Sanity / generated-doc-baselines (push) Waiting to run
Website Installer Sync / static (push) Has been cancelled
Website Installer Sync / linux-docker (push) Has been cancelled
Website Installer Sync / macos-installer (push) Has been cancelled
Website Installer Sync / windows-installer (push) Has been cancelled
Website Installer Sync / sync-website (push) Has been cancelled
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
Peter Steinberger
614e87cce1
chore: update dependencies ( #100027 )
2026-07-04 14:56:50 -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
Native App Locale Refresh / Refresh native it (push) Waiting to run
Native App Locale Refresh / Refresh native ja-JP (push) Waiting to run
Native App Locale Refresh / Refresh native ko (push) Waiting to run
Native App Locale Refresh / Refresh native nl (push) Waiting to run
Native App Locale Refresh / Refresh native pl (push) Waiting to run
Native App Locale Refresh / Refresh native pt-BR (push) Waiting to run
Native App Locale Refresh / Refresh native ru (push) Waiting to run
Native App Locale Refresh / Refresh native sv (push) Waiting to run
Native App Locale Refresh / Refresh native th (push) Waiting to run
Native App Locale Refresh / Refresh native tr (push) Waiting to run
Native App Locale Refresh / Refresh native uk (push) Waiting to run
Native App Locale Refresh / Refresh native vi (push) Waiting to run
Native App Locale Refresh / Refresh native zh-CN (push) Waiting to run
Native App Locale Refresh / Refresh native zh-TW (push) Waiting to run
Native App Locale Refresh / Commit native locale refresh (push) Blocked by required conditions
OpenClaw Stable Main Closeout / Resolve stable release closeout inputs (push) Waiting to run
OpenClaw Stable Main Closeout / Verify stable main closeout (push) Blocked by required conditions
Plugin Init Scaffold Validation / Validate provider scaffold (push) Waiting to run
Plugin NPM Release / preview_plugins_npm (push) Waiting to run
Plugin NPM Release / Validate release publish approval (push) Blocked by required conditions
Plugin NPM Release / preview_plugin_pack (push) Blocked by required conditions
Plugin NPM Release / publish_plugins_npm (push) Blocked by required conditions
Website Installer Sync / static (push) Waiting to run
Website Installer Sync / linux-docker (push) Waiting to run
Website Installer Sync / macos-installer (push) Waiting to run
Website Installer Sync / windows-installer (push) Waiting to run
Website Installer Sync / sync-website (push) Blocked by required conditions
Workflow Sanity / no-tabs (push) Waiting to run
Workflow Sanity / actionlint (push) Waiting to run
Workflow Sanity / generated-doc-baselines (push) Waiting to run
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 34e3c10e23 .
* 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
Allen Hurff
968aa51b80
[codex] fix(memory-lancedb): align apache arrow peer dependency ( #99118 )
...
* fix(memory-lancedb): align apache arrow peer dependency
* fix(memory-lancedb): refresh arrow dependency graph
---------
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-07-02 15:59:13 -05:00
lsr911
badbae77df
fix(slack): guard relay frame parsing
...
* fix(slack): guard relay WebSocket frame JSON.parse against malformed input
Slack Socket Mode relay receives WebSocket frames from external
infrastructure. parseRelayFrame() used bare JSON.parse() which would
throw raw SyntaxError on malformed frames, potentially crashing the
relay connection.
Wrap JSON.parse in try/catch and throw SlackRelayMalformedFrameError
with the original SyntaxError as cause, so callers can distinguish
transport errors from parse errors.
D4 dimension — all competitors have zero coverage.
Signed-off-by: lsr911 <liao.shirong@xydigit.com>
* fix(slack): repair relay frame guard tests
---------
Signed-off-by: lsr911 <liao.shirong@xydigit.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-01 04:50:08 -07:00
Sachintha Bhashitha
5113fbf4cc
fix(slack): truncate served arg-menu option labels on a surrogate boundary ( #97923 )
2026-07-01 03:12:56 -07:00
weiqinl
5e572dcf78
fix(slack): prefer current thread session for inherited outbound replies ( #97168 )
...
* fix(slack): prefer current thread session for inherited outbound replies to avoid delivery-mirror session sprawl
* fix(slack): require explicit replyToIsExplicit===false for current-session precedence
* fix(slack): canonicalize inherited thread replies
---------
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-06-30 16:38:34 -07:00
Vincent Koc
3e2646a786
fix(release): use workspace host deps in release lockfile
...
(cherry picked from commit d377c0f910 )
2026-06-30 15:54:12 -07:00
Vincent Koc
66e676d29b
chore(release): close out 2026.6.11 on main
2026-06-30 11:31:08 -07:00
Masato Hoshino
5c4e478df4
fix(slack): expose sender bot status in context ( #97822 )
...
* fix(slack): expose sender bot status in context
* fix(slack): expose sender bot status in context
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-06-30 10:29:42 -07:00
Dallin Romney
39e1be080c
feat(slack): support alternate Web API roots ( #97154 )
...
* Allow Slack to target alternate Web API roots
* Protect Slack API URL routing
* Simplify Slack API URL routing
* Use env-only Slack API root routing
* Remove Slack client option alias
* Keep Slack API URL dotenv test inline
* Remove leftover Slack PR churn
* Block workspace Slack API URL dotenv
* Preserve Slack proxy HTTPS protocol
* Keep Slack option resolution explicit
* Remove Slack probe formatting diff
* fix(slack): preserve explicit API root precedence
* fix(slack): narrow cached write client options
2026-06-28 18:52:37 -07:00