Skip to content

Commit c87c8e6

Browse files
authored
Refactor channel approval capability seams (#58634)
Merged via squash. Prepared head SHA: c9ad4e4 Co-authored-by: gumadeiras <[email protected]> Co-authored-by: gumadeiras <[email protected]> Reviewed-by: @gumadeiras
1 parent d9a7ffe commit c87c8e6

48 files changed

Lines changed: 2192 additions & 839 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Docs: https://docs.openclaw.ai
2323
- Cron/tool schemas: keep cron tool schemas strict-model-friendly while still preserving `failureAlert=false`, nullable `agentId`/`sessionKey`, and flattened add/update recovery for the newly exposed cron job fields. (#55043) Thanks @brunolorente.
2424
- BlueBubbles/config: accept `enrichGroupParticipantsFromContacts` in the core strict config schema so gateways no longer fail validation or startup when the BlueBubbles plugin writes that field. (#56889) Thanks @zqchris.
2525
- Agents/failover: classify AbortError and stream-abort messages as timeout so Ollama NDJSON stream aborts stop showing `reason=unknown` in model fallback logs. (#58324) Thanks @yelog
26+
- Exec approvals: route Slack, Discord, and Telegram approvals through the shared channel approval-capability path so native approval auth, delivery, and `/approve` handling stay aligned across channels while preserving Telegram session-key agent filtering. (#58634) thanks @gumadeiras
2627

2728
## 2026.4.2
2829

@@ -86,6 +87,8 @@ Docs: https://docs.openclaw.ai
8687
- Discord/gateway: hand reconnect ownership back to Carbon, keep runtime status aligned with close/reconnect state, and force-stop sockets that open without reaching READY so Discord monitors recover promptly instead of waiting on stale health timeouts. (#59019) Thanks @obviyus
8788
- Config/Telegram: migrate removed `channels.telegram.groupMentionsOnly` into `channels.telegram.groups["*"].requireMention` on load so legacy configs no longer crash at startup. (#55336) thanks @jameslcowan.
8889

90+
### Fixes
91+
8992
## 2026.3.31
9093

9194
### Breaking

docs/.generated/plugin-sdk-api-baseline.json

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
"exportName": "ChannelConfigSchema",
9292
"kind": "type",
9393
"source": {
94-
"line": 69,
94+
"line": 70,
9595
"path": "src/channels/plugins/types.plugin.ts"
9696
}
9797
},
@@ -100,7 +100,7 @@
100100
"exportName": "ChannelConfigUiHint",
101101
"kind": "type",
102102
"source": {
103-
"line": 38,
103+
"line": 39,
104104
"path": "src/channels/plugins/types.plugin.ts"
105105
}
106106
},
@@ -109,7 +109,7 @@
109109
"exportName": "ChannelConfiguredBindingConversationRef",
110110
"kind": "type",
111111
"source": {
112-
"line": 653,
112+
"line": 658,
113113
"path": "src/channels/plugins/types.adapters.ts"
114114
}
115115
},
@@ -118,7 +118,7 @@
118118
"exportName": "ChannelConfiguredBindingMatch",
119119
"kind": "type",
120120
"source": {
121-
"line": 658,
121+
"line": 663,
122122
"path": "src/channels/plugins/types.adapters.ts"
123123
}
124124
},
@@ -127,7 +127,7 @@
127127
"exportName": "ChannelConfiguredBindingProvider",
128128
"kind": "type",
129129
"source": {
130-
"line": 674,
130+
"line": 679,
131131
"path": "src/channels/plugins/types.adapters.ts"
132132
}
133133
},
@@ -181,7 +181,7 @@
181181
"exportName": "ChannelPlugin",
182182
"kind": "type",
183183
"source": {
184-
"line": 77,
184+
"line": 78,
185185
"path": "src/channels/plugins/types.plugin.ts"
186186
}
187187
},
@@ -1201,12 +1201,30 @@
12011201
"path": "src/channels/plugins/types.core.ts"
12021202
}
12031203
},
1204+
{
1205+
"declaration": "export type ChannelApprovalAdapter = ChannelApprovalAdapter;",
1206+
"exportName": "ChannelApprovalAdapter",
1207+
"kind": "type",
1208+
"source": {
1209+
"line": 596,
1210+
"path": "src/channels/plugins/types.adapters.ts"
1211+
}
1212+
},
1213+
{
1214+
"declaration": "export type ChannelApprovalCapability = ChannelApprovalCapability;",
1215+
"exportName": "ChannelApprovalCapability",
1216+
"kind": "type",
1217+
"source": {
1218+
"line": 591,
1219+
"path": "src/channels/plugins/types.adapters.ts"
1220+
}
1221+
},
12041222
{
12051223
"declaration": "export type ChannelCommandConversationContext = ChannelCommandConversationContext;",
12061224
"exportName": "ChannelCommandConversationContext",
12071225
"kind": "type",
12081226
"source": {
1209-
"line": 662,
1227+
"line": 667,
12101228
"path": "src/channels/plugins/types.adapters.ts"
12111229
}
12121230
},
@@ -1824,14 +1842,23 @@
18241842
"exportName": "ChannelAllowlistAdapter",
18251843
"kind": "type",
18261844
"source": {
1827-
"line": 597,
1845+
"line": 602,
18281846
"path": "src/channels/plugins/types.adapters.ts"
18291847
}
18301848
},
18311849
{
18321850
"declaration": "export type ChannelApprovalAdapter = ChannelApprovalAdapter;",
18331851
"exportName": "ChannelApprovalAdapter",
18341852
"kind": "type",
1853+
"source": {
1854+
"line": 596,
1855+
"path": "src/channels/plugins/types.adapters.ts"
1856+
}
1857+
},
1858+
{
1859+
"declaration": "export type ChannelApprovalCapability = ChannelApprovalCapability;",
1860+
"exportName": "ChannelApprovalCapability",
1861+
"kind": "type",
18351862
"source": {
18361863
"line": 591,
18371864
"path": "src/channels/plugins/types.adapters.ts"
@@ -1914,7 +1941,7 @@
19141941
"exportName": "ChannelCommandConversationContext",
19151942
"kind": "type",
19161943
"source": {
1917-
"line": 662,
1944+
"line": 667,
19181945
"path": "src/channels/plugins/types.adapters.ts"
19191946
}
19201947
},
@@ -1932,7 +1959,7 @@
19321959
"exportName": "ChannelConfiguredBindingConversationRef",
19331960
"kind": "type",
19341961
"source": {
1935-
"line": 653,
1962+
"line": 658,
19361963
"path": "src/channels/plugins/types.adapters.ts"
19371964
}
19381965
},
@@ -1941,7 +1968,7 @@
19411968
"exportName": "ChannelConfiguredBindingMatch",
19421969
"kind": "type",
19431970
"source": {
1944-
"line": 658,
1971+
"line": 663,
19451972
"path": "src/channels/plugins/types.adapters.ts"
19461973
}
19471974
},
@@ -1950,7 +1977,7 @@
19501977
"exportName": "ChannelConfiguredBindingProvider",
19511978
"kind": "type",
19521979
"source": {
1953-
"line": 674,
1980+
"line": 679,
19541981
"path": "src/channels/plugins/types.adapters.ts"
19551982
}
19561983
},
@@ -1959,7 +1986,7 @@
19591986
"exportName": "ChannelConversationBindingSupport",
19601987
"kind": "type",
19611988
"source": {
1962-
"line": 690,
1989+
"line": 695,
19631990
"path": "src/channels/plugins/types.adapters.ts"
19641991
}
19651992
},
@@ -2265,7 +2292,7 @@
22652292
"exportName": "ChannelPlugin",
22662293
"kind": "type",
22672294
"source": {
2268-
"line": 77,
2295+
"line": 78,
22692296
"path": "src/channels/plugins/types.plugin.ts"
22702297
}
22712298
},
@@ -2319,7 +2346,7 @@
23192346
"exportName": "ChannelSecurityAdapter",
23202347
"kind": "type",
23212348
"source": {
2322-
"line": 721,
2349+
"line": 726,
23232350
"path": "src/channels/plugins/types.adapters.ts"
23242351
}
23252352
},
@@ -3729,7 +3756,7 @@
37293756
"exportName": "ChannelConfigUiHint",
37303757
"kind": "type",
37313758
"source": {
3732-
"line": 38,
3759+
"line": 39,
37333760
"path": "src/channels/plugins/types.plugin.ts"
37343761
}
37353762
},
@@ -3774,7 +3801,7 @@
37743801
"exportName": "ChannelPlugin",
37753802
"kind": "type",
37763803
"source": {
3777-
"line": 77,
3804+
"line": 78,
37783805
"path": "src/channels/plugins/types.plugin.ts"
37793806
}
37803807
},

0 commit comments

Comments
 (0)