Skip to content

Commit 5c685ee

Browse files
authored
fix(config): remove lingering channel streamMode leaks (openclaw#60733)
1 parent 644ed24 commit 5c685ee

7 files changed

Lines changed: 142 additions & 93 deletions

File tree

docs/.generated/config-baseline.channel.json

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8820,22 +8820,6 @@
88208820
"tags": [],
88218821
"hasChildren": false
88228822
},
8823-
{
8824-
"path": "channels.googlechat.accounts.*.streamMode",
8825-
"kind": "channel",
8826-
"type": "string",
8827-
"required": true,
8828-
"enumValues": [
8829-
"replace",
8830-
"status_final",
8831-
"append"
8832-
],
8833-
"defaultValue": "replace",
8834-
"deprecated": false,
8835-
"sensitive": false,
8836-
"tags": [],
8837-
"hasChildren": false
8838-
},
88398823
{
88408824
"path": "channels.googlechat.accounts.*.textChunkLimit",
88418825
"kind": "channel",
@@ -9491,22 +9475,6 @@
94919475
"tags": [],
94929476
"hasChildren": false
94939477
},
9494-
{
9495-
"path": "channels.googlechat.streamMode",
9496-
"kind": "channel",
9497-
"type": "string",
9498-
"required": true,
9499-
"enumValues": [
9500-
"replace",
9501-
"status_final",
9502-
"append"
9503-
],
9504-
"defaultValue": "replace",
9505-
"deprecated": false,
9506-
"sensitive": false,
9507-
"tags": [],
9508-
"hasChildren": false
9509-
},
95109478
{
95119479
"path": "channels.googlechat.textChunkLimit",
95129480
"kind": "channel",
@@ -25708,6 +25676,26 @@
2570825676
"tags": [],
2570925677
"hasChildren": false
2571025678
},
25679+
{
25680+
"path": "channels.telegram.accounts.*.trustedLocalFileRoots",
25681+
"kind": "channel",
25682+
"type": "array",
25683+
"required": false,
25684+
"deprecated": false,
25685+
"sensitive": false,
25686+
"tags": [],
25687+
"hasChildren": true
25688+
},
25689+
{
25690+
"path": "channels.telegram.accounts.*.trustedLocalFileRoots.*",
25691+
"kind": "channel",
25692+
"type": "string",
25693+
"required": false,
25694+
"deprecated": false,
25695+
"sensitive": false,
25696+
"tags": [],
25697+
"hasChildren": false
25698+
},
2571125699
{
2571225700
"path": "channels.telegram.accounts.*.webhookCertPath",
2571325701
"kind": "channel",
@@ -28029,6 +28017,32 @@
2802928017
"tags": [],
2803028018
"hasChildren": false
2803128019
},
28020+
{
28021+
"path": "channels.telegram.trustedLocalFileRoots",
28022+
"kind": "channel",
28023+
"type": "array",
28024+
"required": false,
28025+
"deprecated": false,
28026+
"sensitive": false,
28027+
"tags": [
28028+
"channels",
28029+
"network",
28030+
"storage"
28031+
],
28032+
"label": "Telegram Trusted Local File Roots",
28033+
"help": "Trusted local filesystem roots for self-hosted Telegram Bot API absolute file_path values. Only absolute paths inside these roots are read directly; all other absolute paths are rejected.",
28034+
"hasChildren": true
28035+
},
28036+
{
28037+
"path": "channels.telegram.trustedLocalFileRoots.*",
28038+
"kind": "channel",
28039+
"type": "string",
28040+
"required": false,
28041+
"deprecated": false,
28042+
"sensitive": false,
28043+
"tags": [],
28044+
"hasChildren": false
28045+
},
2803228046
{
2803328047
"path": "channels.telegram.webhookCertPath",
2803428048
"kind": "channel",

docs/.generated/config-baseline.json

Lines changed: 60 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -36860,22 +36860,6 @@
3686036860
"tags": [],
3686136861
"hasChildren": false
3686236862
},
36863-
{
36864-
"path": "channels.googlechat.accounts.*.streamMode",
36865-
"kind": "channel",
36866-
"type": "string",
36867-
"required": true,
36868-
"enumValues": [
36869-
"replace",
36870-
"status_final",
36871-
"append"
36872-
],
36873-
"defaultValue": "replace",
36874-
"deprecated": false,
36875-
"sensitive": false,
36876-
"tags": [],
36877-
"hasChildren": false
36878-
},
3687936863
{
3688036864
"path": "channels.googlechat.accounts.*.textChunkLimit",
3688136865
"kind": "channel",
@@ -37531,22 +37515,6 @@
3753137515
"tags": [],
3753237516
"hasChildren": false
3753337517
},
37534-
{
37535-
"path": "channels.googlechat.streamMode",
37536-
"kind": "channel",
37537-
"type": "string",
37538-
"required": true,
37539-
"enumValues": [
37540-
"replace",
37541-
"status_final",
37542-
"append"
37543-
],
37544-
"defaultValue": "replace",
37545-
"deprecated": false,
37546-
"sensitive": false,
37547-
"tags": [],
37548-
"hasChildren": false
37549-
},
3755037518
{
3755137519
"path": "channels.googlechat.textChunkLimit",
3755237520
"kind": "channel",
@@ -53748,6 +53716,26 @@
5374853716
"tags": [],
5374953717
"hasChildren": false
5375053718
},
53719+
{
53720+
"path": "channels.telegram.accounts.*.trustedLocalFileRoots",
53721+
"kind": "channel",
53722+
"type": "array",
53723+
"required": false,
53724+
"deprecated": false,
53725+
"sensitive": false,
53726+
"tags": [],
53727+
"hasChildren": true
53728+
},
53729+
{
53730+
"path": "channels.telegram.accounts.*.trustedLocalFileRoots.*",
53731+
"kind": "channel",
53732+
"type": "string",
53733+
"required": false,
53734+
"deprecated": false,
53735+
"sensitive": false,
53736+
"tags": [],
53737+
"hasChildren": false
53738+
},
5375153739
{
5375253740
"path": "channels.telegram.accounts.*.webhookCertPath",
5375353741
"kind": "channel",
@@ -56069,6 +56057,32 @@
5606956057
"tags": [],
5607056058
"hasChildren": false
5607156059
},
56060+
{
56061+
"path": "channels.telegram.trustedLocalFileRoots",
56062+
"kind": "channel",
56063+
"type": "array",
56064+
"required": false,
56065+
"deprecated": false,
56066+
"sensitive": false,
56067+
"tags": [
56068+
"channels",
56069+
"network",
56070+
"storage"
56071+
],
56072+
"label": "Telegram Trusted Local File Roots",
56073+
"help": "Trusted local filesystem roots for self-hosted Telegram Bot API absolute file_path values. Only absolute paths inside these roots are read directly; all other absolute paths are rejected.",
56074+
"hasChildren": true
56075+
},
56076+
{
56077+
"path": "channels.telegram.trustedLocalFileRoots.*",
56078+
"kind": "channel",
56079+
"type": "string",
56080+
"required": false,
56081+
"deprecated": false,
56082+
"sensitive": false,
56083+
"tags": [],
56084+
"hasChildren": false
56085+
},
5607256086
{
5607356087
"path": "channels.telegram.webhookCertPath",
5607456088
"kind": "channel",
@@ -65388,6 +65402,20 @@
6538865402
"tags": [],
6538965403
"hasChildren": true
6539065404
},
65405+
{
65406+
"path": "plugins.entries.memory-core.config.dreaming.cron",
65407+
"kind": "plugin",
65408+
"type": "string",
65409+
"required": false,
65410+
"deprecated": false,
65411+
"sensitive": false,
65412+
"tags": [
65413+
"automation"
65414+
],
65415+
"label": "Dreaming Cron",
65416+
"help": "Optional cron cadence override for managed dreaming runs.",
65417+
"hasChildren": false
65418+
},
6539165419
{
6539265420
"path": "plugins.entries.memory-core.config.dreaming.frequency",
6539365421
"kind": "plugin",

docs/.generated/config-baseline.plugin.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5743,6 +5743,20 @@
57435743
"tags": [],
57445744
"hasChildren": true
57455745
},
5746+
{
5747+
"path": "plugins.entries.memory-core.config.dreaming.cron",
5748+
"kind": "plugin",
5749+
"type": "string",
5750+
"required": false,
5751+
"deprecated": false,
5752+
"sensitive": false,
5753+
"tags": [
5754+
"automation"
5755+
],
5756+
"label": "Dreaming Cron",
5757+
"help": "Optional cron cadence override for managed dreaming runs.",
5758+
"hasChildren": false
5759+
},
57465760
{
57475761
"path": "plugins.entries.memory-core.config.dreaming.frequency",
57485762
"kind": "plugin",

extensions/discord/src/config-ui-hints.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ export const discordChannelConfigUiHints = {
3333
label: "Discord Streaming Mode",
3434
help: 'Unified Discord stream preview mode: "off" | "partial" | "block" | "progress". "progress" maps to "partial" on Discord. Legacy boolean/streamMode keys are auto-mapped.',
3535
},
36-
streamMode: {
37-
label: "Discord Stream Mode (Legacy)",
38-
help: "Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.",
39-
},
4036
"draftChunk.minChars": {
4137
label: "Discord Draft Chunk Min Chars",
4238
help: 'Minimum chars before emitting a Discord stream preview update when channels.discord.streaming="block" (default: 200).',

extensions/slack/src/config-ui-hints.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,6 @@ export const slackChannelConfigUiHints = {
8181
label: "Slack Native Streaming",
8282
help: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming is partial (default: true).",
8383
},
84-
streamMode: {
85-
label: "Slack Stream Mode (Legacy)",
86-
help: "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.",
87-
},
8884
"thread.historyScope": {
8985
label: "Slack Thread History Scope",
9086
help: 'Scope for Slack thread history context ("thread" isolates per thread; "channel" reuses channel history).',

src/config/bundled-channel-config-metadata.generated.ts

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2899,10 +2899,6 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
28992899
label: "Discord Streaming Mode",
29002900
help: 'Unified Discord stream preview mode: "off" | "partial" | "block" | "progress". "progress" maps to "partial" on Discord. Legacy boolean/streamMode keys are auto-mapped.',
29012901
},
2902-
streamMode: {
2903-
label: "Discord Stream Mode (Legacy)",
2904-
help: "Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.",
2905-
},
29062902
"draftChunk.minChars": {
29072903
label: "Discord Draft Chunk Min Chars",
29082904
help: 'Minimum chars before emitting a Discord stream preview update when channels.discord.streaming="block" (default: 200).',
@@ -4477,11 +4473,6 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
44774473
},
44784474
additionalProperties: false,
44794475
},
4480-
streamMode: {
4481-
default: "replace",
4482-
type: "string",
4483-
enum: ["replace", "status_final", "append"],
4484-
},
44854476
mediaMaxMb: {
44864477
type: "number",
44874478
exclusiveMinimum: 0,
@@ -4856,11 +4847,6 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
48564847
},
48574848
additionalProperties: false,
48584849
},
4859-
streamMode: {
4860-
default: "replace",
4861-
type: "string",
4862-
enum: ["replace", "status_final", "append"],
4863-
},
48644850
mediaMaxMb: {
48654851
type: "number",
48664852
exclusiveMinimum: 0,
@@ -4935,15 +4921,15 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
49354921
type: "string",
49364922
},
49374923
},
4938-
required: ["groupPolicy", "streamMode"],
4924+
required: ["groupPolicy"],
49394925
additionalProperties: false,
49404926
},
49414927
},
49424928
defaultAccount: {
49434929
type: "string",
49444930
},
49454931
},
4946-
required: ["groupPolicy", "streamMode"],
4932+
required: ["groupPolicy"],
49474933
additionalProperties: false,
49484934
},
49494935
},
@@ -11691,10 +11677,6 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
1169111677
label: "Slack Native Streaming",
1169211678
help: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming is partial (default: true).",
1169311679
},
11694-
streamMode: {
11695-
label: "Slack Stream Mode (Legacy)",
11696-
help: "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.",
11697-
},
1169811680
"thread.historyScope": {
1169911681
label: "Slack Thread History Scope",
1170011682
help: 'Scope for Slack thread history context ("thread" isolates per thread; "channel" reuses channel history).',
@@ -12713,6 +12695,14 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
1271312695
type: "string",
1271412696
format: "uri",
1271512697
},
12698+
trustedLocalFileRoots: {
12699+
description:
12700+
"Trusted local filesystem roots for self-hosted Telegram Bot API absolute file_path values. Only absolute paths under these roots are read directly; all other absolute paths are rejected.",
12701+
type: "array",
12702+
items: {
12703+
type: "string",
12704+
},
12705+
},
1271612706
autoTopicLabel: {
1271712707
anyOf: [
1271812708
{
@@ -13716,6 +13706,14 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
1371613706
type: "string",
1371713707
format: "uri",
1371813708
},
13709+
trustedLocalFileRoots: {
13710+
description:
13711+
"Trusted local filesystem roots for self-hosted Telegram Bot API absolute file_path values. Only absolute paths under these roots are read directly; all other absolute paths are rejected.",
13712+
type: "array",
13713+
items: {
13714+
type: "string",
13715+
},
13716+
},
1371913717
autoTopicLabel: {
1372013718
anyOf: [
1372113719
{
@@ -13816,6 +13814,10 @@ export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
1381613814
label: "Telegram API Root URL",
1381713815
help: "Custom Telegram Bot API root URL. Use for self-hosted Bot API servers (https://github.com/tdlib/telegram-bot-api) or reverse proxies in regions where api.telegram.org is blocked.",
1381813816
},
13817+
trustedLocalFileRoots: {
13818+
label: "Telegram Trusted Local File Roots",
13819+
help: "Trusted local filesystem roots for self-hosted Telegram Bot API absolute file_path values. Only absolute paths inside these roots are read directly; all other absolute paths are rejected.",
13820+
},
1381913821
autoTopicLabel: {
1382013822
label: "Telegram Auto Topic Label",
1382113823
help: "Auto-rename DM forum topics on first message using LLM. Default: true. Set to false to disable, or use object form { enabled: true, prompt: '...' } for custom prompt.",

src/config/zod-schema.providers-core.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,6 @@ export const GoogleChatAccountSchema = z
800800
chunkMode: z.enum(["length", "newline"]).optional(),
801801
blockStreaming: z.boolean().optional(),
802802
blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(),
803-
streamMode: z.enum(["replace", "status_final", "append"]).optional().default("replace"),
804803
mediaMaxMb: z.number().positive().optional(),
805804
replyToMode: ReplyToModeSchema.optional(),
806805
actions: z

0 commit comments

Comments
 (0)