Sarah Fortune
732108d973
feat(slack): add workspace routing for Enterprise Grid actions and events ( #121014 )
...
* fix(slack): preserve team scope for deferred actions
* refactor(slack): use typed Bolt team context
* refactor(slack): preserve deferred action IDs
* refactor(slack): treat team IDs as opaque
* refactor(slack): keep deferred action diff focused
* fix(slack): enable scoped enterprise interactions
* fix(slack): keep event scope at listener boundary
* test(slack): model Bolt enterprise interaction context
* refactor(slack): normalize listener team context
* refactor(slack): pass modal event scope directly
* test(slack): preserve interaction harness argument types
* refactor(slack): pass shortcut event scope directly
* refactor(slack): pass action event scope directly
* fix(slack): scope enterprise slash commands
* test(slack): disambiguate slash harness scope
* fix(slack): type slash block suggestions
* fix(slack): preserve option text literal
* fix(slack): keep scope helpers private
* fix(slack): fall back from slash response URLs
* fix(slack): clarify Web API post message call
* fix(slack): scope post message lint suppression
* fix(slack): preserve event scope export after rebase
* fix(slack): preserve team-bound modal session routing
* fix(slack): retain modal direct-message routing
* fix(slack): preserve modal delivery compatibility
* docs(slack): mark enterprise tool actions supported
* docs(slack): align enterprise support with runtime
* test(slack): align enterprise interaction registration
* fix(slack): support Grid channel create and rename events
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com >
2026-08-10 02:02:15 +00:00
Sarah Fortune
6efd013c25
fix(slack): support Grid reaction and pin event listeners ( #120944 )
...
* fix(slack): support Grid reaction and pin events
* refactor(slack): isolate system event routing
* test(slack): align Grid event scope fixture
* refactor(slack): pass optional event scope directly
* fix(slack): support Grid member events
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com >
2026-08-09 17:07:25 -07:00
Peter Steinberger
59ec48439e
fix(telegram): preserve topic routing for reactions and poll answers ( #121231 )
2026-08-09 14:23:19 -07:00
Sarah Fortune
66dee798b5
Revert "fix: enable Slack native approvals for Enterprise Grid installs (#120…" ( #121219 )
...
This reverts commit 96798953b2 .
2026-08-09 19:49:35 +00:00
Shakker
b3d71c754f
fix(clickclack): ignore agent activity inbound events
2026-08-09 20:33:03 +01:00
Shakker
3d80a2f6f2
fix(clickclack): isolate bot loop budgets by thread
2026-08-09 20:33:03 +01:00
Jacqueline Henriksen
762fa6e428
feat(clickclack): allow opt-in bot-to-bot inbound dispatch
2026-08-09 20:33:03 +01:00
Sarah Fortune
96798953b2
fix: enable Slack native approvals for Enterprise Grid installs ( #120874 )
...
* fix(slack): scope Grid native approvals by team
* fix(slack): type action middleware context
* fix(slack): secure Grid native approvals
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com >
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-09 12:09:59 -07:00
Ayaan Zaidi
409fb7abca
fix(telegram): enforce direct-message tool policies
...
Enforce configured Telegram direct-message tool policies across queued runs and native harnesses. Unsupported restricted harnesses now refuse visibly; turns without explicit policy keep existing tool access.
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-08-09 19:32:30 +05:30
Peter Steinberger
71a33f07a9
fix(imessage): make SSH-backed sends and actions reliable ( #121038 )
...
* fix(imessage): harden remote Mac transport
Route SSH-backed iMessage actions through JSON-RPC, preserve remote database paths, and stage outbound files on the Messages Mac with bounded cleanup. Keep local action semantics intact while failing closed on ambiguous wrappers and surfacing the remaining imsg v0.13.4 limits.
* fix(imessage): remove test-only exports
2026-08-09 04:48:38 -07:00
Ayaan Zaidi
a3d2ac7dc8
fix(telegram): inherit root group policy across accounts
...
Use channels.telegram.groups as the shared default when an account omits groups. Explicit account maps, including {}, remain full replacements. This keeps chat admission and sender restrictions on one policy path and fixes silent multi-account authorization failures.
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-08-09 12:08:53 +05:30
clawsweeper[bot]
c121788611
fix(telegram): prioritize configured commands under menu pressure ( #119717 )
...
* fix(telegram): prioritize configured commands under menu pressure
* fix(telegram): preserve custom commands under localized menu pressure
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: ayeshakhalid192007-dev <ayeshakhalid192007@gmail.com >
2026-08-09 09:07:51 +05:30
Sarah Fortune
cdaea2d6b6
fix(slack): route Enterprise Grid messages by workspace ( #120087 )
...
* fix(slack): route Grid messages by workspace
* fix(slack): use authorized Grid DM sender
* fix(slack): preserve ordinary client calls in grid routing
* test(slack): keep grid target coverage in scoped suite
* fix(slack): preserve workspace scope in approval routes
* feat(slack): scope Grid uploads and reactions by workspace
* fix(slack): preserve ordinary action read targets
* fix(slack): reuse Grid clients for thread status
* fix(slack): infer current Grid workspace for native actions
* fix(slack): record streamed thread participation promptly
* fix(slack): scope Grid member info to current workspace
* feat(slack): support Grid write actions
* feat(slack): support Grid read actions
* fix(slack): remove obsolete channel resolver
* fix(slack): route current Grid outbound delivery
* test(slack): cover Grid thread participation
* test(slack): use valid Grid team ID
* fix(slack): keep Grid thread participation without bot identity
* fix(slack): enable Grid pin reads
* fix(slack): keep current Grid sends workspace aware
* test(slack): assert Grid send routing synchronously
* refactor(slack): remove obsolete Grid action allowlist
* refactor(slack): derive Grid channel routing targets
* refactor(slack): pass optional team scope uniformly
* test(slack): expect uniform client options
* refactor(slack): name unscoped cache key explicitly
* refactor(slack): always pass action options
* refactor(slack): pass optional team scope directly
* refactor(slack): build team-scoped action options once
* refactor(slack): centralize optional team target formatting
* refactor(slack): construct reconciliation clients from scope
* refactor(slack): resolve delivery policy before sending
* refactor(slack): clarify inbound target roles
* refactor(slack): minimize validated event scope
* fix(slack): route outbound workspace through target
* fix(slack): format post response errors safely
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com >
2026-08-08 15:38:24 -07:00
Ayaan Gazali
51960f6579
docs(discord): drop retired ui.components.accentColor and fix heartbeat key name ( #118216 )
...
* docs(discord): drop retired ui.components.accentColor and fix heartbeat key name
* docs(discord): remove the retired accent-color example block
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-08 13:43:37 -07:00
Peter Steinberger
96a75be170
fix(discord): default preview streaming to off ( #120376 )
...
Make Discord progress drafts and activity receipts explicit opt-ins while preserving configured streaming modes and legacy explicit progress migrations. Related: #87704 .
2026-08-07 17:18:12 -07:00
joshavant
50cc620f0b
docs(whatsapp): clarify typing cleanup timing
2026-08-07 16:38:27 -05:00
joshavant
87156bab23
fix(typing): keep long active turns visible
2026-08-07 16:11:52 -05:00
Vito Cappello
5621979a46
fix(models): preserve session selection across fallback turns ( #119325 )
...
* feat(models): add session-only model selection
* fix(models): use trailing session scope option
* test(models): satisfy session scope lint
* fix(models): reject duplicate model options
* fix(models): clarify default and session scope
* fix(models): require complete session option tokens
* fix(models): report configured default dispatch
* fix(models): keep directive handler within lint limit
* fix(models): parse model options in either order
* fix(models): apply session scope to aliases
* fix(models): align alias scope with reply routing
* fix(discord): surface model selection scope in picker
* fix(models): preserve mixed-text model selection
* fix(models): centralize command selection ownership
* fix(models): align session scope lifecycle
* fix(models): preserve command and auth ownership
* fixup! fix(models): preserve command and auth ownership
* fix(auth): preserve scoped CLI provider discovery
* test(models): align result and cron fixtures
* test(models): nest result timing metadata
* fix(discord): narrow silent dispatch results
* fix(transcript): preserve admitted turn identity
* fix(context-engine): fence the admitted transcript turn
* fix(context-engine): stabilize plugin compatibility contract
* chore(plugin-sdk): refresh context engine API baseline
* chore(plugin-sdk): use Linux context engine API baseline
* fix(context-engine): align fallback ownership
* fix(fallback): scope auth skip cache by profile
* fix(context-engine): settle only accepted fallback turns
* refactor(sessions): issue canonical turn admissions
* refactor(context-engine): own logical turn advancement
* fix(context-engine): settle cron fallback winners
* fix(models): align picker and fallback transactions
* fix(delivery): notify block admission after queueing
* fix(sessions): preserve canonical admission receipts
* chore(plugin-sdk): refresh API baseline hash
* fix(context-engine): commit accepted turns durably
* fix(context-engine): validate durable host transitions
* fix(context-engine): preserve fallback turn ownership
* fix(context-engine): preserve queued turn order
* fix(models): preserve fallback retry ownership
* fix(context-engine): enforce durable transcript anchors
* fix(runtime): close fallback persistence gaps
* fix(context-engine): preflight fallback harnesses
* chore(plugin-sdk): use Linux API baseline
* fix(context-engine): drain durable commits before reads
* fix(models): scope harness auth failures by profile
* fix(codex): fence legacy transcript history
* fix(commands): honor suppressed directive interpretation
* chore(runtime): remove unused branch exports
* test(context-engine): derive private outbox payload type
* fix(context-engine): apply durable drain degradation
* fix(context-engine): recover durable turn intents
* fix(context-engine): settle durable turn intents
* refactor(context-engine): satisfy branch quality gates
* fix(context-engine): close durable recovery gaps
* fix(discord): preserve dropped model command outcome
* test(copilot): keep journal fixture types local
* fix(auto-reply): preserve model alias provenance
* fix: close model scope review gaps
* fix(models): close review-found scope leaks
* fix(review): satisfy branch line budgets
* fix(agents): preserve context engine turn facts
* fix(agents): finalize silent context turns
* fix(context-engine): preserve compatibility window
* test(agents): cover both harness preparations
* fix(context-engine): retain blocked turn advancements
* fix(models): parse compact runtime options
* fix(telegram): report runtime resets accurately
* fix(models): isolate automatic auth failure skips
* fix(context-engine): project commit turn host params
---------
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-07 16:19:12 +08:00
Jacqueline Henriksen
aa21c001f1
fix(clickclack): show native agent progress while replying ( #116683 )
...
* fix(clickclack): show native agent progress while replying
* fix(clickclack): address native progress review feedback
* fix(clickclack): address native progress review feedback
* fix(clickclack): address native progress review feedback
* fix(clickclack): address native progress review feedback
* fix(clickclack): address native progress review feedback
* fix(clickclack): clear CI failures
* fix(clickclack): bound stalled progress finalization
* test(clickclack): satisfy strict callback typing
* fix(clickclack): clear progress before activity flush
* fix(clickclack): make native progress explicitly opt-in
* fix(clickclack): make native progress explicitly opt-in
* fix(clickclack): make native progress explicitly opt-in
* fix(clickclack): make native progress explicitly opt-in
* fix(clickclack): make native progress explicitly opt-in
* docs(clickclack): document opt-in native progress
* fix(clickclack): guard disabled native progress
* test(clickclack): cover independent progress opt-ins
* docs(clickclack): show native progress opt-in
* fix(clickclack): keep resolved progress setting compatible
* fix(clickclack): identify agent in native progress
* fix(clickclack): retract native commentary progress
* fix(clickclack): harden native progress compatibility
* fix(clickclack): regenerate current-main channel metadata
---------
Co-authored-by: PollyBot13 <pollybot13@gmail.com >
2026-08-06 20:18:19 -07:00
Ayaan Gazali
11757fecd4
docs(slack): document retired Socket Mode tuning cleanup ( #119328 )
...
* docs(slack): drop retired socketMode transport tuning
channels.slack.socketMode is rejected by Slack config validation, pinned by
the 'rejects retired Socket Mode ping/pong transport tuning' schema test, and
the client pong timeout is now a hardcoded 15s constant. The page still told
operators to configure it.
* fix(slack): migrate retired socketMode with doctor instead of hand-editing
The retired object fails schema validation at root and account scope, so the
docs previously left manual removal as the only recovery. Slack already owns
legacyConfigRules and normalizeCompatibilityConfig, so the strip belongs there.
* test(slack): narrow the doctor contract config record for check-test-types
normalizeCompatibilityConfig returns a possibly-absent channel entry, so the
socketMode assertions need expectDefined before indexing.
* docs(slack): describe socketMode retirement by observed behavior
openclaw config validate reports a config carrying the retired object as valid,
so the earlier 'validation rejects it / fails to load' wording was wrong. The
observable facts are that it is not read and that doctor --fix removes it.
* revert(slack): drop the duplicate socketMode doctor migration
Core already strips channels.slack.socketMode at root and account scope in
legacy-config-migrations.runtime.retired.ts via visitChannelEntries, so the
plugin-side rule was duplicate policy. Keeps this PR to the docs correction.
* docs(slack): state what doctor actually cleans up for socketMode
Doctor flags retired layout knobs with a general notice, and --fix removes the
three named fields and drops the object only once empty, so an unknown key
inside it survives.
2026-08-05 16:02:57 -07:00
Peter Steinberger
1f0269eda5
refactor(msteams): consolidate channel action target resolution ( #119632 )
...
* refactor(msteams): consolidate channel action target resolution
* fix(msteams): honor configured group read policy
* fix(msteams): explain delegated channel access recovery
2026-08-05 10:52:13 -07:00
Peter Steinberger
89014305f1
fix(telegram): reject retired native button input
...
Prevent stale top-level buttons arguments from silently sending text-only Telegram messages. Point model guidance and docs to typed presentation actions, and reject retired input before delivery.
2026-08-05 21:57:36 +05:30
ragesaq
5cd2c5b07b
fix: keep ClickClack discussion rooms durable
...
Separate durable ClickClack room identity from replaceable exact-session attachments. Session archive, reset, deletion, and recreation retain the existing room and history while rotating local routing authority and preserving fail-closed exact-incarnation grants.
Pin ambiguous room recovery to the originating account and credential, and retain prior attachments when persistence fails.
Closes #119300
Co-authored-by: Chisel <chisel@psiclawops.dev >
2026-08-05 16:38:59 +01:00
Syu
b316c9cacf
fix(channels): honor explicit preview streaming settings
...
Explicit Telegram and Discord preview modes now override inherited block streaming while explicit channel block settings remain authoritative.
Co-authored-by: Syu <zhuqimo@gmail.com >
2026-08-05 09:04:49 +05:30
vovapetry
b5876a1086
fix(telegram): route reactions to their originating forum topics
...
Recover Telegram forum reaction topics from provider-observed message context before authorization, and drop unknown topics instead of routing them to General. Serialize each forum message with its reaction update to avoid cache races. Thanks @vovapetry.
2026-08-04 18:49:57 +05:30
clawSean
5cd6694349
docs(sms): add Twilio A2P delivery guidance ( #88743 )
...
* docs(sms): add A2P delivery guidance
* fix(docs): correct Twilio A2P guidance
---------
Co-authored-by: clawSean <260045960+clawSean@users.noreply.github.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-04 07:43:21 +08:00
Vincent Koc
0758316883
feat(sms): track Twilio delivery status ( #118665 )
...
* feat(sms): track Twilio delivery status
* fix(sms): preserve Twilio delivery callbacks under inbound load
* fix(sms): correct delivery status contracts
* fix(sms): retry transient Twilio callback reads
* fix(sms): bound delivery callback admission
* docs(sms): clarify delivery callback recovery
2026-08-04 06:39:17 +08:00
Peter Steinberger
14fe739ee9
fix(feishu): enforce exact signed webhook request boundaries ( #118758 )
...
* fix(feishu): enforce exact signed webhook request targets
* fix(feishu): preserve explicitly configured signed webhook query targets
* fix(feishu): preserve shipped relative webhook paths
* fix(feishu): normalize and migrate legacy webhook callback paths
* fix(feishu): preserve transformed webhook schema defaults
* fix(feishu): require canonical webhook paths before runtime startup
* docs(feishu): document canonical webhook routes and doctor recovery
2026-08-03 14:52:58 -07:00
Vincent Koc
554a6f3bbf
feat(sms): add Twilio MMS support ( #118664 )
...
* feat(sms): add Twilio MMS support
* fix(sms): harden hosted media bearer handling
* fix(sms): discard staged media before dispatch
* fix(sms): close staged media cleanup races
* fix(sms): finalize MMS metadata and race proof
* fix(media): bind local reads to authorized descriptors
* fix(sms): close MMS review gaps
* fix(media): make inbound root matching type-safe
* fix(media): route bounded reads through fs-safe facade
* test(media): satisfy async lint contracts
2026-08-04 05:46:37 +08:00
Peter Steinberger
76cc60a452
docs: correct onboarding risk flags and Google Chat credential shapes ( #118936 )
2026-08-03 13:59:29 -07:00
Pavan Kumar Gondhi
f63f2fd3db
fix(reef): restrict management commands to owners [AI] ( #118578 )
...
* fix(reef): require owner for management commands
* fix(reef): preserve general command access
* fix: preserve explicit owner authority
* fix(discord): separate voice admission from ownership
* docs(reef): explain owner command recovery
* docs(reef): clarify owner recovery paths
2026-08-03 23:18:05 +05:30
Vincent Koc
f9baa3e894
fix(channels): generate discovery docs from catalog ( #118106 )
2026-08-03 23:42:55 +08:00
Peter Steinberger
ec7e5dd769
fix(gateway): recover channel autostart after crash loops ( #118311 )
...
* fix(gateway): recover channel autostart after crash loops
* docs(gateway): clarify crash-loop recovery steps
* test(gateway): type crash-loop recovery context
* test(gateway): correct recovery mock context
* test(gateway): keep recovery monitor coverage compact
* chore: leave crash-loop note to release flow
---------
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local >
2026-08-02 18:01:39 -07:00
Shakker
c2d6ecee3c
fix: align Buzz explicit mention semantics
2026-08-02 10:30:32 +01:00
Shakker
0ee44d551a
feat: guide Buzz room targeting and mentions
2026-08-02 10:30:32 +01:00
Peter Steinberger
b1f97bb7b3
refactor(discord): remove retired subagent progress runtime ( #117802 )
2026-08-01 21:36:28 -07:00
Vincent Koc
89aadef6ef
feat(plugins): externalize iMessage channel ( #117101 )
2026-08-01 08:01:18 +08:00
Peter Steinberger
eb0087dc7c
fix(discord): connect mention-only bots without Message Content intent ( #116962 )
...
* fix(discord): support mention-only gateway intent
* chore: keep release changelog owner-only
2026-07-31 12:04:16 -07:00
Shakker
5cd00cfbaa
fix: reserve Buzz relay subscription capacity ( #116799 )
2026-07-31 13:40:34 +01:00
Shakker
b3c4ea0291
docs: explain Buzz archived room handling
2026-07-31 13:40:34 +01:00
Shakker
729d21336b
docs: clarify Buzz directory reconnects
2026-07-31 13:40:33 +01:00
Shakker
6c7a96e588
fix: budget Buzz relay subscriptions
2026-07-31 13:40:32 +01:00
Shakker
3c78fe00f3
docs: document Buzz directory identities
2026-07-31 13:40:32 +01:00
Patrick Erichsen
61cf4b9246
test(buzz): add live QA Lab channel lane ( #116298 )
...
* feat(buzz): add live QA runner
* ci(qa): add gated Buzz live lane
* docs(qa): document Buzz live testing
* fix(buzz): keep QA relay type private
* test(buzz): type QA suite mock
* fix(buzz): preserve racing QA reply relations
* fix(qa): harden Buzz credential redaction
* fix(buzz): ignore retained QA relay events
* fix(buzz): clean up observer setup failures
* test(buzz): return complete racing messages
* fix(buzz): default QA credentials to file
* fix(qa): validate pooled Buzz secrets
* fix(qa): redact structured Buzz auth tags
* fix(buzz): preserve QA credential env override
* fix(qa): redact inspected Buzz auth tags
* test(buzz): limit live QA to supported scenarios
* ci(qa): run Buzz lane in release checks
* fix(qa): require secure remote Buzz relays
* fix(qa): satisfy Buzz QA validation gates
* fix(qa): inject credential leasing into transport adapters
2026-07-30 17:44:27 -07:00
Shakker
154e67b1e2
fix: recognize ClickClack handle mentions
2026-07-30 15:42:17 +01:00
Jacqueline Henriksen
ba9e9fec13
fix: gate ClickClack group replies on mentions
2026-07-30 15:42:17 +01:00
Ayaan Zaidi
dcb0ad5c29
fix(ci): satisfy docs formatting, lint, and the SDK API baseline
...
Three gates my own changes broke:
- docs/channels/telegram.md needed a blank line before </Note>; I formatted the
TypeScript but never ran the docs formatter over the pages I edited.
- The mock harness matched a literal with a regex, which oxlint's prefer-includes
rejects.
- Widening resolveChannelPreviewStreamMode's defaultMode to StreamingMode and
adding rendersRollingLinesNatively changes the exported plugin-SDK surface, so
the API baseline hash had to be regenerated.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi
9f821d103f
docs(telegram): call out the changed default preview on upgrade
...
ClawSweeper's accepted-migration path requires operator-facing docs for the
default change: state what an existing install sees after upgrading and the
one-line setting that restores streamed answer text.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi
06aa81a73f
fix(channels): show tool lines under the progress status headline
...
A status headline replaced the rolling tool lines instead of sitting above
them, so a default Discord draft showed one preamble sentence for an entire
tool-heavy turn. Operators reached for `/verbose` to see any activity, which
delivers durable per-tool-call messages and floods the channel.
- Render the headline above the lines; both stay visible in one message.
- Shorten the start gate from 5s to 1.5s. The gate only creates the draft
when the timer fires and finalize cancels it, so quick answers still post
no draft while a 3s tool turn stops being silent.
- Drop Discord's label-gated tool-progress default so
resolveChannelStreamingPreviewToolProgress is the single owner. An explicit
`toolProgress: false` still silences the lines.
- Resolve that toggle against a "progress" mode guess when `streaming.mode`
is unset, so the progress-draft channels stop ignoring an explicit
`progress.toolProgress` opt-out.
Telegram now defaults to `streaming.mode: "progress"` like Discord; set
`"partial"` to keep streamed answer text. Its renderer draws work lines from
the compositor's structured lines, so `rendersRollingLinesNatively` keeps
them out of the composed text rather than printing every line twice.
2026-07-30 13:36:21 +09:00
Shakker
7420682163
docs: clarify Buzz typing cadence ( #116194 )
2026-07-30 03:59:34 +01:00