Ayaan Zaidi
1cb914d6bf
fix(telegram): make ask_user controls native and reliable ( #130262 )
...
Make ask_user use native Telegram controls when one single-select question can be represented directly, while keeping multi-select and batch questions on the text fallback. Add native Other-to-ForceReply input, preserve Gateway-owned option ordering across Telegram, Slack, and Discord, and prevent later progress from overwriting the delivered question.
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-08-27 08:14:39 +05:30
Daniel Peng
a2ef21e433
fix(slack): preserve long legacy interactive text ( #127994 )
...
* fix(slack): preserve long interactive and presentation text
* fix(slack): retain every outbound delivery receipt
Co-authored-by: Peter Steinberger <steipete@gmail.com >
* test(slack): narrow presentation regression fixtures
Co-authored-by: Peter Steinberger <steipete@gmail.com >
* fix(slack): preserve single-message presentation edits
Co-authored-by: Peter Steinberger <steipete@gmail.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-25 10:28:31 -07:00
Peter Steinberger
ec091478fc
refactor(slack): reuse canonical interactive block renderer ( #128760 )
2026-08-24 07:55:00 -07:00
Peter Steinberger
3fa4805563
fix(slack): preserve pasted inbound tables ( #115163 )
...
* fix(slack): preserve pasted inbound tables
Co-authored-by: yash <84263676+yxshee@users.noreply.github.com >
* fix(slack): keep inbound text selection private
Co-authored-by: yash <84263676+yxshee@users.noreply.github.com >
* fix(slack): exclude unfurl tables from inbound context
Co-authored-by: yash <84263676+yxshee@users.noreply.github.com >
* refactor(slack): clarify aggregate table size limit
Co-authored-by: yash <84263676+yxshee@users.noreply.github.com >
* docs(slack): clarify table fallback escaping
Co-authored-by: yash <84263676+yxshee@users.noreply.github.com >
---------
Co-authored-by: yash <84263676+yxshee@users.noreply.github.com >
2026-07-28 10:34:21 -04:00
Peter Steinberger
bee40b9e8e
fix(messaging): align lifecycle follow-ups ( #110413 )
2026-07-18 06:14:24 +01:00
Peter Steinberger
da44d52ac6
feat: ask_user — structured questions from the agent with web card, channel buttons, and text answers ( #109922 )
...
* feat(gateway): add transient question runtime (question.* methods + broadcasts)
* feat(agents): add blocking ask_user question tool with chat prompt delivery and text-reply claim
* feat(ui): interactive in-thread question cards for ask_user
* feat(channels): native tap-to-answer buttons for ask_user on Telegram, Discord, and Slack
* feat(ui): unify codex and gateway question cards with interactive gateway answering
* refactor(agents): collapse ask_user pending state to one registry; docs for ask_user
* fix(agents): include ask_user in normal gateway runs; add question-flow control-ui e2e
* test(ui): avoid credential-shaped fixture in question card test
* refactor(ui): reorder stream-group context keys
* fix(gateway,ui): validate question answers at resolve; reject secret/duplicate-label questions; UI retry and reconnect hardening
* fix(gateway,agents): canonicalize accepted option answers; bound ask_user option labels to 64 chars
* chore(ci): prune unused question exports, allowlist mobile question events, fix discord lint
* chore(ci): regenerate protocol/i18n/docs/tool-display artifacts for question surface
* fix(protocol): flatten QuestionRecord for native codegen; drop TS-only alias from schema registry
* chore(android): regenerate ask-user localization resources
* docs: regenerate docs map after rebase
* fix(ci): avoid stale read-only dependency disks
* test: remove stale reef lint suppression ratchet
* fix(ci): keep source locale drift advisory in release gates
* fix(ci): scope locale advisory handling to parity check
2026-07-17 22:24:17 +01:00
Peter Steinberger
0e792b6de3
refactor(channels): centralize inbound orchestration and remove internal compat ( #109716 )
...
* refactor(channels): centralize inbound turn orchestration
* refactor(runtime): remove stale compatibility paths
* chore(guards): reject internal deprecated API use
* refactor(channels): simplify core turn planning
* chore(guards): keep deprecated checks boundary-focused
* refactor(memory): keep modern config off compat barrel
* fix(msteams): preserve feedback learning
* test(channels): align modern inbound fixtures
* refactor(channels): finish modern inbound migration
* refactor(channels): tighten core inbound kernel
* fix(channels): preserve turn assembly narrowing
* test(sdk): keep runtime mock binding immutable
* test(matrix): isolate read policy runtime
* test(msteams): mock canonical reply factory
* test(slack): mock core inbound turn dispatch
* test(telegram): inject core session recorder
* test(signal): inject core session recorder
* test(googlechat): assert canonical inbound routing
* test(synology-chat): align core turn fixture
* fix(sdk): preserve direct DM runtime compat
* refactor(channels): own inbound envelope compat in core
* refactor(channels): trim inbound dispatch seams
* refactor(channels): remove redundant async wrappers
* test(synology-chat): type canonical dispatcher mock
* refactor(channels): remove remaining dead compat seams
* chore(sdk): refresh API baseline after rebase
* fix(channels): preserve direct DM identity metadata
2026-07-17 00:56:46 -07:00
Vincent Koc
4d8b201371
refactor(plugins): remove dead channel helpers ( #105276 )
2026-07-12 18:21:11 +08:00
Peter Steinberger
7a456e362d
feat(channels): add typed cross-surface approval actions ( #103679 )
...
* fix(gateway): approval registry hardening and protocol-surface follow-ups
Follow-up delta to the merged #103579 head, rebased onto current main:
- gateway-protocol wire types derive from owner-module schema consts
(types.ts tombstone) and ProtocolSchemas leaves the package index so the
public plugin-sdk d.ts graph tree-shakes the registry declaration
- approval access authority follows the operator.approvals scope tier with
reviewerDeviceIds as the opt-in restriction (cross-surface
first-answer-wins; requester identity gates only legacy adapters)
- plugin node.invoke approvals register directly so unrenderable
presentations fail closed before request routing
- exec-approval manager reconciliation with #103515 revocation hardening
(resolution source attribution, one-shot ask-fallback consumption)
- surface-report pins and plugin-sdk API baseline refreshed; Swift models
regenerated
* feat(channels): add typed operator approval actions
Squash-rebased #103679 segment onto the durable-approval-registry tip on
current main. Typed approval/command/select presentation actions replace
raw-string inference across slack/telegram/discord/matrix/imessage/whatsapp,
approval.resolve carries an explicit kind, and channel adapters map native
callback envelopes through the typed action registry.
Drift reconciliation: deprecated buildExecApprovalInteractiveReply assertions
dropped (#104650 removed the shims); worker_environments bootstrap-column
migration kept alongside the approval resolution_ref backfill; plugin-sdk API
baseline regenerated.
(cherry picked from commit 68765a5d39d2118c88a7a54d00387337912d4494)
(cherry picked from commit 8642ac12af142e4b751f4f30d4b114615e7e5f66)
(cherry picked from commit 036c4bc39499925fc03de16ec9302e346769350a)
(cherry picked from commit 19dc350d6bc34e29a5169c6bc80971b0ad12adde)
(cherry picked from commit fc978b0bad86aef421c79f6a211b25cc1b743c01)
(cherry picked from commit 10de4d1ed5071f9be6ad1ee5d1e32c0fa8c9d11c)
(cherry picked from commit 9a664ced1b1fa740172b258f355f1a82925ae41c)
(cherry picked from commit c5ff69abbf444139e9e007bfa45beb0f00ffea54)
(cherry picked from commit d466a80795f7bc04639f1538f4e412bca3ab96bf)
(cherry picked from commit f5b4fe40dd5c961322f8553cc80b2fdfb3f6503e)
(cherry picked from commit 7340b4749a4cc4c72f7a41cce1bc9cb550cae038)
(cherry picked from commit a151f41808f23ae60b10305ccd2bc959b9169a86)
* fix(approvals): preserve typed transport ownership
* test(imessage): narrow chunked approval text
* refactor(protocol): remove retired type tombstone
* fix(plugin-sdk): align surface budgets after rebase
* docs(changelog): note typed operator approvals
* docs(changelog): defer typed approval release note
2026-07-11 18:31:05 -07:00
Peter Steinberger
934a974c29
feat(slack): support native data visualizations ( #104539 )
2026-07-11 09:18:39 -07:00
Peter Steinberger
81a201df26
feat: add portable table presentation blocks ( #103583 )
...
* feat(presentation): add portable table blocks
* chore(presentation): refresh generated contracts
* fix(slack): preserve table fallback payloads
* docs(changelog): note portable message tables
* fix(presentation): preserve cross-channel fallback delivery
* chore(plugin-sdk): refresh rebased contracts
* test(slack): align accessibility expectations
* fix(presentation): harden cross-channel fallback delivery
* chore(plugin-sdk): refresh rebased contracts
* docs(changelog): defer portable table release note
* fix(presentation): satisfy extension lint
* chore(plugin-sdk): refresh surface budgets
* fix(telegram): preserve reactions after progress replies
* fix(slack): preserve rendered preview fallback text
* fix(feishu): preserve oversized presentation fallbacks
* docs(changelog): note portable message tables
* docs(changelog): defer portable table release note
* chore(plugin-sdk): refresh rebased contracts
---------
Co-authored-by: Peter Steinberger <steipete@openai.com >
2026-07-10 22:29:13 -07:00
Peter Steinberger
add2c586c2
feat(slack): support native chart presentations ( #102635 )
2026-07-10 04:05:23 +01: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
Peter Steinberger
efd1a9ace6
docs: document messaging extension sources
2026-06-04 22:03:15 -04:00
Peter Steinberger
304e2c83c0
chore(lint): enable stricter oxlint rules
2026-05-31 18:59:02 +01:00
Peter Steinberger
d641126c1d
feat(plugin-sdk): add typed presentation command actions ( #88721 )
...
* feat(plugin-sdk): add typed presentation command actions
* test: use shared env helper in telegram bot tests
* test: expect typed approval actions
* test: expect typed sdk approval actions
2026-05-31 18:48:45 +01:00
Peter Steinberger
b78c2ee8c8
refactor: adopt presentation rendering in Mattermost
2026-05-17 14:18:23 +01:00
Peter Steinberger
fee1cd9867
docs: document presentation API surface
2026-05-17 14:18:23 +01:00
Peter Steinberger
ee72ce8cf7
refactor: deprecate legacy interactive reply APIs
2026-05-17 14:18:23 +01:00
Peter Steinberger
827b0de0ce
refactor: reduce plugin sdk surface
2026-05-10 12:37:10 +01:00
Peter Steinberger
0071f67fe6
feat(plugin-sdk): share presentation control helpers
2026-05-09 10:11:56 +01:00
Peter Steinberger
a301df0668
refactor: trim slack helper exports
2026-05-01 17:26:07 +01:00
clawsweeper[bot]
fbc145440f
fix(slack): offset presentation controls after native blocks
...
Co-authored-by: openclaw-clawsweeper[bot] <280122609+openclaw-clawsweeper[bot]@users.noreply.github.com>
2026-04-29 23:15:19 -07:00
clawsweeper[bot]
ebf05be742
fix(slack): preserve mixed interactive blocks
...
Co-authored-by: openclaw-clawsweeper[bot] <280122609+openclaw-clawsweeper[bot]@users.noreply.github.com>
2026-04-29 22:25:38 -07:00
clawsweeper[bot]
c6c518e6e9
fix(slack): cap select option values
...
Co-authored-by: openclaw-clawsweeper[bot] <280122609+openclaw-clawsweeper[bot]@users.noreply.github.com>
2026-04-29 22:25:29 -07:00
Peter Steinberger
11d8ba96f9
fix: bound slack interactive button urls
2026-04-30 03:32:11 +01:00
Peter Steinberger
fc8fafbd2f
fix: harden slack interactive blocks
2026-04-30 03:20:19 +01:00
Peter Steinberger
b312e2e617
perf: split slack reply action constants
2026-04-24 00:47:52 +01:00
Peter Steinberger
fd0970c077
refactor(channels): decouple presentation rendering
2026-04-21 21:29:44 +01:00
Peter Steinberger
aec24f4599
refactor: dedupe messaging trimmed readers
2026-04-08 01:36:39 +01:00
Peter Steinberger
af62a2c2e4
style: fix extension lint violations
2026-04-06 14:53:55 +01:00
Vincent Koc
c3edcfd46e
fix(plugins): clean first channel lint batch
2026-04-06 14:27:45 +01:00
Shakker
3ad747e25f
style: apply formatter cleanups
2026-03-30 16:20:27 +01:00
Vincent Koc
12ae4eee7e
fix(slack): complete interactive block delivery ( #57473 )
...
* fix(slack): complete interactive block delivery
Related #12602
Related #49528
* docs(changelog): add Slack interactive delivery note
Related #12602
* fix(slack): add reply-blocks helper and tighten directives
Related #12602
Related #49528
* fix(slack): scope style parsing and recheck merged blocks
Related #12602
Related #49528
2026-03-30 16:25:51 +09:00
Vincent Koc
f2475a7f70
fix(slack): improve interactive reply parity ( #53389 )
...
* fix(slack): improve interactive reply parity
* fix(slack): isolate reply interactions from plugins
* docs(changelog): note slack interactive parity fixes
* fix(slack): preserve preview text for local agent replies
* fix(agent): preserve directive text in local previews
2026-03-24 10:23:10 -07:00
Ayaan Zaidi
c245c8b39d
refactor(plugin-sdk): split interactive runtime helpers
2026-03-18 11:30:34 +05:30
Peter Steinberger
9ebe38b6e3
refactor: untangle remaining plugin sdk boundaries
2026-03-16 21:16:32 -07:00
Vincent Koc
c7d31bae8a
Channels: centralize shared interactive rendering
2026-03-15 21:55:45 -07:00