diff --git a/docs/.generated/plugin-sdk-api-baseline.json b/docs/.generated/plugin-sdk-api-baseline.json index b7bb90f6739..4c60c92aaed 100644 --- a/docs/.generated/plugin-sdk-api-baseline.json +++ b/docs/.generated/plugin-sdk-api-baseline.json @@ -109,7 +109,7 @@ "exportName": "ChannelConfigSchema", "kind": "type", "source": { - "line": 71, + "line": 72, "path": "src/channels/plugins/types.plugin.ts" } }, @@ -118,7 +118,7 @@ "exportName": "ChannelConfigUiHint", "kind": "type", "source": { - "line": 40, + "line": 41, "path": "src/channels/plugins/types.plugin.ts" } }, @@ -127,7 +127,7 @@ "exportName": "ChannelConfiguredBindingConversationRef", "kind": "type", "source": { - "line": 675, + "line": 776, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -136,7 +136,7 @@ "exportName": "ChannelConfiguredBindingMatch", "kind": "type", "source": { - "line": 680, + "line": 781, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -145,7 +145,7 @@ "exportName": "ChannelConfiguredBindingProvider", "kind": "type", "source": { - "line": 696, + "line": 797, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -154,7 +154,7 @@ "exportName": "ChannelGatewayContext", "kind": "type", "source": { - "line": 272, + "line": 285, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -172,7 +172,7 @@ "exportName": "ChannelMessageActionAdapter", "kind": "type", "source": { - "line": 560, + "line": 580, "path": "src/channels/plugins/types.core.ts" } }, @@ -181,7 +181,7 @@ "exportName": "ChannelMessageActionContext", "kind": "type", "source": { - "line": 524, + "line": 544, "path": "src/channels/plugins/types.core.ts" } }, @@ -199,7 +199,7 @@ "exportName": "ChannelPlugin", "kind": "type", "source": { - "line": 81, + "line": 82, "path": "src/channels/plugins/types.plugin.ts" } }, @@ -226,7 +226,7 @@ "exportName": "ChannelSetupWizard", "kind": "type", "source": { - "line": 247, + "line": 253, "path": "src/channels/plugins/setup-wizard.ts" } }, @@ -235,7 +235,7 @@ "exportName": "ChannelSetupWizardAllowFromEntry", "kind": "type", "source": { - "line": 154, + "line": 160, "path": "src/channels/plugins/setup-wizard.ts" } }, @@ -271,7 +271,7 @@ "exportName": "CliBackendPlugin", "kind": "type", "source": { - "line": 1899, + "line": 1750, "path": "src/plugins/types.ts" } }, @@ -415,7 +415,7 @@ "exportName": "MediaUnderstandingProviderPlugin", "kind": "type", "source": { - "line": 1531, + "line": 1527, "path": "src/plugins/types.ts" } }, @@ -433,7 +433,7 @@ "exportName": "OpenClawPluginApi", "kind": "type", "source": { - "line": 1943, + "line": 1794, "path": "src/plugins/types.ts" } }, @@ -442,7 +442,7 @@ "exportName": "OpenClawPluginConfigSchema", "kind": "type", "source": { - "line": 104, + "line": 100, "path": "src/plugins/types.ts" } }, @@ -451,7 +451,7 @@ "exportName": "PluginLogger", "kind": "type", "source": { - "line": 75, + "line": 71, "path": "src/plugins/types.ts" } }, @@ -496,7 +496,7 @@ "exportName": "ProviderAuthContext", "kind": "type", "source": { - "line": 179, + "line": 175, "path": "src/plugins/types.ts" } }, @@ -505,7 +505,7 @@ "exportName": "ProviderAuthResult", "kind": "type", "source": { - "line": 164, + "line": 160, "path": "src/plugins/types.ts" } }, @@ -514,7 +514,7 @@ "exportName": "ProviderRuntimeModel", "kind": "type", "source": { - "line": 320, + "line": 316, "path": "src/plugins/types.ts" } }, @@ -568,7 +568,7 @@ "exportName": "SpeechProviderPlugin", "kind": "type", "source": { - "line": 1506, + "line": 1502, "path": "src/plugins/types.ts" } }, @@ -1148,7 +1148,7 @@ "exportName": "doesApprovalRequestMatchChannelAccount", "kind": "function", "source": { - "line": 236, + "line": 240, "path": "src/infra/exec-approval-session-target.ts" } }, @@ -1220,7 +1220,7 @@ "exportName": "resolveApprovalRequestAccountId", "kind": "function", "source": { - "line": 182, + "line": 183, "path": "src/infra/exec-approval-session-target.ts" } }, @@ -1229,7 +1229,7 @@ "exportName": "resolveApprovalRequestChannelAccountId", "kind": "function", "source": { - "line": 209, + "line": 213, "path": "src/infra/exec-approval-session-target.ts" } }, @@ -1238,7 +1238,7 @@ "exportName": "resolveApprovalRequestOriginTarget", "kind": "function", "source": { - "line": 270, + "line": 277, "path": "src/infra/exec-approval-session-target.ts" } }, @@ -1706,11 +1706,11 @@ } }, { - "declaration": "export const DiscordConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; proxy: z.ZodOptional; allowBots: z.ZodOptional]>>; dangerouslyAllowNameMatching: z.ZodOptional; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional]>>; streamMode: z.ZodOptional>; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; maxLinesPerMessage: z.ZodOptional; mediaMaxMb: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; stickers: z.ZodOptional; emojiUploads: z.ZodOptional; stickerUploads: z.ZodOptional; polls: z.ZodOptional; permissions: z.ZodOptional; messages: z.ZodOptional; threads: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; memberInfo: z.ZodOptional; roleInfo: z.ZodOptional; roles: z.ZodOptional; channelInfo: z.ZodOptional; voiceStatus: z.ZodOptional; events: z.ZodOptional; moderation: z.ZodOptional; channels: z.ZodOptional; presence: z.ZodOptional; }, z.core.$strict>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; }, z.core.$strict>>; guilds: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; reactionNotifications: z.ZodOptional>; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; channels: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; systemPrompt: z.ZodOptional; includeThreadStarter: z.ZodOptional; autoThread: z.ZodOptional; autoThreadName: z.ZodOptional>; autoArchiveDuration: z.ZodOptional, z.ZodLiteral<60>, z.ZodLiteral<1440>, z.ZodLiteral<4320>, z.ZodLiteral<10080>]>>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; cleanupAfterResolve: z.ZodOptional; target: z.ZodOptional>; }, z.core.$strict>>; agentComponents: z.ZodOptional; }, z.core.$strict>>; ui: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>; slashCommand: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; intents: z.ZodOptional; guildMembers: z.ZodOptional; }, z.core.$strict>>; voice: z.ZodOptional; autoJoin: z.ZodOptional>>; daveEncryption: z.ZodOptional; decryptionFailureTolerance: z.ZodOptional; tts: z.ZodOptional>; enabled: z.ZodOptional; mode: z.ZodOptional>; provider: z.ZodOptional; summaryModel: z.ZodOptional; modelOverrides: z.ZodOptional; allowText: z.ZodOptional; allowProvider: z.ZodOptional; allowVoice: z.ZodOptional; allowModelId: z.ZodOptional; allowVoiceSettings: z.ZodOptional; allowNormalization: z.ZodOptional; allowSeed: z.ZodOptional; }, z.core.$strict>>; providers: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$catchall, z.ZodRecord]>>>>>; prefsPath: z.ZodOptional; maxTextLength: z.ZodOptional; timeoutMs: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>>; pluralkit: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; ackReactionScope: z.ZodOptional>; activity: z.ZodOptional; status: z.ZodOptional>; autoPresence: z.ZodOptional; intervalMs: z.ZodOptional; minUpdateIntervalMs: z.ZodOptional; healthyText: z.ZodOptional; degradedText: z.ZodOptional; exhaustedText: z.ZodOptional; }, z.core.$strict>>; activityType: z.ZodOptional, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>]>>; activityUrl: z.ZodOptional; inboundWorker: z.ZodOptional; }, z.core.$strict>>; eventQueue: z.ZodOptional; maxQueueSize: z.ZodOptional; maxConcurrency: z.ZodOptional; }, z.core.$strict>>; accounts: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; proxy: z.ZodOptional; allowBots: z.ZodOptional]>>; dangerouslyAllowNameMatching: z.ZodOptional; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional]>>; streamMode: z.ZodOptional>; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; maxLinesPerMessage: z.ZodOptional; mediaMaxMb: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; stickers: z.ZodOptional; emojiUploads: z.ZodOptional; stickerUploads: z.ZodOptional; polls: z.ZodOptional; permissions: z.ZodOptional; messages: z.ZodOptional; threads: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; memberInfo: z.ZodOptional; roleInfo: z.ZodOptional; roles: z.ZodOptional; channelInfo: z.ZodOptional; voiceStatus: z.ZodOptional; events: z.ZodOptional; moderation: z.ZodOptional; channels: z.ZodOptional; presence: z.ZodOptional; }, z.core.$strict>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; }, z.core.$strict>>; guilds: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; reactionNotifications: z.ZodOptional>; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; channels: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; systemPrompt: z.ZodOptional; includeThreadStarter: z.ZodOptional; autoThread: z.ZodOptional; autoThreadName: z.ZodOptional>; autoArchiveDuration: z.ZodOptional, z.ZodLiteral<60>, z.ZodLiteral<1440>, z.ZodLiteral<4320>, z.ZodLiteral<10080>]>>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; cleanupAfterResolve: z.ZodOptional; target: z.ZodOptional>; }, z.core.$strict>>; agentComponents: z.ZodOptional; }, z.core.$strict>>; ui: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>; slashCommand: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; intents: z.ZodOptional; guildMembers: z.ZodOptional; }, z.core.$strict>>; voice: z.ZodOptional; autoJoin: z.ZodOptional>>; daveEncryption: z.ZodOptional; decryptionFailureTolerance: z.ZodOptional; tts: z.ZodOptional>; enabled: z.ZodOptional; mode: z.ZodOptional>; provider: z.ZodOptional; summaryModel: z.ZodOptional; modelOverrides: z.ZodOptional; allowText: z.ZodOptional; allowProvider: z.ZodOptional; allowVoice: z.ZodOptional; allowModelId: z.ZodOptional; allowVoiceSettings: z.ZodOptional; allowNormalization: z.ZodOptional; allowSeed: z.ZodOptional; }, z.core.$strict>>; providers: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$catchall, z.ZodRecord]>>>>>; prefsPath: z.ZodOptional; maxTextLength: z.ZodOptional; timeoutMs: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>>; pluralkit: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; ackReactionScope: z.ZodOptional>; activity: z.ZodOptional; status: z.ZodOptional>; autoPresence: z.ZodOptional; intervalMs: z.ZodOptional; minUpdateIntervalMs: z.ZodOptional; healthyText: z.ZodOptional; degradedText: z.ZodOptional; exhaustedText: z.ZodOptional; }, z.core.$strict>>; activityType: z.ZodOptional, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>]>>; activityUrl: z.ZodOptional; inboundWorker: z.ZodOptional; }, z.core.$strict>>; eventQueue: z.ZodOptional; maxQueueSize: z.ZodOptional; maxConcurrency: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;", + "declaration": "export const DiscordConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; proxy: z.ZodOptional; allowBots: z.ZodOptional]>>; dangerouslyAllowNameMatching: z.ZodOptional; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional>; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; maxLinesPerMessage: z.ZodOptional; mediaMaxMb: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; stickers: z.ZodOptional; emojiUploads: z.ZodOptional; stickerUploads: z.ZodOptional; polls: z.ZodOptional; permissions: z.ZodOptional; messages: z.ZodOptional; threads: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; memberInfo: z.ZodOptional; roleInfo: z.ZodOptional; roles: z.ZodOptional; channelInfo: z.ZodOptional; voiceStatus: z.ZodOptional; events: z.ZodOptional; moderation: z.ZodOptional; channels: z.ZodOptional; presence: z.ZodOptional; }, z.core.$strict>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; }, z.core.$strict>>; guilds: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; reactionNotifications: z.ZodOptional>; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; channels: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; systemPrompt: z.ZodOptional; includeThreadStarter: z.ZodOptional; autoThread: z.ZodOptional; autoThreadName: z.ZodOptional>; autoArchiveDuration: z.ZodOptional, z.ZodLiteral<60>, z.ZodLiteral<1440>, z.ZodLiteral<4320>, z.ZodLiteral<10080>]>>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; cleanupAfterResolve: z.ZodOptional; target: z.ZodOptional>; }, z.core.$strict>>; agentComponents: z.ZodOptional; }, z.core.$strict>>; ui: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>; slashCommand: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; intents: z.ZodOptional; guildMembers: z.ZodOptional; }, z.core.$strict>>; voice: z.ZodOptional; autoJoin: z.ZodOptional>>; daveEncryption: z.ZodOptional; decryptionFailureTolerance: z.ZodOptional; tts: z.ZodOptional>; enabled: z.ZodOptional; mode: z.ZodOptional>; provider: z.ZodOptional; summaryModel: z.ZodOptional; modelOverrides: z.ZodOptional; allowText: z.ZodOptional; allowProvider: z.ZodOptional; allowVoice: z.ZodOptional; allowModelId: z.ZodOptional; allowVoiceSettings: z.ZodOptional; allowNormalization: z.ZodOptional; allowSeed: z.ZodOptional; }, z.core.$strict>>; providers: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$catchall, z.ZodRecord]>>>>>; prefsPath: z.ZodOptional; maxTextLength: z.ZodOptional; timeoutMs: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>>; pluralkit: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; ackReactionScope: z.ZodOptional>; activity: z.ZodOptional; status: z.ZodOptional>; autoPresence: z.ZodOptional; intervalMs: z.ZodOptional; minUpdateIntervalMs: z.ZodOptional; healthyText: z.ZodOptional; degradedText: z.ZodOptional; exhaustedText: z.ZodOptional; }, z.core.$strict>>; activityType: z.ZodOptional, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>]>>; activityUrl: z.ZodOptional; inboundWorker: z.ZodOptional; }, z.core.$strict>>; eventQueue: z.ZodOptional; maxQueueSize: z.ZodOptional; maxConcurrency: z.ZodOptional; }, z.core.$strict>>; accounts: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; proxy: z.ZodOptional; allowBots: z.ZodOptional]>>; dangerouslyAllowNameMatching: z.ZodOptional; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional>; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; maxLinesPerMessage: z.ZodOptional; mediaMaxMb: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; stickers: z.ZodOptional; emojiUploads: z.ZodOptional; stickerUploads: z.ZodOptional; polls: z.ZodOptional; permissions: z.ZodOptional; messages: z.ZodOptional; threads: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; memberInfo: z.ZodOptional; roleInfo: z.ZodOptional; roles: z.ZodOptional; channelInfo: z.ZodOptional; voiceStatus: z.ZodOptional; events: z.ZodOptional; moderation: z.ZodOptional; channels: z.ZodOptional; presence: z.ZodOptional; }, z.core.$strict>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; }, z.core.$strict>>; guilds: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; reactionNotifications: z.ZodOptional>; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; channels: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; systemPrompt: z.ZodOptional; includeThreadStarter: z.ZodOptional; autoThread: z.ZodOptional; autoThreadName: z.ZodOptional>; autoArchiveDuration: z.ZodOptional, z.ZodLiteral<60>, z.ZodLiteral<1440>, z.ZodLiteral<4320>, z.ZodLiteral<10080>]>>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; cleanupAfterResolve: z.ZodOptional; target: z.ZodOptional>; }, z.core.$strict>>; agentComponents: z.ZodOptional; }, z.core.$strict>>; ui: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>; slashCommand: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; intents: z.ZodOptional; guildMembers: z.ZodOptional; }, z.core.$strict>>; voice: z.ZodOptional; autoJoin: z.ZodOptional>>; daveEncryption: z.ZodOptional; decryptionFailureTolerance: z.ZodOptional; tts: z.ZodOptional>; enabled: z.ZodOptional; mode: z.ZodOptional>; provider: z.ZodOptional; summaryModel: z.ZodOptional; modelOverrides: z.ZodOptional; allowText: z.ZodOptional; allowProvider: z.ZodOptional; allowVoice: z.ZodOptional; allowModelId: z.ZodOptional; allowVoiceSettings: z.ZodOptional; allowNormalization: z.ZodOptional; allowSeed: z.ZodOptional; }, z.core.$strict>>; providers: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$catchall, z.ZodRecord]>>>>>; prefsPath: z.ZodOptional; maxTextLength: z.ZodOptional; timeoutMs: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>>; pluralkit: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; ackReactionScope: z.ZodOptional>; activity: z.ZodOptional; status: z.ZodOptional>; autoPresence: z.ZodOptional; intervalMs: z.ZodOptional; minUpdateIntervalMs: z.ZodOptional; healthyText: z.ZodOptional; degradedText: z.ZodOptional; exhaustedText: z.ZodOptional; }, z.core.$strict>>; activityType: z.ZodOptional, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>]>>; activityUrl: z.ZodOptional; inboundWorker: z.ZodOptional; }, z.core.$strict>>; eventQueue: z.ZodOptional; maxQueueSize: z.ZodOptional; maxConcurrency: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;", "exportName": "DiscordConfigSchema", "kind": "const", "source": { - "line": 710, + "line": 676, "path": "src/config/zod-schema.providers-core.ts" } }, @@ -1737,7 +1737,7 @@ "exportName": "GoogleChatConfigSchema", "kind": "const", "source": { - "line": 849, + "line": 815, "path": "src/config/zod-schema.providers-core.ts" } }, @@ -1755,7 +1755,7 @@ "exportName": "IMessageConfigSchema", "kind": "const", "source": { - "line": 1363, + "line": 1326, "path": "src/config/zod-schema.providers-core.ts" } }, @@ -1773,7 +1773,7 @@ "exportName": "MSTeamsConfigSchema", "kind": "const", "source": { - "line": 1547, + "line": 1510, "path": "src/config/zod-schema.providers-core.ts" } }, @@ -1800,25 +1800,25 @@ "exportName": "SignalConfigSchema", "kind": "const", "source": { - "line": 1119, + "line": 1082, "path": "src/config/zod-schema.providers-core.ts" } }, { - "declaration": "export const SlackConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ interactiveReplies: z.ZodOptional; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; appToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userTokenReadOnly: z.ZodDefault>; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional]>>; nativeStreaming: z.ZodOptional; streamMode: z.ZodOptional>; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; replyToModeByChatType: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; group: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; channel: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; thread: z.ZodOptional>; inheritParent: z.ZodOptional; initialHistoryLimit: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; messages: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; permissions: z.ZodOptional; memberInfo: z.ZodOptional; channelInfo: z.ZodOptional; emojiList: z.ZodOptional; }, z.core.$strict>>; slashCommand: z.ZodOptional; name: z.ZodOptional; sessionPrefix: z.ZodOptional; ephemeral: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; channels: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; allowBots: z.ZodOptional; users: z.ZodOptional>>; skills: z.ZodOptional>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; typingReaction: z.ZodOptional; mode: z.ZodDefault>>; signingSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodDefault>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; accounts: z.ZodOptional; mode: z.ZodOptional>; signingSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ interactiveReplies: z.ZodOptional; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; appToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userTokenReadOnly: z.ZodDefault>; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; groupPolicy: z.ZodOptional>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional]>>; nativeStreaming: z.ZodOptional; streamMode: z.ZodOptional>; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; replyToModeByChatType: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; group: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; channel: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; thread: z.ZodOptional>; inheritParent: z.ZodOptional; initialHistoryLimit: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; messages: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; permissions: z.ZodOptional; memberInfo: z.ZodOptional; channelInfo: z.ZodOptional; emojiList: z.ZodOptional; }, z.core.$strict>>; slashCommand: z.ZodOptional; name: z.ZodOptional; sessionPrefix: z.ZodOptional; ephemeral: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; channels: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; allowBots: z.ZodOptional; users: z.ZodOptional>>; skills: z.ZodOptional>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; typingReaction: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;", + "declaration": "export const SlackConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ interactiveReplies: z.ZodOptional; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; appToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userTokenReadOnly: z.ZodDefault>; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional>; nativeStreaming: z.ZodOptional; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; replyToModeByChatType: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; group: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; channel: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; thread: z.ZodOptional>; inheritParent: z.ZodOptional; initialHistoryLimit: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; messages: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; permissions: z.ZodOptional; memberInfo: z.ZodOptional; channelInfo: z.ZodOptional; emojiList: z.ZodOptional; }, z.core.$strict>>; slashCommand: z.ZodOptional; name: z.ZodOptional; sessionPrefix: z.ZodOptional; ephemeral: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; channels: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; allowBots: z.ZodOptional; users: z.ZodOptional>>; skills: z.ZodOptional>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; typingReaction: z.ZodOptional; mode: z.ZodDefault>>; signingSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodDefault>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; accounts: z.ZodOptional; mode: z.ZodOptional>; signingSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ interactiveReplies: z.ZodOptional; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; appToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userTokenReadOnly: z.ZodDefault>; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; groupPolicy: z.ZodOptional>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional>; nativeStreaming: z.ZodOptional; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; replyToModeByChatType: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; group: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; channel: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; thread: z.ZodOptional>; inheritParent: z.ZodOptional; initialHistoryLimit: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; messages: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; permissions: z.ZodOptional; memberInfo: z.ZodOptional; channelInfo: z.ZodOptional; emojiList: z.ZodOptional; }, z.core.$strict>>; slashCommand: z.ZodOptional; name: z.ZodOptional; sessionPrefix: z.ZodOptional; ephemeral: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; channels: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; allowBots: z.ZodOptional; users: z.ZodOptional>>; skills: z.ZodOptional>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; typingReaction: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;", "exportName": "SlackConfigSchema", "kind": "const", "source": { - "line": 984, + "line": 947, "path": "src/config/zod-schema.providers-core.ts" } }, { - "declaration": "export const TelegramConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ inlineButtons: z.ZodOptional>; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; customCommands: z.ZodOptional>>; configWrites: z.ZodOptional; dmPolicy: z.ZodDefault>>; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tokenFile: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; groups: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional>; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; direct: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; requireTopic: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; streaming: z.ZodOptional]>>; blockStreaming: z.ZodOptional; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streamMode: z.ZodOptional>; mediaMaxMb: z.ZodOptional; timeoutSeconds: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; network: z.ZodOptional; dnsResultOrder: z.ZodOptional>; dangerouslyAllowPrivateNetwork: z.ZodOptional; }, z.core.$strict>>; proxy: z.ZodOptional; webhookUrl: z.ZodOptional; webhookSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; webhookHost: z.ZodOptional; webhookPort: z.ZodOptional; webhookCertPath: z.ZodOptional; actions: z.ZodOptional; sendMessage: z.ZodOptional; poll: z.ZodOptional; deleteMessage: z.ZodOptional; editMessage: z.ZodOptional; sticker: z.ZodOptional; createForumTopic: z.ZodOptional; editForumTopic: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; reactionNotifications: z.ZodOptional>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; linkPreview: z.ZodOptional; silentErrorReplies: z.ZodOptional; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; apiRoot: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; accounts: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ inlineButtons: z.ZodOptional>; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; customCommands: z.ZodOptional>>; configWrites: z.ZodOptional; dmPolicy: z.ZodDefault>>; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tokenFile: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; groups: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional>; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; direct: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; requireTopic: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; streaming: z.ZodOptional]>>; blockStreaming: z.ZodOptional; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streamMode: z.ZodOptional>; mediaMaxMb: z.ZodOptional; timeoutSeconds: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; network: z.ZodOptional; dnsResultOrder: z.ZodOptional>; dangerouslyAllowPrivateNetwork: z.ZodOptional; }, z.core.$strict>>; proxy: z.ZodOptional; webhookUrl: z.ZodOptional; webhookSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; webhookHost: z.ZodOptional; webhookPort: z.ZodOptional; webhookCertPath: z.ZodOptional; actions: z.ZodOptional; sendMessage: z.ZodOptional; poll: z.ZodOptional; deleteMessage: z.ZodOptional; editMessage: z.ZodOptional; sticker: z.ZodOptional; createForumTopic: z.ZodOptional; editForumTopic: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; reactionNotifications: z.ZodOptional>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; linkPreview: z.ZodOptional; silentErrorReplies: z.ZodOptional; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; apiRoot: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;", + "declaration": "export const TelegramConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ inlineButtons: z.ZodOptional>; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; customCommands: z.ZodOptional>>; configWrites: z.ZodOptional; dmPolicy: z.ZodDefault>>; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tokenFile: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; groups: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional>; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; direct: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; requireTopic: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; streaming: z.ZodOptional>; blockStreaming: z.ZodOptional; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaMaxMb: z.ZodOptional; timeoutSeconds: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; network: z.ZodOptional; dnsResultOrder: z.ZodOptional>; dangerouslyAllowPrivateNetwork: z.ZodOptional; }, z.core.$strict>>; proxy: z.ZodOptional; webhookUrl: z.ZodOptional; webhookSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; webhookHost: z.ZodOptional; webhookPort: z.ZodOptional; webhookCertPath: z.ZodOptional; actions: z.ZodOptional; sendMessage: z.ZodOptional; poll: z.ZodOptional; deleteMessage: z.ZodOptional; editMessage: z.ZodOptional; sticker: z.ZodOptional; createForumTopic: z.ZodOptional; editForumTopic: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; reactionNotifications: z.ZodOptional>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; linkPreview: z.ZodOptional; silentErrorReplies: z.ZodOptional; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; apiRoot: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; accounts: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ inlineButtons: z.ZodOptional>; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; customCommands: z.ZodOptional>>; configWrites: z.ZodOptional; dmPolicy: z.ZodDefault>>; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tokenFile: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; groups: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional>; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; direct: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; requireTopic: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; streaming: z.ZodOptional>; blockStreaming: z.ZodOptional; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaMaxMb: z.ZodOptional; timeoutSeconds: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; network: z.ZodOptional; dnsResultOrder: z.ZodOptional>; dangerouslyAllowPrivateNetwork: z.ZodOptional; }, z.core.$strict>>; proxy: z.ZodOptional; webhookUrl: z.ZodOptional; webhookSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; webhookHost: z.ZodOptional; webhookPort: z.ZodOptional; webhookCertPath: z.ZodOptional; actions: z.ZodOptional; sendMessage: z.ZodOptional; poll: z.ZodOptional; deleteMessage: z.ZodOptional; editMessage: z.ZodOptional; sticker: z.ZodOptional; createForumTopic: z.ZodOptional; editForumTopic: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; reactionNotifications: z.ZodOptional>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; linkPreview: z.ZodOptional; silentErrorReplies: z.ZodOptional; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; apiRoot: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;", "exportName": "TelegramConfigSchema", "kind": "const", "source": { - "line": 342, + "line": 313, "path": "src/config/zod-schema.providers-core.ts" } }, @@ -1856,7 +1856,7 @@ "exportName": "BaseProbeResult", "kind": "type", "source": { - "line": 603, + "line": 630, "path": "src/channels/plugins/types.core.ts" } }, @@ -1865,7 +1865,7 @@ "exportName": "BaseTokenResolution", "kind": "type", "source": { - "line": 609, + "line": 636, "path": "src/channels/plugins/types.core.ts" } }, @@ -1892,7 +1892,7 @@ "exportName": "ChannelApprovalAdapter", "kind": "type", "source": { - "line": 613, + "line": 714, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -1901,7 +1901,7 @@ "exportName": "ChannelApprovalCapability", "kind": "type", "source": { - "line": 602, + "line": 703, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -1910,7 +1910,7 @@ "exportName": "ChannelCommandConversationContext", "kind": "type", "source": { - "line": 684, + "line": 785, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -1919,7 +1919,43 @@ "exportName": "ChannelDirectoryAdapter", "kind": "type", "source": { - "line": 459, + "line": 472, + "path": "src/channels/plugins/types.adapters.ts" + } + }, + { + "declaration": "export type ChannelDoctorAdapter = ChannelDoctorAdapter;", + "exportName": "ChannelDoctorAdapter", + "kind": "type", + "source": { + "line": 560, + "path": "src/channels/plugins/types.adapters.ts" + } + }, + { + "declaration": "export type ChannelDoctorConfigMutation = ChannelDoctorConfigMutation;", + "exportName": "ChannelDoctorConfigMutation", + "kind": "type", + "source": { + "line": 540, + "path": "src/channels/plugins/types.adapters.ts" + } + }, + { + "declaration": "export type ChannelDoctorEmptyAllowlistAccountContext = ChannelDoctorEmptyAllowlistAccountContext;", + "exportName": "ChannelDoctorEmptyAllowlistAccountContext", + "kind": "type", + "source": { + "line": 551, + "path": "src/channels/plugins/types.adapters.ts" + } + }, + { + "declaration": "export type ChannelDoctorSequenceResult = ChannelDoctorSequenceResult;", + "exportName": "ChannelDoctorSequenceResult", + "kind": "type", + "source": { + "line": 546, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -1937,7 +1973,7 @@ "exportName": "ChannelMessageActionAdapter", "kind": "type", "source": { - "line": 560, + "line": 580, "path": "src/channels/plugins/types.core.ts" } }, @@ -1946,7 +1982,7 @@ "exportName": "ChannelMessageActionContext", "kind": "type", "source": { - "line": 524, + "line": 544, "path": "src/channels/plugins/types.core.ts" } }, @@ -1995,6 +2031,15 @@ "path": "src/channels/plugins/types.core.ts" } }, + { + "declaration": "export type ChannelStructuredComponents = ChannelStructuredComponents;", + "exportName": "ChannelStructuredComponents", + "kind": "type", + "source": { + "line": 291, + "path": "src/channels/plugins/types.core.ts" + } + }, { "declaration": "export type ChannelThreadingContext = ChannelThreadingContext;", "exportName": "ChannelThreadingContext", @@ -2139,7 +2184,7 @@ "exportName": "ReplyPrefixContextBundle", "kind": "type", "source": { - "line": 12, + "line": 11, "path": "src/channels/reply-prefix.ts" } }, @@ -2148,7 +2193,7 @@ "exportName": "ReplyPrefixOptions", "kind": "type", "source": { - "line": 20, + "line": 18, "path": "src/channels/reply-prefix.ts" } }, @@ -2186,7 +2231,7 @@ "exportName": "createReplyPrefixContext", "kind": "function", "source": { - "line": 28, + "line": 23, "path": "src/channels/reply-prefix.ts" } }, @@ -2195,7 +2240,7 @@ "exportName": "createReplyPrefixOptions", "kind": "function", "source": { - "line": 64, + "line": 53, "path": "src/channels/reply-prefix.ts" } }, @@ -2393,7 +2438,7 @@ "exportName": "BaseProbeResult", "kind": "type", "source": { - "line": 603, + "line": 630, "path": "src/channels/plugins/types.core.ts" } }, @@ -2402,7 +2447,7 @@ "exportName": "BaseTokenResolution", "kind": "type", "source": { - "line": 609, + "line": 636, "path": "src/channels/plugins/types.core.ts" } }, @@ -2438,7 +2483,7 @@ "exportName": "ChannelAgentPromptAdapter", "kind": "type", "source": { - "line": 497, + "line": 511, "path": "src/channels/plugins/types.core.ts" } }, @@ -2465,7 +2510,7 @@ "exportName": "ChannelAllowlistAdapter", "kind": "type", "source": { - "line": 619, + "line": 720, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2474,7 +2519,7 @@ "exportName": "ChannelApprovalAdapter", "kind": "type", "source": { - "line": 613, + "line": 714, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2483,7 +2528,7 @@ "exportName": "ChannelApprovalCapability", "kind": "type", "source": { - "line": 602, + "line": 703, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2510,7 +2555,7 @@ "exportName": "ChannelAuthAdapter", "kind": "type", "source": { - "line": 396, + "line": 409, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2555,7 +2600,7 @@ "exportName": "ChannelCommandAdapter", "kind": "type", "source": { - "line": 497, + "line": 510, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2564,7 +2609,7 @@ "exportName": "ChannelCommandConversationContext", "kind": "type", "source": { - "line": 684, + "line": 785, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2582,7 +2627,7 @@ "exportName": "ChannelConfiguredBindingConversationRef", "kind": "type", "source": { - "line": 675, + "line": 776, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2591,7 +2636,7 @@ "exportName": "ChannelConfiguredBindingMatch", "kind": "type", "source": { - "line": 680, + "line": 781, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2600,7 +2645,7 @@ "exportName": "ChannelConfiguredBindingProvider", "kind": "type", "source": { - "line": 696, + "line": 797, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2609,7 +2654,7 @@ "exportName": "ChannelConversationBindingSupport", "kind": "type", "source": { - "line": 712, + "line": 814, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2618,7 +2663,7 @@ "exportName": "ChannelDirectoryAdapter", "kind": "type", "source": { - "line": 459, + "line": 472, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2627,7 +2672,7 @@ "exportName": "ChannelDirectoryEntry", "kind": "type", "source": { - "line": 511, + "line": 531, "path": "src/channels/plugins/types.core.ts" } }, @@ -2636,7 +2681,7 @@ "exportName": "ChannelDirectoryEntryKind", "kind": "type", "source": { - "line": 509, + "line": 529, "path": "src/channels/plugins/types.core.ts" } }, @@ -2645,7 +2690,7 @@ "exportName": "ChannelElevatedAdapter", "kind": "type", "source": { - "line": 490, + "line": 503, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2654,7 +2699,7 @@ "exportName": "ChannelGatewayAdapter", "kind": "type", "source": { - "line": 380, + "line": 393, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2663,7 +2708,7 @@ "exportName": "ChannelGatewayContext", "kind": "type", "source": { - "line": 272, + "line": 285, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2690,7 +2735,7 @@ "exportName": "ChannelHeartbeatAdapter", "kind": "type", "source": { - "line": 422, + "line": 435, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2717,7 +2762,7 @@ "exportName": "ChannelLifecycleAdapter", "kind": "type", "source": { - "line": 502, + "line": 593, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2726,7 +2771,7 @@ "exportName": "ChannelLoginWithQrStartResult", "kind": "type", "source": { - "line": 351, + "line": 364, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2735,7 +2780,7 @@ "exportName": "ChannelLoginWithQrWaitResult", "kind": "type", "source": { - "line": 356, + "line": 369, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2744,7 +2789,7 @@ "exportName": "ChannelLogoutContext", "kind": "type", "source": { - "line": 361, + "line": 374, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2753,7 +2798,7 @@ "exportName": "ChannelLogoutResult", "kind": "type", "source": { - "line": 345, + "line": 358, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2780,7 +2825,7 @@ "exportName": "ChannelMessageActionAdapter", "kind": "type", "source": { - "line": 560, + "line": 580, "path": "src/channels/plugins/types.core.ts" } }, @@ -2789,7 +2834,7 @@ "exportName": "ChannelMessageActionContext", "kind": "type", "source": { - "line": 524, + "line": 544, "path": "src/channels/plugins/types.core.ts" } }, @@ -2906,7 +2951,7 @@ "exportName": "ChannelPairingAdapter", "kind": "type", "source": { - "line": 369, + "line": 382, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2915,7 +2960,7 @@ "exportName": "ChannelPlugin", "kind": "type", "source": { - "line": 81, + "line": 82, "path": "src/channels/plugins/types.plugin.ts" } }, @@ -2924,7 +2969,7 @@ "exportName": "ChannelPollContext", "kind": "type", "source": { - "line": 591, + "line": 618, "path": "src/channels/plugins/types.core.ts" } }, @@ -2933,7 +2978,7 @@ "exportName": "ChannelPollResult", "kind": "type", "source": { - "line": 582, + "line": 609, "path": "src/channels/plugins/types.core.ts" } }, @@ -2942,7 +2987,7 @@ "exportName": "ChannelResolveKind", "kind": "type", "source": { - "line": 470, + "line": 483, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2951,7 +2996,7 @@ "exportName": "ChannelResolverAdapter", "kind": "type", "source": { - "line": 480, + "line": 493, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2960,7 +3005,7 @@ "exportName": "ChannelResolveResult", "kind": "type", "source": { - "line": 472, + "line": 485, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -2969,7 +3014,7 @@ "exportName": "ChannelSecurityAdapter", "kind": "type", "source": { - "line": 743, + "line": 884, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -3014,7 +3059,7 @@ "exportName": "ChannelStatusAdapter", "kind": "type", "source": { - "line": 218, + "line": 230, "path": "src/channels/plugins/types.adapters.ts" } }, @@ -3077,7 +3122,7 @@ "exportName": "ChannelToolSend", "kind": "type", "source": { - "line": 553, + "line": 573, "path": "src/channels/plugins/types.core.ts" } }, @@ -3140,7 +3185,7 @@ "exportName": "ReplyPrefixContextBundle", "kind": "type", "source": { - "line": 12, + "line": 11, "path": "src/channels/reply-prefix.ts" } }, @@ -3149,7 +3194,7 @@ "exportName": "ReplyPrefixOptions", "kind": "type", "source": { - "line": 20, + "line": 18, "path": "src/channels/reply-prefix.ts" } }, @@ -3232,7 +3277,7 @@ "exportName": "createTopLevelChannelDmPolicy", "kind": "function", "source": { - "line": 411, + "line": 413, "path": "src/channels/plugins/setup-wizard-helpers.ts" } }, @@ -3250,7 +3295,7 @@ "exportName": "setSetupChannelEnabled", "kind": "function", "source": { - "line": 875, + "line": 882, "path": "src/channels/plugins/setup-wizard-helpers.ts" } }, @@ -3304,7 +3349,7 @@ "exportName": "ChannelSetupWizard", "kind": "type", "source": { - "line": 247, + "line": 253, "path": "src/channels/plugins/setup-wizard.ts" } }, @@ -3333,7 +3378,7 @@ "exportName": "buildCommandsMessage", "kind": "function", "source": { - "line": 1076, + "line": 1077, "path": "src/auto-reply/status.ts" } }, @@ -3342,25 +3387,16 @@ "exportName": "buildCommandsMessagePaginated", "kind": "function", "source": { - "line": 1085, + "line": 1086, "path": "src/auto-reply/status.ts" } }, - { - "declaration": "export function buildCommandsPaginationKeyboard(currentPage: number, totalPages: number, agentId?: string | undefined): { text: string; callback_data: string; }[][];", - "exportName": "buildCommandsPaginationKeyboard", - "kind": "function", - "source": { - "line": 175, - "path": "src/auto-reply/reply/commands-info.ts" - } - }, { "declaration": "export function buildCommandText(commandName: string, args?: string | undefined): string;", "exportName": "buildCommandText", "kind": "function", "source": { - "line": 199, + "line": 191, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3369,7 +3405,7 @@ "exportName": "buildCommandTextFromArgs", "kind": "function", "source": { - "line": 291, + "line": 283, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3378,7 +3414,7 @@ "exportName": "buildHelpMessage", "kind": "function", "source": { - "line": 871, + "line": 872, "path": "src/auto-reply/status.ts" } }, @@ -3387,7 +3423,7 @@ "exportName": "buildModelsProviderData", "kind": "function", "source": { - "line": 39, + "line": 33, "path": "src/auto-reply/reply/commands-models.ts" } }, @@ -3405,7 +3441,7 @@ "exportName": "findCommandByNativeName", "kind": "function", "source": { - "line": 187, + "line": 179, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3414,7 +3450,7 @@ "exportName": "formatModelsAvailableHeader", "kind": "function", "source": { - "line": 215, + "line": 209, "path": "src/auto-reply/reply/commands-models.ts" } }, @@ -3423,7 +3459,7 @@ "exportName": "getCommandDetection", "kind": "function", "source": { - "line": 440, + "line": 432, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3450,7 +3486,7 @@ "exportName": "isCommandEnabled", "kind": "function", "source": { - "line": 98, + "line": 99, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3459,7 +3495,7 @@ "exportName": "isCommandMessage", "kind": "function", "source": { - "line": 435, + "line": 427, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3477,7 +3513,7 @@ "exportName": "isNativeCommandSurface", "kind": "function", "source": { - "line": 521, + "line": 513, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3486,7 +3522,7 @@ "exportName": "listChatCommands", "kind": "function", "source": { - "line": 88, + "line": 89, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3495,7 +3531,7 @@ "exportName": "listChatCommandsForConfig", "kind": "function", "source": { - "line": 117, + "line": 118, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3504,7 +3540,7 @@ "exportName": "listNativeCommandSpecs", "kind": "function", "source": { - "line": 170, + "line": 162, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3513,7 +3549,7 @@ "exportName": "listNativeCommandSpecsForConfig", "kind": "function", "source": { - "line": 180, + "line": 172, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3531,12 +3567,12 @@ "exportName": "listSkillCommandsForAgents", "kind": "function", "source": { - "line": 46, + "line": 48, "path": "src/auto-reply/skill-commands.ts" } }, { - "declaration": "export function listSkillCommandsForWorkspace(params: { workspaceDir: string; cfg: OpenClawConfig; skillFilter?: string[] | undefined; }): SkillCommandSpec[];", + "declaration": "export function listSkillCommandsForWorkspace(params: { workspaceDir: string; cfg: OpenClawConfig; agentId?: string | undefined; skillFilter?: string[] | undefined; }): SkillCommandSpec[];", "exportName": "listSkillCommandsForWorkspace", "kind": "function", "source": { @@ -3549,7 +3585,7 @@ "exportName": "maybeResolveTextAlias", "kind": "function", "source": { - "line": 473, + "line": 465, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3558,7 +3594,7 @@ "exportName": "normalizeCommandBody", "kind": "function", "source": { - "line": 384, + "line": 376, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3567,7 +3603,7 @@ "exportName": "parseCommandArgs", "kind": "function", "source": { - "line": 254, + "line": 246, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3576,7 +3612,7 @@ "exportName": "resolveCommandArgChoices", "kind": "function", "source": { - "line": 316, + "line": 308, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3585,7 +3621,7 @@ "exportName": "resolveCommandArgMenu", "kind": "function", "source": { - "line": 346, + "line": 338, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3594,7 +3630,7 @@ "exportName": "resolveCommandAuthorization", "kind": "function", "source": { - "line": 463, + "line": 455, "path": "src/auto-reply/command-auth.ts" } }, @@ -3621,7 +3657,7 @@ "exportName": "resolveDirectDmAuthorizationOutcome", "kind": "function", "source": { - "line": 122, + "line": 121, "path": "src/plugin-sdk/command-auth.ts" } }, @@ -3648,7 +3684,7 @@ "exportName": "resolveModelsCommandReply", "kind": "function", "source": { - "line": 231, + "line": 225, "path": "src/auto-reply/reply/commands-models.ts" } }, @@ -3666,7 +3702,7 @@ "exportName": "resolveSenderCommandAuthorization", "kind": "function", "source": { - "line": 151, + "line": 150, "path": "src/plugin-sdk/command-auth.ts" } }, @@ -3675,7 +3711,7 @@ "exportName": "resolveSenderCommandAuthorizationWithRuntime", "kind": "function", "source": { - "line": 140, + "line": 139, "path": "src/plugin-sdk/command-auth.ts" } }, @@ -3702,7 +3738,7 @@ "exportName": "resolveTextCommand", "kind": "function", "source": { - "line": 494, + "line": 486, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3711,7 +3747,7 @@ "exportName": "serializeCommandArgs", "kind": "function", "source": { - "line": 271, + "line": 263, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3729,7 +3765,7 @@ "exportName": "shouldHandleTextCommands", "kind": "function", "source": { - "line": 528, + "line": 520, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3810,7 +3846,7 @@ "exportName": "CommandAuthorizationRuntime", "kind": "type", "source": { - "line": 106, + "line": 105, "path": "src/plugin-sdk/command-auth.ts" } }, @@ -3873,7 +3909,7 @@ "exportName": "ModelsProviderData", "kind": "type", "source": { - "line": 27, + "line": 21, "path": "src/auto-reply/reply/commands-models.ts" } }, @@ -3891,7 +3927,7 @@ "exportName": "ResolvedCommandArgChoice", "kind": "type", "source": { - "line": 314, + "line": 306, "path": "src/auto-reply/commands-registry.ts" } }, @@ -3918,7 +3954,7 @@ "exportName": "ResolveSenderCommandAuthorizationParams", "kind": "type", "source": { - "line": 89, + "line": 88, "path": "src/plugin-sdk/command-auth.ts" } }, @@ -3927,7 +3963,7 @@ "exportName": "ResolveSenderCommandAuthorizationWithRuntimeParams", "kind": "type", "source": { - "line": 114, + "line": 113, "path": "src/plugin-sdk/command-auth.ts" } }, @@ -4001,7 +4037,7 @@ "exportName": "buildChannelOutboundSessionRoute", "kind": "function", "source": { - "line": 194, + "line": 193, "path": "src/plugin-sdk/core.ts" } }, @@ -4046,7 +4082,7 @@ "exportName": "createChannelPluginBase", "kind": "function", "source": { - "line": 551, + "line": 558, "path": "src/plugin-sdk/core.ts" } }, @@ -4055,7 +4091,7 @@ "exportName": "createChatChannelPlugin", "kind": "function", "source": { - "line": 524, + "line": 531, "path": "src/plugin-sdk/core.ts" } }, @@ -4082,7 +4118,7 @@ "exportName": "defineChannelPluginEntry", "kind": "function", "source": { - "line": 288, + "line": 291, "path": "src/plugin-sdk/core.ts" } }, @@ -4091,7 +4127,7 @@ "exportName": "definePluginEntry", "kind": "function", "source": { - "line": 159, + "line": 157, "path": "src/plugin-sdk/plugin-entry.ts" } }, @@ -4100,7 +4136,7 @@ "exportName": "defineSetupPluginEntry", "kind": "function", "source": { - "line": 331, + "line": 334, "path": "src/plugin-sdk/core.ts" } }, @@ -4325,7 +4361,7 @@ "exportName": "stripChannelTargetPrefix", "kind": "function", "source": { - "line": 174, + "line": 173, "path": "src/plugin-sdk/core.ts" } }, @@ -4334,7 +4370,7 @@ "exportName": "stripTargetKindPrefix", "kind": "function", "source": { - "line": 186, + "line": 185, "path": "src/plugin-sdk/core.ts" } }, @@ -4379,7 +4415,7 @@ "exportName": "ChannelConfigUiHint", "kind": "type", "source": { - "line": 40, + "line": 41, "path": "src/channels/plugins/types.plugin.ts" } }, @@ -4388,7 +4424,7 @@ "exportName": "ChannelMessageActionContext", "kind": "type", "source": { - "line": 524, + "line": 544, "path": "src/channels/plugins/types.core.ts" } }, @@ -4415,7 +4451,7 @@ "exportName": "ChannelOutboundSessionRouteParams", "kind": "type", "source": { - "line": 169, + "line": 168, "path": "src/plugin-sdk/core.ts" } }, @@ -4424,7 +4460,7 @@ "exportName": "ChannelPlugin", "kind": "type", "source": { - "line": 81, + "line": 82, "path": "src/channels/plugins/types.plugin.ts" } }, @@ -4442,7 +4478,7 @@ "exportName": "GatewayRequestHandlerOptions", "kind": "type", "source": { - "line": 115, + "line": 116, "path": "src/gateway/server-methods/types.ts" } }, @@ -4451,7 +4487,7 @@ "exportName": "MediaUnderstandingProviderPlugin", "kind": "type", "source": { - "line": 1531, + "line": 1527, "path": "src/plugins/types.ts" } }, @@ -4469,7 +4505,7 @@ "exportName": "OpenClawPluginApi", "kind": "type", "source": { - "line": 1943, + "line": 1794, "path": "src/plugins/types.ts" } }, @@ -4478,7 +4514,7 @@ "exportName": "OpenClawPluginCommandDefinition", "kind": "type", "source": { - "line": 1654, + "line": 1650, "path": "src/plugins/types.ts" } }, @@ -4487,7 +4523,7 @@ "exportName": "OpenClawPluginConfigSchema", "kind": "type", "source": { - "line": 104, + "line": 100, "path": "src/plugins/types.ts" } }, @@ -4496,7 +4532,7 @@ "exportName": "OpenClawPluginDefinition", "kind": "type", "source": { - "line": 1925, + "line": 1776, "path": "src/plugins/types.ts" } }, @@ -4505,7 +4541,7 @@ "exportName": "OpenClawPluginService", "kind": "type", "source": { - "line": 1892, + "line": 1743, "path": "src/plugins/types.ts" } }, @@ -4514,7 +4550,7 @@ "exportName": "OpenClawPluginServiceContext", "kind": "type", "source": { - "line": 1884, + "line": 1735, "path": "src/plugins/types.ts" } }, @@ -4523,7 +4559,7 @@ "exportName": "OpenClawPluginToolContext", "kind": "type", "source": { - "line": 119, + "line": 115, "path": "src/plugins/types.ts" } }, @@ -4532,7 +4568,7 @@ "exportName": "OpenClawPluginToolFactory", "kind": "type", "source": { - "line": 144, + "line": 140, "path": "src/plugins/types.ts" } }, @@ -4541,16 +4577,7 @@ "exportName": "PluginCommandContext", "kind": "type", "source": { - "line": 1546, - "path": "src/plugins/types.ts" - } - }, - { - "declaration": "export type PluginInteractiveTelegramHandlerContext = PluginInteractiveTelegramHandlerContext;", - "exportName": "PluginInteractiveTelegramHandlerContext", - "kind": "type", - "source": { - "line": 1690, + "line": 1542, "path": "src/plugins/types.ts" } }, @@ -4559,7 +4586,7 @@ "exportName": "PluginLogger", "kind": "type", "source": { - "line": 75, + "line": 71, "path": "src/plugins/types.ts" } }, @@ -4577,7 +4604,7 @@ "exportName": "ProviderAugmentModelCatalogContext", "kind": "type", "source": { - "line": 831, + "line": 827, "path": "src/plugins/types.ts" } }, @@ -4586,7 +4613,7 @@ "exportName": "ProviderAuthContext", "kind": "type", "source": { - "line": 179, + "line": 175, "path": "src/plugins/types.ts" } }, @@ -4595,7 +4622,7 @@ "exportName": "ProviderAuthDoctorHintContext", "kind": "type", "source": { - "line": 518, + "line": 514, "path": "src/plugins/types.ts" } }, @@ -4604,7 +4631,7 @@ "exportName": "ProviderAuthMethod", "kind": "type", "source": { - "line": 258, + "line": 254, "path": "src/plugins/types.ts" } }, @@ -4613,7 +4640,7 @@ "exportName": "ProviderAuthMethodNonInteractiveContext", "kind": "type", "source": { - "line": 242, + "line": 238, "path": "src/plugins/types.ts" } }, @@ -4622,7 +4649,7 @@ "exportName": "ProviderAuthResult", "kind": "type", "source": { - "line": 164, + "line": 160, "path": "src/plugins/types.ts" } }, @@ -4631,7 +4658,7 @@ "exportName": "ProviderBuildMissingAuthMessageContext", "kind": "type", "source": { - "line": 743, + "line": 739, "path": "src/plugins/types.ts" } }, @@ -4640,7 +4667,7 @@ "exportName": "ProviderBuildUnknownModelHintContext", "kind": "type", "source": { - "line": 759, + "line": 755, "path": "src/plugins/types.ts" } }, @@ -4649,7 +4676,7 @@ "exportName": "ProviderBuiltInModelSuppressionContext", "kind": "type", "source": { - "line": 775, + "line": 771, "path": "src/plugins/types.ts" } }, @@ -4658,7 +4685,7 @@ "exportName": "ProviderBuiltInModelSuppressionResult", "kind": "type", "source": { - "line": 784, + "line": 780, "path": "src/plugins/types.ts" } }, @@ -4667,7 +4694,7 @@ "exportName": "ProviderCacheTtlEligibilityContext", "kind": "type", "source": { - "line": 730, + "line": 726, "path": "src/plugins/types.ts" } }, @@ -4676,7 +4703,7 @@ "exportName": "ProviderCatalogContext", "kind": "type", "source": { - "line": 279, + "line": 275, "path": "src/plugins/types.ts" } }, @@ -4685,7 +4712,7 @@ "exportName": "ProviderCatalogResult", "kind": "type", "source": { - "line": 302, + "line": 298, "path": "src/plugins/types.ts" } }, @@ -4694,7 +4721,7 @@ "exportName": "ProviderDefaultThinkingPolicyContext", "kind": "type", "source": { - "line": 808, + "line": 804, "path": "src/plugins/types.ts" } }, @@ -4703,7 +4730,7 @@ "exportName": "ProviderDiscoveryContext", "kind": "type", "source": { - "line": 847, + "line": 843, "path": "src/plugins/types.ts" } }, @@ -4712,7 +4739,7 @@ "exportName": "ProviderFetchUsageSnapshotContext", "kind": "type", "source": { - "line": 499, + "line": 495, "path": "src/plugins/types.ts" } }, @@ -4721,7 +4748,7 @@ "exportName": "ProviderModernModelPolicyContext", "kind": "type", "source": { - "line": 818, + "line": 814, "path": "src/plugins/types.ts" } }, @@ -4730,7 +4757,7 @@ "exportName": "ProviderNormalizeResolvedModelContext", "kind": "type", "source": { - "line": 363, + "line": 359, "path": "src/plugins/types.ts" } }, @@ -4739,7 +4766,7 @@ "exportName": "ProviderNormalizeToolSchemasContext", "kind": "type", "source": { - "line": 640, + "line": 636, "path": "src/plugins/types.ts" } }, @@ -4748,7 +4775,7 @@ "exportName": "ProviderPreparedRuntimeAuth", "kind": "type", "source": { - "line": 445, + "line": 441, "path": "src/plugins/types.ts" } }, @@ -4757,7 +4784,7 @@ "exportName": "ProviderPrepareDynamicModelContext", "kind": "type", "source": { - "line": 354, + "line": 350, "path": "src/plugins/types.ts" } }, @@ -4766,7 +4793,7 @@ "exportName": "ProviderPrepareExtraParamsContext", "kind": "type", "source": { - "line": 532, + "line": 528, "path": "src/plugins/types.ts" } }, @@ -4775,7 +4802,7 @@ "exportName": "ProviderPrepareRuntimeAuthContext", "kind": "type", "source": { - "line": 424, + "line": 420, "path": "src/plugins/types.ts" } }, @@ -4784,7 +4811,7 @@ "exportName": "ProviderReasoningOutputMode", "kind": "type", "source": { - "line": 546, + "line": 542, "path": "src/plugins/types.ts" } }, @@ -4793,7 +4820,7 @@ "exportName": "ProviderReasoningOutputModeContext", "kind": "type", "source": { - "line": 656, + "line": 652, "path": "src/plugins/types.ts" } }, @@ -4802,7 +4829,7 @@ "exportName": "ProviderReplayPolicy", "kind": "type", "source": { - "line": 565, + "line": 561, "path": "src/plugins/types.ts" } }, @@ -4811,7 +4838,7 @@ "exportName": "ProviderReplayPolicyContext", "kind": "type", "source": { - "line": 588, + "line": 584, "path": "src/plugins/types.ts" } }, @@ -4820,7 +4847,7 @@ "exportName": "ProviderReplaySessionEntry", "kind": "type", "source": { - "line": 599, + "line": 595, "path": "src/plugins/types.ts" } }, @@ -4829,7 +4856,7 @@ "exportName": "ProviderReplaySessionState", "kind": "type", "source": { - "line": 604, + "line": 600, "path": "src/plugins/types.ts" } }, @@ -4838,7 +4865,7 @@ "exportName": "ProviderResolvedUsageAuth", "kind": "type", "source": { - "line": 486, + "line": 482, "path": "src/plugins/types.ts" } }, @@ -4847,7 +4874,7 @@ "exportName": "ProviderResolveDynamicModelContext", "kind": "type", "source": { - "line": 337, + "line": 333, "path": "src/plugins/types.ts" } }, @@ -4856,7 +4883,7 @@ "exportName": "ProviderResolveUsageAuthContext", "kind": "type", "source": { - "line": 467, + "line": 463, "path": "src/plugins/types.ts" } }, @@ -4865,7 +4892,7 @@ "exportName": "ProviderRuntimeModel", "kind": "type", "source": { - "line": 320, + "line": 316, "path": "src/plugins/types.ts" } }, @@ -4874,7 +4901,7 @@ "exportName": "ProviderSanitizeReplayHistoryContext", "kind": "type", "source": { - "line": 615, + "line": 611, "path": "src/plugins/types.ts" } }, @@ -4883,7 +4910,7 @@ "exportName": "ProviderThinkingPolicyContext", "kind": "type", "source": { - "line": 796, + "line": 792, "path": "src/plugins/types.ts" } }, @@ -4892,7 +4919,7 @@ "exportName": "ProviderToolSchemaDiagnostic", "kind": "type", "source": { - "line": 644, + "line": 640, "path": "src/plugins/types.ts" } }, @@ -4910,7 +4937,7 @@ "exportName": "ProviderValidateReplayTurnsContext", "kind": "type", "source": { - "line": 628, + "line": 624, "path": "src/plugins/types.ts" } }, @@ -4919,7 +4946,7 @@ "exportName": "ProviderWrapStreamFnContext", "kind": "type", "source": { - "line": 681, + "line": 677, "path": "src/plugins/types.ts" } }, @@ -4964,7 +4991,7 @@ "exportName": "SpeechProviderPlugin", "kind": "type", "source": { - "line": 1506, + "line": 1502, "path": "src/plugins/types.ts" } }, @@ -5029,7 +5056,7 @@ "exportName": "definePluginEntry", "kind": "function", "source": { - "line": 159, + "line": 157, "path": "src/plugin-sdk/plugin-entry.ts" } }, @@ -5056,7 +5083,7 @@ "exportName": "MediaUnderstandingProviderPlugin", "kind": "type", "source": { - "line": 1531, + "line": 1527, "path": "src/plugins/types.ts" } }, @@ -5074,7 +5101,7 @@ "exportName": "OpenClawPluginApi", "kind": "type", "source": { - "line": 1943, + "line": 1794, "path": "src/plugins/types.ts" } }, @@ -5083,7 +5110,7 @@ "exportName": "OpenClawPluginCommandDefinition", "kind": "type", "source": { - "line": 1654, + "line": 1650, "path": "src/plugins/types.ts" } }, @@ -5092,7 +5119,7 @@ "exportName": "OpenClawPluginConfigSchema", "kind": "type", "source": { - "line": 104, + "line": 100, "path": "src/plugins/types.ts" } }, @@ -5101,7 +5128,7 @@ "exportName": "OpenClawPluginDefinition", "kind": "type", "source": { - "line": 1925, + "line": 1776, "path": "src/plugins/types.ts" } }, @@ -5110,7 +5137,7 @@ "exportName": "OpenClawPluginService", "kind": "type", "source": { - "line": 1892, + "line": 1743, "path": "src/plugins/types.ts" } }, @@ -5119,7 +5146,7 @@ "exportName": "OpenClawPluginServiceContext", "kind": "type", "source": { - "line": 1884, + "line": 1735, "path": "src/plugins/types.ts" } }, @@ -5128,7 +5155,7 @@ "exportName": "OpenClawPluginToolContext", "kind": "type", "source": { - "line": 119, + "line": 115, "path": "src/plugins/types.ts" } }, @@ -5137,7 +5164,7 @@ "exportName": "OpenClawPluginToolFactory", "kind": "type", "source": { - "line": 144, + "line": 140, "path": "src/plugins/types.ts" } }, @@ -5146,16 +5173,7 @@ "exportName": "PluginCommandContext", "kind": "type", "source": { - "line": 1546, - "path": "src/plugins/types.ts" - } - }, - { - "declaration": "export type PluginInteractiveTelegramHandlerContext = PluginInteractiveTelegramHandlerContext;", - "exportName": "PluginInteractiveTelegramHandlerContext", - "kind": "type", - "source": { - "line": 1690, + "line": 1542, "path": "src/plugins/types.ts" } }, @@ -5164,7 +5182,7 @@ "exportName": "PluginLogger", "kind": "type", "source": { - "line": 75, + "line": 71, "path": "src/plugins/types.ts" } }, @@ -5173,7 +5191,7 @@ "exportName": "ProviderAugmentModelCatalogContext", "kind": "type", "source": { - "line": 831, + "line": 827, "path": "src/plugins/types.ts" } }, @@ -5182,7 +5200,7 @@ "exportName": "ProviderAuthContext", "kind": "type", "source": { - "line": 179, + "line": 175, "path": "src/plugins/types.ts" } }, @@ -5191,7 +5209,7 @@ "exportName": "ProviderAuthDoctorHintContext", "kind": "type", "source": { - "line": 518, + "line": 514, "path": "src/plugins/types.ts" } }, @@ -5200,7 +5218,7 @@ "exportName": "ProviderAuthMethod", "kind": "type", "source": { - "line": 258, + "line": 254, "path": "src/plugins/types.ts" } }, @@ -5209,7 +5227,7 @@ "exportName": "ProviderAuthMethodNonInteractiveContext", "kind": "type", "source": { - "line": 242, + "line": 238, "path": "src/plugins/types.ts" } }, @@ -5218,7 +5236,7 @@ "exportName": "ProviderAuthResult", "kind": "type", "source": { - "line": 164, + "line": 160, "path": "src/plugins/types.ts" } }, @@ -5227,7 +5245,7 @@ "exportName": "ProviderBuildMissingAuthMessageContext", "kind": "type", "source": { - "line": 743, + "line": 739, "path": "src/plugins/types.ts" } }, @@ -5236,7 +5254,7 @@ "exportName": "ProviderBuildUnknownModelHintContext", "kind": "type", "source": { - "line": 759, + "line": 755, "path": "src/plugins/types.ts" } }, @@ -5245,7 +5263,7 @@ "exportName": "ProviderBuiltInModelSuppressionContext", "kind": "type", "source": { - "line": 775, + "line": 771, "path": "src/plugins/types.ts" } }, @@ -5254,7 +5272,7 @@ "exportName": "ProviderBuiltInModelSuppressionResult", "kind": "type", "source": { - "line": 784, + "line": 780, "path": "src/plugins/types.ts" } }, @@ -5263,7 +5281,7 @@ "exportName": "ProviderCacheTtlEligibilityContext", "kind": "type", "source": { - "line": 730, + "line": 726, "path": "src/plugins/types.ts" } }, @@ -5272,7 +5290,7 @@ "exportName": "ProviderCatalogContext", "kind": "type", "source": { - "line": 279, + "line": 275, "path": "src/plugins/types.ts" } }, @@ -5281,7 +5299,7 @@ "exportName": "ProviderCatalogResult", "kind": "type", "source": { - "line": 302, + "line": 298, "path": "src/plugins/types.ts" } }, @@ -5290,7 +5308,7 @@ "exportName": "ProviderDefaultThinkingPolicyContext", "kind": "type", "source": { - "line": 808, + "line": 804, "path": "src/plugins/types.ts" } }, @@ -5299,7 +5317,7 @@ "exportName": "ProviderDeferSyntheticProfileAuthContext", "kind": "type", "source": { - "line": 945, + "line": 941, "path": "src/plugins/types.ts" } }, @@ -5308,7 +5326,7 @@ "exportName": "ProviderDiscoveryContext", "kind": "type", "source": { - "line": 847, + "line": 843, "path": "src/plugins/types.ts" } }, @@ -5317,7 +5335,7 @@ "exportName": "ProviderFetchUsageSnapshotContext", "kind": "type", "source": { - "line": 499, + "line": 495, "path": "src/plugins/types.ts" } }, @@ -5326,7 +5344,7 @@ "exportName": "ProviderModernModelPolicyContext", "kind": "type", "source": { - "line": 818, + "line": 814, "path": "src/plugins/types.ts" } }, @@ -5335,7 +5353,7 @@ "exportName": "ProviderNormalizeConfigContext", "kind": "type", "source": { - "line": 389, + "line": 385, "path": "src/plugins/types.ts" } }, @@ -5344,7 +5362,7 @@ "exportName": "ProviderNormalizeModelIdContext", "kind": "type", "source": { - "line": 378, + "line": 374, "path": "src/plugins/types.ts" } }, @@ -5353,7 +5371,7 @@ "exportName": "ProviderNormalizeResolvedModelContext", "kind": "type", "source": { - "line": 363, + "line": 359, "path": "src/plugins/types.ts" } }, @@ -5362,7 +5380,7 @@ "exportName": "ProviderNormalizeToolSchemasContext", "kind": "type", "source": { - "line": 640, + "line": 636, "path": "src/plugins/types.ts" } }, @@ -5371,7 +5389,7 @@ "exportName": "ProviderNormalizeTransportContext", "kind": "type", "source": { - "line": 401, + "line": 397, "path": "src/plugins/types.ts" } }, @@ -5380,7 +5398,7 @@ "exportName": "ProviderPreparedRuntimeAuth", "kind": "type", "source": { - "line": 445, + "line": 441, "path": "src/plugins/types.ts" } }, @@ -5389,7 +5407,7 @@ "exportName": "ProviderPrepareDynamicModelContext", "kind": "type", "source": { - "line": 354, + "line": 350, "path": "src/plugins/types.ts" } }, @@ -5398,7 +5416,7 @@ "exportName": "ProviderPrepareExtraParamsContext", "kind": "type", "source": { - "line": 532, + "line": 528, "path": "src/plugins/types.ts" } }, @@ -5407,7 +5425,7 @@ "exportName": "ProviderPrepareRuntimeAuthContext", "kind": "type", "source": { - "line": 424, + "line": 420, "path": "src/plugins/types.ts" } }, @@ -5416,7 +5434,7 @@ "exportName": "ProviderReasoningOutputMode", "kind": "type", "source": { - "line": 546, + "line": 542, "path": "src/plugins/types.ts" } }, @@ -5425,7 +5443,7 @@ "exportName": "ProviderReasoningOutputModeContext", "kind": "type", "source": { - "line": 656, + "line": 652, "path": "src/plugins/types.ts" } }, @@ -5434,7 +5452,7 @@ "exportName": "ProviderReplayPolicy", "kind": "type", "source": { - "line": 565, + "line": 561, "path": "src/plugins/types.ts" } }, @@ -5443,7 +5461,7 @@ "exportName": "ProviderReplayPolicyContext", "kind": "type", "source": { - "line": 588, + "line": 584, "path": "src/plugins/types.ts" } }, @@ -5452,7 +5470,7 @@ "exportName": "ProviderReplaySessionEntry", "kind": "type", "source": { - "line": 599, + "line": 595, "path": "src/plugins/types.ts" } }, @@ -5461,7 +5479,7 @@ "exportName": "ProviderReplaySessionState", "kind": "type", "source": { - "line": 604, + "line": 600, "path": "src/plugins/types.ts" } }, @@ -5470,7 +5488,7 @@ "exportName": "ProviderResolveConfigApiKeyContext", "kind": "type", "source": { - "line": 413, + "line": 409, "path": "src/plugins/types.ts" } }, @@ -5479,7 +5497,7 @@ "exportName": "ProviderResolvedUsageAuth", "kind": "type", "source": { - "line": 486, + "line": 482, "path": "src/plugins/types.ts" } }, @@ -5488,7 +5506,7 @@ "exportName": "ProviderResolveDynamicModelContext", "kind": "type", "source": { - "line": 337, + "line": 333, "path": "src/plugins/types.ts" } }, @@ -5497,7 +5515,7 @@ "exportName": "ProviderResolveUsageAuthContext", "kind": "type", "source": { - "line": 467, + "line": 463, "path": "src/plugins/types.ts" } }, @@ -5506,7 +5524,7 @@ "exportName": "ProviderRuntimeModel", "kind": "type", "source": { - "line": 320, + "line": 316, "path": "src/plugins/types.ts" } }, @@ -5515,7 +5533,7 @@ "exportName": "ProviderSanitizeReplayHistoryContext", "kind": "type", "source": { - "line": 615, + "line": 611, "path": "src/plugins/types.ts" } }, @@ -5524,7 +5542,7 @@ "exportName": "ProviderThinkingPolicyContext", "kind": "type", "source": { - "line": 796, + "line": 792, "path": "src/plugins/types.ts" } }, @@ -5533,7 +5551,7 @@ "exportName": "ProviderToolSchemaDiagnostic", "kind": "type", "source": { - "line": 644, + "line": 640, "path": "src/plugins/types.ts" } }, @@ -5542,7 +5560,7 @@ "exportName": "ProviderValidateReplayTurnsContext", "kind": "type", "source": { - "line": 628, + "line": 624, "path": "src/plugins/types.ts" } }, @@ -5551,7 +5569,7 @@ "exportName": "ProviderWrapStreamFnContext", "kind": "type", "source": { - "line": 681, + "line": 677, "path": "src/plugins/types.ts" } }, @@ -5560,7 +5578,7 @@ "exportName": "SpeechProviderPlugin", "kind": "type", "source": { - "line": 1506, + "line": 1502, "path": "src/plugins/types.ts" } } @@ -6614,7 +6632,7 @@ "exportName": "ChannelGatewayContext", "kind": "type", "source": { - "line": 272, + "line": 285, "path": "src/channels/plugins/types.adapters.ts" } }, diff --git a/docs/.generated/plugin-sdk-api-baseline.jsonl b/docs/.generated/plugin-sdk-api-baseline.jsonl index c6ed701bd33..57dc21cd9bc 100644 --- a/docs/.generated/plugin-sdk-api-baseline.jsonl +++ b/docs/.generated/plugin-sdk-api-baseline.jsonl @@ -10,25 +10,25 @@ {"declaration":"export type ChannelAgentTool = ChannelAgentTool;","entrypoint":"index","exportName":"ChannelAgentTool","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":19,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelAgentToolFactory = ChannelAgentToolFactory;","entrypoint":"index","exportName":"ChannelAgentToolFactory","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":24,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelCapabilities = ChannelCapabilities;","entrypoint":"index","exportName":"ChannelCapabilities","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":233,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelConfigSchema = ChannelConfigSchema;","entrypoint":"index","exportName":"ChannelConfigSchema","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":71,"sourcePath":"src/channels/plugins/types.plugin.ts"} -{"declaration":"export type ChannelConfigUiHint = ChannelConfigUiHint;","entrypoint":"index","exportName":"ChannelConfigUiHint","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":40,"sourcePath":"src/channels/plugins/types.plugin.ts"} -{"declaration":"export type ChannelConfiguredBindingConversationRef = ChannelConfiguredBindingConversationRef;","entrypoint":"index","exportName":"ChannelConfiguredBindingConversationRef","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":675,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelConfiguredBindingMatch = ChannelConfiguredBindingMatch;","entrypoint":"index","exportName":"ChannelConfiguredBindingMatch","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":680,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelConfiguredBindingProvider = ChannelConfiguredBindingProvider;","entrypoint":"index","exportName":"ChannelConfiguredBindingProvider","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":696,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelGatewayContext = ChannelGatewayContext;","entrypoint":"index","exportName":"ChannelGatewayContext","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":272,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelConfigSchema = ChannelConfigSchema;","entrypoint":"index","exportName":"ChannelConfigSchema","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":72,"sourcePath":"src/channels/plugins/types.plugin.ts"} +{"declaration":"export type ChannelConfigUiHint = ChannelConfigUiHint;","entrypoint":"index","exportName":"ChannelConfigUiHint","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":41,"sourcePath":"src/channels/plugins/types.plugin.ts"} +{"declaration":"export type ChannelConfiguredBindingConversationRef = ChannelConfiguredBindingConversationRef;","entrypoint":"index","exportName":"ChannelConfiguredBindingConversationRef","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":776,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelConfiguredBindingMatch = ChannelConfiguredBindingMatch;","entrypoint":"index","exportName":"ChannelConfiguredBindingMatch","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":781,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelConfiguredBindingProvider = ChannelConfiguredBindingProvider;","entrypoint":"index","exportName":"ChannelConfiguredBindingProvider","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":797,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelGatewayContext = ChannelGatewayContext;","entrypoint":"index","exportName":"ChannelGatewayContext","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":285,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelId = ChannelId;","entrypoint":"index","exportName":"ChannelId","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":14,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelMessageActionAdapter = ChannelMessageActionAdapter;","entrypoint":"index","exportName":"ChannelMessageActionAdapter","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":560,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"index","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":524,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelMessageActionAdapter = ChannelMessageActionAdapter;","entrypoint":"index","exportName":"ChannelMessageActionAdapter","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":580,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"index","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":544,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelMessageActionName = \"send\" | \"broadcast\" | \"poll\" | \"poll-vote\" | \"react\" | \"reactions\" | \"read\" | \"edit\" | \"unsend\" | \"reply\" | \"sendWithEffect\" | \"renameGroup\" | \"setGroupIcon\" | \"addParticipant\" | \"removeParticipant\" | \"leaveGroup\" | \"sendAttachment\" | \"delete\" | \"pin\" | \"unpin\" | \"list-pins\" | \"permissions\" | \"thread-create\" | \"thread-list\" | \"thread-reply\" | \"search\" | \"sticker\" | \"sticker-search\" | \"member-info\" | \"role-info\" | \"emoji-list\" | \"emoji-upload\" | \"sticker-upload\" | \"role-add\" | \"role-remove\" | \"channel-info\" | \"channel-list\" | \"channel-create\" | \"channel-edit\" | \"channel-delete\" | \"channel-move\" | \"category-create\" | \"category-edit\" | \"category-delete\" | \"topic-create\" | \"topic-edit\" | \"voice-status\" | \"event-list\" | \"event-create\" | \"timeout\" | \"kick\" | \"ban\" | \"set-profile\" | \"set-presence\" | \"download-file\" | \"upload-file\";","entrypoint":"index","exportName":"ChannelMessageActionName","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":6,"sourcePath":"src/channels/plugins/types.ts"} -{"declaration":"export type ChannelPlugin = ChannelPlugin;","entrypoint":"index","exportName":"ChannelPlugin","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":81,"sourcePath":"src/channels/plugins/types.plugin.ts"} +{"declaration":"export type ChannelPlugin = ChannelPlugin;","entrypoint":"index","exportName":"ChannelPlugin","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":82,"sourcePath":"src/channels/plugins/types.plugin.ts"} {"declaration":"export type ChannelSetupAdapter = ChannelSetupAdapter;","entrypoint":"index","exportName":"ChannelSetupAdapter","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":63,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelSetupInput = ChannelSetupInput;","entrypoint":"index","exportName":"ChannelSetupInput","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":64,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelSetupWizard = ChannelSetupWizard;","entrypoint":"index","exportName":"ChannelSetupWizard","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":247,"sourcePath":"src/channels/plugins/setup-wizard.ts"} -{"declaration":"export type ChannelSetupWizardAllowFromEntry = ChannelSetupWizardAllowFromEntry;","entrypoint":"index","exportName":"ChannelSetupWizardAllowFromEntry","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":154,"sourcePath":"src/channels/plugins/setup-wizard.ts"} +{"declaration":"export type ChannelSetupWizard = ChannelSetupWizard;","entrypoint":"index","exportName":"ChannelSetupWizard","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":253,"sourcePath":"src/channels/plugins/setup-wizard.ts"} +{"declaration":"export type ChannelSetupWizardAllowFromEntry = ChannelSetupWizardAllowFromEntry;","entrypoint":"index","exportName":"ChannelSetupWizardAllowFromEntry","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":160,"sourcePath":"src/channels/plugins/setup-wizard.ts"} {"declaration":"export type ChannelStatusIssue = ChannelStatusIssue;","entrypoint":"index","exportName":"ChannelStatusIssue","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":102,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type OpenClawConfig = OpenClawConfig;","entrypoint":"index","exportName":"ClawdbotConfig","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":32,"sourcePath":"src/config/types.openclaw.ts"} {"declaration":"export type CliBackendConfig = CliBackendConfig;","entrypoint":"index","exportName":"CliBackendConfig","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":47,"sourcePath":"src/config/types.agent-defaults.ts"} -{"declaration":"export type CliBackendPlugin = CliBackendPlugin;","entrypoint":"index","exportName":"CliBackendPlugin","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":1899,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type CliBackendPlugin = CliBackendPlugin;","entrypoint":"index","exportName":"CliBackendPlugin","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":1750,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type CompiledConfiguredBinding = CompiledConfiguredBinding;","entrypoint":"index","exportName":"CompiledConfiguredBinding","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":38,"sourcePath":"src/channels/plugins/binding-types.ts"} {"declaration":"export type ConfiguredBindingConversation = ConversationRef;","entrypoint":"index","exportName":"ConfiguredBindingConversation","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":13,"sourcePath":"src/channels/plugins/binding-types.ts"} {"declaration":"export type ConfiguredBindingResolution = ConfiguredBindingResolution;","entrypoint":"index","exportName":"ConfiguredBindingResolution","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":49,"sourcePath":"src/channels/plugins/binding-types.ts"} @@ -44,24 +44,24 @@ {"declaration":"export type ImageGenerationResolution = ImageGenerationResolution;","entrypoint":"index","exportName":"ImageGenerationResolution","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":12,"sourcePath":"src/image-generation/types.ts"} {"declaration":"export type ImageGenerationResult = ImageGenerationResult;","entrypoint":"index","exportName":"ImageGenerationResult","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":36,"sourcePath":"src/image-generation/types.ts"} {"declaration":"export type ImageGenerationSourceImage = ImageGenerationSourceImage;","entrypoint":"index","exportName":"ImageGenerationSourceImage","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":14,"sourcePath":"src/image-generation/types.ts"} -{"declaration":"export type MediaUnderstandingProviderPlugin = MediaUnderstandingProvider;","entrypoint":"index","exportName":"MediaUnderstandingProviderPlugin","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":1531,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type MediaUnderstandingProviderPlugin = MediaUnderstandingProvider;","entrypoint":"index","exportName":"MediaUnderstandingProviderPlugin","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":1527,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type OpenClawConfig = OpenClawConfig;","entrypoint":"index","exportName":"OpenClawConfig","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":32,"sourcePath":"src/config/types.openclaw.ts"} -{"declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"index","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":1943,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"index","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":104,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type PluginLogger = PluginLogger;","entrypoint":"index","exportName":"PluginLogger","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":75,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"index","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":1794,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"index","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":100,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type PluginLogger = PluginLogger;","entrypoint":"index","exportName":"PluginLogger","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":71,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"index","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":54,"sourcePath":"src/plugins/runtime/types.ts"} {"declaration":"export type PluginRuntimeTaskFlows = PluginRuntimeTaskFlows;","entrypoint":"index","exportName":"PluginRuntimeTaskFlows","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":84,"sourcePath":"src/plugins/runtime/runtime-tasks.ts"} {"declaration":"export type PluginRuntimeTaskRuns = PluginRuntimeTaskRuns;","entrypoint":"index","exportName":"PluginRuntimeTaskRuns","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":64,"sourcePath":"src/plugins/runtime/runtime-tasks.ts"} {"declaration":"export type PluginRuntimeTasks = PluginRuntimeTasks;","entrypoint":"index","exportName":"PluginRuntimeTasks","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":94,"sourcePath":"src/plugins/runtime/runtime-tasks.ts"} -{"declaration":"export type ProviderAuthContext = ProviderAuthContext;","entrypoint":"index","exportName":"ProviderAuthContext","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":179,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthResult = ProviderAuthResult;","entrypoint":"index","exportName":"ProviderAuthResult","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":164,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderRuntimeModel = ProviderRuntimeModel;","entrypoint":"index","exportName":"ProviderRuntimeModel","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":320,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthContext = ProviderAuthContext;","entrypoint":"index","exportName":"ProviderAuthContext","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":175,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthResult = ProviderAuthResult;","entrypoint":"index","exportName":"ProviderAuthResult","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":160,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderRuntimeModel = ProviderRuntimeModel;","entrypoint":"index","exportName":"ProviderRuntimeModel","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":316,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type ReplyPayload = ReplyPayload;","entrypoint":"index","exportName":"ReplyPayload","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":85,"sourcePath":"src/auto-reply/types.ts"} {"declaration":"export type RuntimeEnv = RuntimeEnv;","entrypoint":"index","exportName":"RuntimeEnv","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":4,"sourcePath":"src/runtime.ts"} {"declaration":"export type RuntimeLogger = RuntimeLogger;","entrypoint":"index","exportName":"RuntimeLogger","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":7,"sourcePath":"src/plugins/runtime/types-core.ts"} {"declaration":"export type SecretInput = SecretInput;","entrypoint":"index","exportName":"SecretInput","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":16,"sourcePath":"src/config/types.secrets.ts"} {"declaration":"export type SecretRef = SecretRef;","entrypoint":"index","exportName":"SecretRef","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":10,"sourcePath":"src/config/types.secrets.ts"} -{"declaration":"export type SpeechProviderPlugin = SpeechProviderPlugin;","entrypoint":"index","exportName":"SpeechProviderPlugin","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":1506,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type SpeechProviderPlugin = SpeechProviderPlugin;","entrypoint":"index","exportName":"SpeechProviderPlugin","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":1502,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type StatefulBindingTargetDescriptor = StatefulBindingTargetDescriptor;","entrypoint":"index","exportName":"StatefulBindingTargetDescriptor","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":17,"sourcePath":"src/channels/plugins/binding-types.ts"} {"declaration":"export type StatefulBindingTargetDriver = StatefulBindingTargetDriver;","entrypoint":"index","exportName":"StatefulBindingTargetDriver","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":15,"sourcePath":"src/channels/plugins/stateful-target-drivers.ts"} {"declaration":"export type StatefulBindingTargetReadyResult = StatefulBindingTargetReadyResult;","entrypoint":"index","exportName":"StatefulBindingTargetReadyResult","importSpecifier":"openclaw/plugin-sdk","kind":"type","recordType":"export","sourceLine":7,"sourcePath":"src/channels/plugins/stateful-target-drivers.ts"} @@ -125,7 +125,7 @@ {"declaration":"export function createChannelNativeApprovalRuntime(adapter: ChannelNativeApprovalRuntimeAdapter): ExecApprovalChannelRuntime<...>;","entrypoint":"approval-runtime","exportName":"createChannelNativeApprovalRuntime","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":239,"sourcePath":"src/infra/approval-native-runtime.ts"} {"declaration":"export function createChannelNativeOriginTargetResolver(params: { channel: string; shouldHandleRequest?: ((params: ApprovalResolverParams) => boolean) | undefined; resolveTurnSourceTarget: (request: ApprovalRequest) => TTarget | null; resolveSessionTarget: (sessionTarget: ExecApprovalSessionTarget, request: ApprovalRequest) => TTarget | null; targetsMatch: (a: TTarget, b: TTarget) => boolean; resolveFallbackTarget?: ((request: ApprovalRequest) => TTarget | null) | undefined; }): (input: ApprovalResolverParams) => TTarget | null;","entrypoint":"approval-runtime","exportName":"createChannelNativeOriginTargetResolver","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":22,"sourcePath":"src/plugin-sdk/approval-native-helpers.ts"} {"declaration":"export function createResolvedApproverActionAuthAdapter(params: { channelLabel: string; resolveApprovers: (params: { cfg: OpenClawConfig; accountId?: string | null | undefined; }) => string[]; normalizeSenderId?: ((value: string) => string | undefined) | undefined; }): { ...; };","entrypoint":"approval-runtime","exportName":"createResolvedApproverActionAuthAdapter","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":10,"sourcePath":"src/plugin-sdk/approval-auth-helpers.ts"} -{"declaration":"export function doesApprovalRequestMatchChannelAccount(params: { cfg: OpenClawConfig; request: ApprovalRequestLike; channel: string; accountId?: string | null | undefined; }): boolean;","entrypoint":"approval-runtime","exportName":"doesApprovalRequestMatchChannelAccount","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":236,"sourcePath":"src/infra/exec-approval-session-target.ts"} +{"declaration":"export function doesApprovalRequestMatchChannelAccount(params: { cfg: OpenClawConfig; request: ApprovalRequestLike; channel: string; accountId?: string | null | undefined; }): boolean;","entrypoint":"approval-runtime","exportName":"doesApprovalRequestMatchChannelAccount","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":240,"sourcePath":"src/infra/exec-approval-session-target.ts"} {"declaration":"export function getExecApprovalApproverDmNoticeText(): string;","entrypoint":"approval-runtime","exportName":"getExecApprovalApproverDmNoticeText","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":163,"sourcePath":"src/infra/exec-approval-reply.ts"} {"declaration":"export function getExecApprovalReplyMetadata(payload: ReplyPayload): ExecApprovalReplyMetadata | null;","entrypoint":"approval-runtime","exportName":"getExecApprovalReplyMetadata","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":216,"sourcePath":"src/infra/exec-approval-reply.ts"} {"declaration":"export function isChannelExecApprovalClientEnabledFromConfig(params: { enabled?: ChannelExecApprovalEnableMode | undefined; approverCount: number; }): boolean;","entrypoint":"approval-runtime","exportName":"isChannelExecApprovalClientEnabledFromConfig","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":39,"sourcePath":"src/plugin-sdk/approval-client-helpers.ts"} @@ -133,9 +133,9 @@ {"declaration":"export function matchesApprovalRequestFilters(params: { request: ApprovalRequestFilterInput; agentFilter?: string[] | undefined; sessionFilter?: string[] | undefined; fallbackAgentIdFromSessionKey?: boolean | undefined; }): boolean;","entrypoint":"approval-runtime","exportName":"matchesApprovalRequestFilters","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":22,"sourcePath":"src/infra/approval-request-filters.ts"} {"declaration":"export function matchesApprovalRequestSessionFilter(sessionKey: string, patterns: string[]): boolean;","entrypoint":"approval-runtime","exportName":"matchesApprovalRequestSessionFilter","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":9,"sourcePath":"src/infra/approval-request-filters.ts"} {"declaration":"export function resolveApprovalApprovers(params: { explicit?: readonly ApproverInput[] | null | undefined; allowFrom?: readonly ApproverInput[] | null | undefined; extraAllowFrom?: readonly ApproverInput[] | null | undefined; defaultTo?: string | ... 1 more ... | undefined; normalizeApprover: (value: ApproverInput) => string | undefined; normalizeDefaultTo?: ((value: string) => string | undefined) | undefined; }): string[];","entrypoint":"approval-runtime","exportName":"resolveApprovalApprovers","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":14,"sourcePath":"src/plugin-sdk/approval-approvers.ts"} -{"declaration":"export function resolveApprovalRequestAccountId(params: { cfg: OpenClawConfig; request: ApprovalRequestLike; channel?: string | null | undefined; }): string | null;","entrypoint":"approval-runtime","exportName":"resolveApprovalRequestAccountId","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":182,"sourcePath":"src/infra/exec-approval-session-target.ts"} -{"declaration":"export function resolveApprovalRequestChannelAccountId(params: { cfg: OpenClawConfig; request: ApprovalRequestLike; channel: string; }): string | null;","entrypoint":"approval-runtime","exportName":"resolveApprovalRequestChannelAccountId","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":209,"sourcePath":"src/infra/exec-approval-session-target.ts"} -{"declaration":"export function resolveApprovalRequestOriginTarget(params: ApprovalRequestOriginTargetResolver): TTarget | null;","entrypoint":"approval-runtime","exportName":"resolveApprovalRequestOriginTarget","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":270,"sourcePath":"src/infra/exec-approval-session-target.ts"} +{"declaration":"export function resolveApprovalRequestAccountId(params: { cfg: OpenClawConfig; request: ApprovalRequestLike; channel?: string | null | undefined; }): string | null;","entrypoint":"approval-runtime","exportName":"resolveApprovalRequestAccountId","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":183,"sourcePath":"src/infra/exec-approval-session-target.ts"} +{"declaration":"export function resolveApprovalRequestChannelAccountId(params: { cfg: OpenClawConfig; request: ApprovalRequestLike; channel: string; }): string | null;","entrypoint":"approval-runtime","exportName":"resolveApprovalRequestChannelAccountId","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":213,"sourcePath":"src/infra/exec-approval-session-target.ts"} +{"declaration":"export function resolveApprovalRequestOriginTarget(params: ApprovalRequestOriginTargetResolver): TTarget | null;","entrypoint":"approval-runtime","exportName":"resolveApprovalRequestOriginTarget","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":277,"sourcePath":"src/infra/exec-approval-session-target.ts"} {"declaration":"export function resolveApprovalRequestSessionTarget(params: { cfg: OpenClawConfig; request: ApprovalRequestLike; }): ExecApprovalSessionTarget | null;","entrypoint":"approval-runtime","exportName":"resolveApprovalRequestSessionTarget","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":140,"sourcePath":"src/infra/exec-approval-session-target.ts"} {"declaration":"export function resolveExecApprovalAllowedDecisions(params?: { ask?: string | null | undefined; } | undefined): readonly ExecApprovalDecision[];","entrypoint":"approval-runtime","exportName":"resolveExecApprovalAllowedDecisions","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":928,"sourcePath":"src/infra/exec-approvals.ts"} {"declaration":"export function resolveExecApprovalCommandDisplay(request: ExecApprovalRequestPayload): { commandText: string; commandPreview: string | null; };","entrypoint":"approval-runtime","exportName":"resolveExecApprovalCommandDisplay","importSpecifier":"openclaw/plugin-sdk/approval-runtime","kind":"function","recordType":"export","sourceLine":26,"sourcePath":"src/infra/exec-approval-command-display.ts"} @@ -187,38 +187,43 @@ {"declaration":"export const AllowFromListSchema: z.ZodOptional>>;","entrypoint":"channel-config-schema","exportName":"AllowFromListSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":19,"sourcePath":"src/channels/plugins/config-schema.ts"} {"declaration":"export const BlockStreamingCoalesceSchema: z.ZodObject<{ minChars: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"BlockStreamingCoalesceSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":408,"sourcePath":"src/config/zod-schema.core.ts"} {"declaration":"export const ContextVisibilityModeSchema: z.ZodEnum<{ allowlist: \"allowlist\"; all: \"all\"; allowlist_quote: \"allowlist_quote\"; }>;","entrypoint":"channel-config-schema","exportName":"ContextVisibilityModeSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":406,"sourcePath":"src/config/zod-schema.core.ts"} -{"declaration":"export const DiscordConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; proxy: z.ZodOptional; allowBots: z.ZodOptional]>>; dangerouslyAllowNameMatching: z.ZodOptional; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional]>>; streamMode: z.ZodOptional>; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; maxLinesPerMessage: z.ZodOptional; mediaMaxMb: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; stickers: z.ZodOptional; emojiUploads: z.ZodOptional; stickerUploads: z.ZodOptional; polls: z.ZodOptional; permissions: z.ZodOptional; messages: z.ZodOptional; threads: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; memberInfo: z.ZodOptional; roleInfo: z.ZodOptional; roles: z.ZodOptional; channelInfo: z.ZodOptional; voiceStatus: z.ZodOptional; events: z.ZodOptional; moderation: z.ZodOptional; channels: z.ZodOptional; presence: z.ZodOptional; }, z.core.$strict>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; }, z.core.$strict>>; guilds: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; reactionNotifications: z.ZodOptional>; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; channels: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; systemPrompt: z.ZodOptional; includeThreadStarter: z.ZodOptional; autoThread: z.ZodOptional; autoThreadName: z.ZodOptional>; autoArchiveDuration: z.ZodOptional, z.ZodLiteral<60>, z.ZodLiteral<1440>, z.ZodLiteral<4320>, z.ZodLiteral<10080>]>>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; cleanupAfterResolve: z.ZodOptional; target: z.ZodOptional>; }, z.core.$strict>>; agentComponents: z.ZodOptional; }, z.core.$strict>>; ui: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>; slashCommand: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; intents: z.ZodOptional; guildMembers: z.ZodOptional; }, z.core.$strict>>; voice: z.ZodOptional; autoJoin: z.ZodOptional>>; daveEncryption: z.ZodOptional; decryptionFailureTolerance: z.ZodOptional; tts: z.ZodOptional>; enabled: z.ZodOptional; mode: z.ZodOptional>; provider: z.ZodOptional; summaryModel: z.ZodOptional; modelOverrides: z.ZodOptional; allowText: z.ZodOptional; allowProvider: z.ZodOptional; allowVoice: z.ZodOptional; allowModelId: z.ZodOptional; allowVoiceSettings: z.ZodOptional; allowNormalization: z.ZodOptional; allowSeed: z.ZodOptional; }, z.core.$strict>>; providers: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$catchall, z.ZodRecord]>>>>>; prefsPath: z.ZodOptional; maxTextLength: z.ZodOptional; timeoutMs: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>>; pluralkit: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; ackReactionScope: z.ZodOptional>; activity: z.ZodOptional; status: z.ZodOptional>; autoPresence: z.ZodOptional; intervalMs: z.ZodOptional; minUpdateIntervalMs: z.ZodOptional; healthyText: z.ZodOptional; degradedText: z.ZodOptional; exhaustedText: z.ZodOptional; }, z.core.$strict>>; activityType: z.ZodOptional, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>]>>; activityUrl: z.ZodOptional; inboundWorker: z.ZodOptional; }, z.core.$strict>>; eventQueue: z.ZodOptional; maxQueueSize: z.ZodOptional; maxConcurrency: z.ZodOptional; }, z.core.$strict>>; accounts: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; proxy: z.ZodOptional; allowBots: z.ZodOptional]>>; dangerouslyAllowNameMatching: z.ZodOptional; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional]>>; streamMode: z.ZodOptional>; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; maxLinesPerMessage: z.ZodOptional; mediaMaxMb: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; stickers: z.ZodOptional; emojiUploads: z.ZodOptional; stickerUploads: z.ZodOptional; polls: z.ZodOptional; permissions: z.ZodOptional; messages: z.ZodOptional; threads: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; memberInfo: z.ZodOptional; roleInfo: z.ZodOptional; roles: z.ZodOptional; channelInfo: z.ZodOptional; voiceStatus: z.ZodOptional; events: z.ZodOptional; moderation: z.ZodOptional; channels: z.ZodOptional; presence: z.ZodOptional; }, z.core.$strict>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; }, z.core.$strict>>; guilds: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; reactionNotifications: z.ZodOptional>; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; channels: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; systemPrompt: z.ZodOptional; includeThreadStarter: z.ZodOptional; autoThread: z.ZodOptional; autoThreadName: z.ZodOptional>; autoArchiveDuration: z.ZodOptional, z.ZodLiteral<60>, z.ZodLiteral<1440>, z.ZodLiteral<4320>, z.ZodLiteral<10080>]>>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; cleanupAfterResolve: z.ZodOptional; target: z.ZodOptional>; }, z.core.$strict>>; agentComponents: z.ZodOptional; }, z.core.$strict>>; ui: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>; slashCommand: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; intents: z.ZodOptional; guildMembers: z.ZodOptional; }, z.core.$strict>>; voice: z.ZodOptional; autoJoin: z.ZodOptional>>; daveEncryption: z.ZodOptional; decryptionFailureTolerance: z.ZodOptional; tts: z.ZodOptional>; enabled: z.ZodOptional; mode: z.ZodOptional>; provider: z.ZodOptional; summaryModel: z.ZodOptional; modelOverrides: z.ZodOptional; allowText: z.ZodOptional; allowProvider: z.ZodOptional; allowVoice: z.ZodOptional; allowModelId: z.ZodOptional; allowVoiceSettings: z.ZodOptional; allowNormalization: z.ZodOptional; allowSeed: z.ZodOptional; }, z.core.$strict>>; providers: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$catchall, z.ZodRecord]>>>>>; prefsPath: z.ZodOptional; maxTextLength: z.ZodOptional; timeoutMs: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>>; pluralkit: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; ackReactionScope: z.ZodOptional>; activity: z.ZodOptional; status: z.ZodOptional>; autoPresence: z.ZodOptional; intervalMs: z.ZodOptional; minUpdateIntervalMs: z.ZodOptional; healthyText: z.ZodOptional; degradedText: z.ZodOptional; exhaustedText: z.ZodOptional; }, z.core.$strict>>; activityType: z.ZodOptional, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>]>>; activityUrl: z.ZodOptional; inboundWorker: z.ZodOptional; }, z.core.$strict>>; eventQueue: z.ZodOptional; maxQueueSize: z.ZodOptional; maxConcurrency: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"DiscordConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":710,"sourcePath":"src/config/zod-schema.providers-core.ts"} +{"declaration":"export const DiscordConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; proxy: z.ZodOptional; allowBots: z.ZodOptional]>>; dangerouslyAllowNameMatching: z.ZodOptional; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional>; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; maxLinesPerMessage: z.ZodOptional; mediaMaxMb: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; stickers: z.ZodOptional; emojiUploads: z.ZodOptional; stickerUploads: z.ZodOptional; polls: z.ZodOptional; permissions: z.ZodOptional; messages: z.ZodOptional; threads: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; memberInfo: z.ZodOptional; roleInfo: z.ZodOptional; roles: z.ZodOptional; channelInfo: z.ZodOptional; voiceStatus: z.ZodOptional; events: z.ZodOptional; moderation: z.ZodOptional; channels: z.ZodOptional; presence: z.ZodOptional; }, z.core.$strict>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; }, z.core.$strict>>; guilds: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; reactionNotifications: z.ZodOptional>; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; channels: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; systemPrompt: z.ZodOptional; includeThreadStarter: z.ZodOptional; autoThread: z.ZodOptional; autoThreadName: z.ZodOptional>; autoArchiveDuration: z.ZodOptional, z.ZodLiteral<60>, z.ZodLiteral<1440>, z.ZodLiteral<4320>, z.ZodLiteral<10080>]>>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; cleanupAfterResolve: z.ZodOptional; target: z.ZodOptional>; }, z.core.$strict>>; agentComponents: z.ZodOptional; }, z.core.$strict>>; ui: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>; slashCommand: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; intents: z.ZodOptional; guildMembers: z.ZodOptional; }, z.core.$strict>>; voice: z.ZodOptional; autoJoin: z.ZodOptional>>; daveEncryption: z.ZodOptional; decryptionFailureTolerance: z.ZodOptional; tts: z.ZodOptional>; enabled: z.ZodOptional; mode: z.ZodOptional>; provider: z.ZodOptional; summaryModel: z.ZodOptional; modelOverrides: z.ZodOptional; allowText: z.ZodOptional; allowProvider: z.ZodOptional; allowVoice: z.ZodOptional; allowModelId: z.ZodOptional; allowVoiceSettings: z.ZodOptional; allowNormalization: z.ZodOptional; allowSeed: z.ZodOptional; }, z.core.$strict>>; providers: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$catchall, z.ZodRecord]>>>>>; prefsPath: z.ZodOptional; maxTextLength: z.ZodOptional; timeoutMs: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>>; pluralkit: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; ackReactionScope: z.ZodOptional>; activity: z.ZodOptional; status: z.ZodOptional>; autoPresence: z.ZodOptional; intervalMs: z.ZodOptional; minUpdateIntervalMs: z.ZodOptional; healthyText: z.ZodOptional; degradedText: z.ZodOptional; exhaustedText: z.ZodOptional; }, z.core.$strict>>; activityType: z.ZodOptional, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>]>>; activityUrl: z.ZodOptional; inboundWorker: z.ZodOptional; }, z.core.$strict>>; eventQueue: z.ZodOptional; maxQueueSize: z.ZodOptional; maxConcurrency: z.ZodOptional; }, z.core.$strict>>; accounts: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; proxy: z.ZodOptional; allowBots: z.ZodOptional]>>; dangerouslyAllowNameMatching: z.ZodOptional; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional>; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; maxLinesPerMessage: z.ZodOptional; mediaMaxMb: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; stickers: z.ZodOptional; emojiUploads: z.ZodOptional; stickerUploads: z.ZodOptional; polls: z.ZodOptional; permissions: z.ZodOptional; messages: z.ZodOptional; threads: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; memberInfo: z.ZodOptional; roleInfo: z.ZodOptional; roles: z.ZodOptional; channelInfo: z.ZodOptional; voiceStatus: z.ZodOptional; events: z.ZodOptional; moderation: z.ZodOptional; channels: z.ZodOptional; presence: z.ZodOptional; }, z.core.$strict>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; }, z.core.$strict>>; guilds: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; reactionNotifications: z.ZodOptional>; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; channels: z.ZodOptional; requireMention: z.ZodOptional; ignoreOtherMentions: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; users: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; roles: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; systemPrompt: z.ZodOptional; includeThreadStarter: z.ZodOptional; autoThread: z.ZodOptional; autoThreadName: z.ZodOptional>; autoArchiveDuration: z.ZodOptional, z.ZodLiteral<60>, z.ZodLiteral<1440>, z.ZodLiteral<4320>, z.ZodLiteral<10080>]>>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional, z.ZodTransform>, z.ZodString>>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; cleanupAfterResolve: z.ZodOptional; target: z.ZodOptional>; }, z.core.$strict>>; agentComponents: z.ZodOptional; }, z.core.$strict>>; ui: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>; slashCommand: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; intents: z.ZodOptional; guildMembers: z.ZodOptional; }, z.core.$strict>>; voice: z.ZodOptional; autoJoin: z.ZodOptional>>; daveEncryption: z.ZodOptional; decryptionFailureTolerance: z.ZodOptional; tts: z.ZodOptional>; enabled: z.ZodOptional; mode: z.ZodOptional>; provider: z.ZodOptional; summaryModel: z.ZodOptional; modelOverrides: z.ZodOptional; allowText: z.ZodOptional; allowProvider: z.ZodOptional; allowVoice: z.ZodOptional; allowModelId: z.ZodOptional; allowVoiceSettings: z.ZodOptional; allowNormalization: z.ZodOptional; allowSeed: z.ZodOptional; }, z.core.$strict>>; providers: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$catchall, z.ZodRecord]>>>>>; prefsPath: z.ZodOptional; maxTextLength: z.ZodOptional; timeoutMs: z.ZodOptional; }, z.core.$strict>>>; }, z.core.$strict>>; pluralkit: z.ZodOptional; token: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; ackReactionScope: z.ZodOptional>; activity: z.ZodOptional; status: z.ZodOptional>; autoPresence: z.ZodOptional; intervalMs: z.ZodOptional; minUpdateIntervalMs: z.ZodOptional; healthyText: z.ZodOptional; degradedText: z.ZodOptional; exhaustedText: z.ZodOptional; }, z.core.$strict>>; activityType: z.ZodOptional, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>]>>; activityUrl: z.ZodOptional; inboundWorker: z.ZodOptional; }, z.core.$strict>>; eventQueue: z.ZodOptional; maxQueueSize: z.ZodOptional; maxConcurrency: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"DiscordConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":676,"sourcePath":"src/config/zod-schema.providers-core.ts"} {"declaration":"export const DmConfigSchema: z.ZodObject<{ historyLimit: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"DmConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":361,"sourcePath":"src/config/zod-schema.core.ts"} {"declaration":"export const DmPolicySchema: z.ZodEnum<{ disabled: \"disabled\"; pairing: \"pairing\"; allowlist: \"allowlist\"; open: \"open\"; }>;","entrypoint":"channel-config-schema","exportName":"DmPolicySchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":405,"sourcePath":"src/config/zod-schema.core.ts"} -{"declaration":"export const GoogleChatConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; enabled: z.ZodOptional; configWrites: z.ZodOptional; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; groupPolicy: z.ZodDefault>>; groupAllowFrom: z.ZodOptional>>; groups: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; users: z.ZodOptional>>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; defaultTo: z.ZodOptional; serviceAccount: z.ZodOptional, z.ZodDiscriminatedUnion<[z.ZodObject<{ source: z.ZodLiteral<\"env\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; serviceAccountRef: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">>; serviceAccountFile: z.ZodOptional; audienceType: z.ZodOptional>; audience: z.ZodOptional; appPrincipal: z.ZodOptional; webhookPath: z.ZodOptional; webhookUrl: z.ZodOptional; botUser: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streamMode: z.ZodDefault>>; mediaMaxMb: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; actions: z.ZodOptional; }, z.core.$strict>>; dm: z.ZodOptional; policy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; typingIndicator: z.ZodOptional>; responsePrefix: z.ZodOptional; accounts: z.ZodOptional; capabilities: z.ZodOptional>; enabled: z.ZodOptional; configWrites: z.ZodOptional; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; groupPolicy: z.ZodDefault>>; groupAllowFrom: z.ZodOptional>>; groups: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; users: z.ZodOptional>>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; defaultTo: z.ZodOptional; serviceAccount: z.ZodOptional, z.ZodDiscriminatedUnion<[z.ZodObject<{ source: z.ZodLiteral<\"env\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; serviceAccountRef: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">>; serviceAccountFile: z.ZodOptional; audienceType: z.ZodOptional>; audience: z.ZodOptional; appPrincipal: z.ZodOptional; webhookPath: z.ZodOptional; webhookUrl: z.ZodOptional; botUser: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streamMode: z.ZodDefault>>; mediaMaxMb: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; actions: z.ZodOptional; }, z.core.$strict>>; dm: z.ZodOptional; policy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; typingIndicator: z.ZodOptional>; responsePrefix: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"GoogleChatConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":849,"sourcePath":"src/config/zod-schema.providers-core.ts"} +{"declaration":"export const GoogleChatConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; enabled: z.ZodOptional; configWrites: z.ZodOptional; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; groupPolicy: z.ZodDefault>>; groupAllowFrom: z.ZodOptional>>; groups: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; users: z.ZodOptional>>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; defaultTo: z.ZodOptional; serviceAccount: z.ZodOptional, z.ZodDiscriminatedUnion<[z.ZodObject<{ source: z.ZodLiteral<\"env\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; serviceAccountRef: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">>; serviceAccountFile: z.ZodOptional; audienceType: z.ZodOptional>; audience: z.ZodOptional; appPrincipal: z.ZodOptional; webhookPath: z.ZodOptional; webhookUrl: z.ZodOptional; botUser: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streamMode: z.ZodDefault>>; mediaMaxMb: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; actions: z.ZodOptional; }, z.core.$strict>>; dm: z.ZodOptional; policy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; typingIndicator: z.ZodOptional>; responsePrefix: z.ZodOptional; accounts: z.ZodOptional; capabilities: z.ZodOptional>; enabled: z.ZodOptional; configWrites: z.ZodOptional; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; groupPolicy: z.ZodDefault>>; groupAllowFrom: z.ZodOptional>>; groups: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; users: z.ZodOptional>>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; defaultTo: z.ZodOptional; serviceAccount: z.ZodOptional, z.ZodDiscriminatedUnion<[z.ZodObject<{ source: z.ZodLiteral<\"env\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; serviceAccountRef: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">>; serviceAccountFile: z.ZodOptional; audienceType: z.ZodOptional>; audience: z.ZodOptional; appPrincipal: z.ZodOptional; webhookPath: z.ZodOptional; webhookUrl: z.ZodOptional; botUser: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streamMode: z.ZodDefault>>; mediaMaxMb: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; actions: z.ZodOptional; }, z.core.$strict>>; dm: z.ZodOptional; policy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; typingIndicator: z.ZodOptional>; responsePrefix: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"GoogleChatConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":815,"sourcePath":"src/config/zod-schema.providers-core.ts"} {"declaration":"export const GroupPolicySchema: z.ZodEnum<{ disabled: \"disabled\"; allowlist: \"allowlist\"; open: \"open\"; }>;","entrypoint":"channel-config-schema","exportName":"GroupPolicySchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":403,"sourcePath":"src/config/zod-schema.core.ts"} -{"declaration":"export const IMessageConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; configWrites: z.ZodOptional; cliPath: z.ZodOptional; dbPath: z.ZodOptional; remoteHost: z.ZodOptional; service: z.ZodOptional, z.ZodLiteral<\"sms\">, z.ZodLiteral<\"auto\">]>>; region: z.ZodOptional; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; includeAttachments: z.ZodOptional; attachmentRoots: z.ZodOptional>; remoteAttachmentRoots: z.ZodOptional>; mediaMaxMb: z.ZodOptional; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; groups: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; accounts: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; configWrites: z.ZodOptional; cliPath: z.ZodOptional; dbPath: z.ZodOptional; remoteHost: z.ZodOptional; service: z.ZodOptional, z.ZodLiteral<\"sms\">, z.ZodLiteral<\"auto\">]>>; region: z.ZodOptional; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; includeAttachments: z.ZodOptional; attachmentRoots: z.ZodOptional>; remoteAttachmentRoots: z.ZodOptional>; mediaMaxMb: z.ZodOptional; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; groups: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"IMessageConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":1363,"sourcePath":"src/config/zod-schema.providers-core.ts"} +{"declaration":"export const IMessageConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; configWrites: z.ZodOptional; cliPath: z.ZodOptional; dbPath: z.ZodOptional; remoteHost: z.ZodOptional; service: z.ZodOptional, z.ZodLiteral<\"sms\">, z.ZodLiteral<\"auto\">]>>; region: z.ZodOptional; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; includeAttachments: z.ZodOptional; attachmentRoots: z.ZodOptional>; remoteAttachmentRoots: z.ZodOptional>; mediaMaxMb: z.ZodOptional; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; groups: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; accounts: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; configWrites: z.ZodOptional; cliPath: z.ZodOptional; dbPath: z.ZodOptional; remoteHost: z.ZodOptional; service: z.ZodOptional, z.ZodLiteral<\"sms\">, z.ZodLiteral<\"auto\">]>>; region: z.ZodOptional; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; includeAttachments: z.ZodOptional; attachmentRoots: z.ZodOptional>; remoteAttachmentRoots: z.ZodOptional>; mediaMaxMb: z.ZodOptional; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; groups: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"IMessageConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":1326,"sourcePath":"src/config/zod-schema.providers-core.ts"} {"declaration":"export const MarkdownConfigSchema: z.ZodOptional>; }, z.core.$strict>>;","entrypoint":"channel-config-schema","exportName":"MarkdownConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":441,"sourcePath":"src/config/zod-schema.core.ts"} -{"declaration":"export const MSTeamsConfigSchema: z.ZodObject<{ enabled: z.ZodOptional; capabilities: z.ZodOptional>; dangerouslyAllowNameMatching: z.ZodOptional; markdown: z.ZodOptional>; }, z.core.$strict>>; configWrites: z.ZodOptional; appId: z.ZodOptional; appPassword: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tenantId: z.ZodOptional; webhook: z.ZodOptional; path: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaAllowHosts: z.ZodOptional>; mediaAuthAllowHosts: z.ZodOptional>; requireMention: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; replyStyle: z.ZodOptional>; teams: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; replyStyle: z.ZodOptional>; channels: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; replyStyle: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; mediaMaxMb: z.ZodOptional; sharePointSiteId: z.ZodOptional; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; welcomeCard: z.ZodOptional; promptStarters: z.ZodOptional>; groupWelcomeCard: z.ZodOptional; feedbackEnabled: z.ZodOptional; feedbackReflection: z.ZodOptional; feedbackReflectionCooldownMs: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"MSTeamsConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":1547,"sourcePath":"src/config/zod-schema.providers-core.ts"} +{"declaration":"export const MSTeamsConfigSchema: z.ZodObject<{ enabled: z.ZodOptional; capabilities: z.ZodOptional>; dangerouslyAllowNameMatching: z.ZodOptional; markdown: z.ZodOptional>; }, z.core.$strict>>; configWrites: z.ZodOptional; appId: z.ZodOptional; appPassword: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tenantId: z.ZodOptional; webhook: z.ZodOptional; path: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaAllowHosts: z.ZodOptional>; mediaAuthAllowHosts: z.ZodOptional>; requireMention: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; replyStyle: z.ZodOptional>; teams: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; replyStyle: z.ZodOptional>; channels: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; replyStyle: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; mediaMaxMb: z.ZodOptional; sharePointSiteId: z.ZodOptional; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; welcomeCard: z.ZodOptional; promptStarters: z.ZodOptional>; groupWelcomeCard: z.ZodOptional; feedbackEnabled: z.ZodOptional; feedbackReflection: z.ZodOptional; feedbackReflectionCooldownMs: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"MSTeamsConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":1510,"sourcePath":"src/config/zod-schema.providers-core.ts"} {"declaration":"export const ReplyRuntimeConfigSchemaShape: { historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; contextVisibility: z.ZodOptional>; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; mediaMaxMb: z.ZodOptional; };","entrypoint":"channel-config-schema","exportName":"ReplyRuntimeConfigSchemaShape","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":416,"sourcePath":"src/config/zod-schema.core.ts"} {"declaration":"export const requireOpenAllowFrom: (params: { policy?: string; allowFrom?: Array; ctx: z.RefinementCtx; path: Array; message: string; }) => void;","entrypoint":"channel-config-schema","exportName":"requireOpenAllowFrom","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":556,"sourcePath":"src/config/zod-schema.core.ts"} -{"declaration":"export const SignalConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; configWrites: z.ZodOptional; account: z.ZodOptional; accountUuid: z.ZodOptional; httpUrl: z.ZodOptional; httpHost: z.ZodOptional; httpPort: z.ZodOptional; cliPath: z.ZodOptional; autoStart: z.ZodOptional; startupTimeoutMs: z.ZodOptional; receiveMode: z.ZodOptional, z.ZodLiteral<\"manual\">]>>; ignoreAttachments: z.ZodOptional; ignoreStories: z.ZodOptional; sendReadReceipts: z.ZodOptional; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; groups: z.ZodOptional; ingest: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; actions: z.ZodOptional; }, z.core.$strict>>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; accounts: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; configWrites: z.ZodOptional; account: z.ZodOptional; accountUuid: z.ZodOptional; httpUrl: z.ZodOptional; httpHost: z.ZodOptional; httpPort: z.ZodOptional; cliPath: z.ZodOptional; autoStart: z.ZodOptional; startupTimeoutMs: z.ZodOptional; receiveMode: z.ZodOptional, z.ZodLiteral<\"manual\">]>>; ignoreAttachments: z.ZodOptional; ignoreStories: z.ZodOptional; sendReadReceipts: z.ZodOptional; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; groups: z.ZodOptional; ingest: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; actions: z.ZodOptional; }, z.core.$strict>>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"SignalConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":1119,"sourcePath":"src/config/zod-schema.providers-core.ts"} -{"declaration":"export const SlackConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ interactiveReplies: z.ZodOptional; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; appToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userTokenReadOnly: z.ZodDefault>; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional]>>; nativeStreaming: z.ZodOptional; streamMode: z.ZodOptional>; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; replyToModeByChatType: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; group: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; channel: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; thread: z.ZodOptional>; inheritParent: z.ZodOptional; initialHistoryLimit: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; messages: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; permissions: z.ZodOptional; memberInfo: z.ZodOptional; channelInfo: z.ZodOptional; emojiList: z.ZodOptional; }, z.core.$strict>>; slashCommand: z.ZodOptional; name: z.ZodOptional; sessionPrefix: z.ZodOptional; ephemeral: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; channels: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; allowBots: z.ZodOptional; users: z.ZodOptional>>; skills: z.ZodOptional>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; typingReaction: z.ZodOptional; mode: z.ZodDefault>>; signingSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodDefault>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; accounts: z.ZodOptional; mode: z.ZodOptional>; signingSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ interactiveReplies: z.ZodOptional; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; appToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userTokenReadOnly: z.ZodDefault>; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; groupPolicy: z.ZodOptional>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional]>>; nativeStreaming: z.ZodOptional; streamMode: z.ZodOptional>; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; replyToModeByChatType: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; group: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; channel: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; thread: z.ZodOptional>; inheritParent: z.ZodOptional; initialHistoryLimit: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; messages: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; permissions: z.ZodOptional; memberInfo: z.ZodOptional; channelInfo: z.ZodOptional; emojiList: z.ZodOptional; }, z.core.$strict>>; slashCommand: z.ZodOptional; name: z.ZodOptional; sessionPrefix: z.ZodOptional; ephemeral: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; channels: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; allowBots: z.ZodOptional; users: z.ZodOptional>>; skills: z.ZodOptional>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; typingReaction: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"SlackConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":984,"sourcePath":"src/config/zod-schema.providers-core.ts"} -{"declaration":"export const TelegramConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ inlineButtons: z.ZodOptional>; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; customCommands: z.ZodOptional>>; configWrites: z.ZodOptional; dmPolicy: z.ZodDefault>>; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tokenFile: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; groups: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional>; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; direct: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; requireTopic: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; streaming: z.ZodOptional]>>; blockStreaming: z.ZodOptional; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streamMode: z.ZodOptional>; mediaMaxMb: z.ZodOptional; timeoutSeconds: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; network: z.ZodOptional; dnsResultOrder: z.ZodOptional>; dangerouslyAllowPrivateNetwork: z.ZodOptional; }, z.core.$strict>>; proxy: z.ZodOptional; webhookUrl: z.ZodOptional; webhookSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; webhookHost: z.ZodOptional; webhookPort: z.ZodOptional; webhookCertPath: z.ZodOptional; actions: z.ZodOptional; sendMessage: z.ZodOptional; poll: z.ZodOptional; deleteMessage: z.ZodOptional; editMessage: z.ZodOptional; sticker: z.ZodOptional; createForumTopic: z.ZodOptional; editForumTopic: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; reactionNotifications: z.ZodOptional>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; linkPreview: z.ZodOptional; silentErrorReplies: z.ZodOptional; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; apiRoot: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; accounts: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ inlineButtons: z.ZodOptional>; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; customCommands: z.ZodOptional>>; configWrites: z.ZodOptional; dmPolicy: z.ZodDefault>>; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tokenFile: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; groups: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional>; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; direct: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; requireTopic: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; streaming: z.ZodOptional]>>; blockStreaming: z.ZodOptional; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streamMode: z.ZodOptional>; mediaMaxMb: z.ZodOptional; timeoutSeconds: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; network: z.ZodOptional; dnsResultOrder: z.ZodOptional>; dangerouslyAllowPrivateNetwork: z.ZodOptional; }, z.core.$strict>>; proxy: z.ZodOptional; webhookUrl: z.ZodOptional; webhookSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; webhookHost: z.ZodOptional; webhookPort: z.ZodOptional; webhookCertPath: z.ZodOptional; actions: z.ZodOptional; sendMessage: z.ZodOptional; poll: z.ZodOptional; deleteMessage: z.ZodOptional; editMessage: z.ZodOptional; sticker: z.ZodOptional; createForumTopic: z.ZodOptional; editForumTopic: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; reactionNotifications: z.ZodOptional>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; linkPreview: z.ZodOptional; silentErrorReplies: z.ZodOptional; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; apiRoot: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"TelegramConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":342,"sourcePath":"src/config/zod-schema.providers-core.ts"} +{"declaration":"export const SignalConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; configWrites: z.ZodOptional; account: z.ZodOptional; accountUuid: z.ZodOptional; httpUrl: z.ZodOptional; httpHost: z.ZodOptional; httpPort: z.ZodOptional; cliPath: z.ZodOptional; autoStart: z.ZodOptional; startupTimeoutMs: z.ZodOptional; receiveMode: z.ZodOptional, z.ZodLiteral<\"manual\">]>>; ignoreAttachments: z.ZodOptional; ignoreStories: z.ZodOptional; sendReadReceipts: z.ZodOptional; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; groups: z.ZodOptional; ingest: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; actions: z.ZodOptional; }, z.core.$strict>>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; accounts: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; configWrites: z.ZodOptional; account: z.ZodOptional; accountUuid: z.ZodOptional; httpUrl: z.ZodOptional; httpHost: z.ZodOptional; httpPort: z.ZodOptional; cliPath: z.ZodOptional; autoStart: z.ZodOptional; startupTimeoutMs: z.ZodOptional; receiveMode: z.ZodOptional, z.ZodLiteral<\"manual\">]>>; ignoreAttachments: z.ZodOptional; ignoreStories: z.ZodOptional; sendReadReceipts: z.ZodOptional; dmPolicy: z.ZodDefault>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; groups: z.ZodOptional; ingest: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; actions: z.ZodOptional; }, z.core.$strict>>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"SignalConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":1082,"sourcePath":"src/config/zod-schema.providers-core.ts"} +{"declaration":"export const SlackConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ interactiveReplies: z.ZodOptional; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; appToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userTokenReadOnly: z.ZodDefault>; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional>; nativeStreaming: z.ZodOptional; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; replyToModeByChatType: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; group: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; channel: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; thread: z.ZodOptional>; inheritParent: z.ZodOptional; initialHistoryLimit: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; messages: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; permissions: z.ZodOptional; memberInfo: z.ZodOptional; channelInfo: z.ZodOptional; emojiList: z.ZodOptional; }, z.core.$strict>>; slashCommand: z.ZodOptional; name: z.ZodOptional; sessionPrefix: z.ZodOptional; ephemeral: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; channels: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; allowBots: z.ZodOptional; users: z.ZodOptional>>; skills: z.ZodOptional>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; typingReaction: z.ZodOptional; mode: z.ZodDefault>>; signingSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodDefault>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; accounts: z.ZodOptional; mode: z.ZodOptional>; signingSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ interactiveReplies: z.ZodOptional; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; configWrites: z.ZodOptional; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; appToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; userTokenReadOnly: z.ZodDefault>; allowBots: z.ZodOptional; dangerouslyAllowNameMatching: z.ZodOptional; requireMention: z.ZodOptional; groupPolicy: z.ZodOptional>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; streaming: z.ZodOptional>; nativeStreaming: z.ZodOptional; mediaMaxMb: z.ZodOptional; reactionNotifications: z.ZodOptional>; reactionAllowlist: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; replyToModeByChatType: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; group: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; channel: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; thread: z.ZodOptional>; inheritParent: z.ZodOptional; initialHistoryLimit: z.ZodOptional; }, z.core.$strict>>; actions: z.ZodOptional; messages: z.ZodOptional; pins: z.ZodOptional; search: z.ZodOptional; permissions: z.ZodOptional; memberInfo: z.ZodOptional; channelInfo: z.ZodOptional; emojiList: z.ZodOptional; }, z.core.$strict>>; slashCommand: z.ZodOptional; name: z.ZodOptional; sessionPrefix: z.ZodOptional; ephemeral: z.ZodOptional; }, z.core.$strict>>; dmPolicy: z.ZodOptional>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional; dm: z.ZodOptional; policy: z.ZodOptional>; allowFrom: z.ZodOptional>>; groupEnabled: z.ZodOptional; groupChannels: z.ZodOptional>>; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; }, z.core.$strict>>; channels: z.ZodOptional; allow: z.ZodOptional; requireMention: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; allowBots: z.ZodOptional; users: z.ZodOptional>>; skills: z.ZodOptional>; systemPrompt: z.ZodOptional; }, z.core.$strict>>>>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; typingReaction: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"SlackConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":947,"sourcePath":"src/config/zod-schema.providers-core.ts"} +{"declaration":"export const TelegramConfigSchema: z.ZodObject<{ name: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ inlineButtons: z.ZodOptional>; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; customCommands: z.ZodOptional>>; configWrites: z.ZodOptional; dmPolicy: z.ZodDefault>>; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tokenFile: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; groups: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional>; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; direct: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; requireTopic: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; streaming: z.ZodOptional>; blockStreaming: z.ZodOptional; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaMaxMb: z.ZodOptional; timeoutSeconds: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; network: z.ZodOptional; dnsResultOrder: z.ZodOptional>; dangerouslyAllowPrivateNetwork: z.ZodOptional; }, z.core.$strict>>; proxy: z.ZodOptional; webhookUrl: z.ZodOptional; webhookSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; webhookHost: z.ZodOptional; webhookPort: z.ZodOptional; webhookCertPath: z.ZodOptional; actions: z.ZodOptional; sendMessage: z.ZodOptional; poll: z.ZodOptional; deleteMessage: z.ZodOptional; editMessage: z.ZodOptional; sticker: z.ZodOptional; createForumTopic: z.ZodOptional; editForumTopic: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; reactionNotifications: z.ZodOptional>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; linkPreview: z.ZodOptional; silentErrorReplies: z.ZodOptional; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; apiRoot: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; accounts: z.ZodOptional; capabilities: z.ZodOptional, z.ZodObject<{ inlineButtons: z.ZodOptional>; }, z.core.$strict>]>>; execApprovals: z.ZodOptional; approvers: z.ZodOptional>>; agentFilter: z.ZodOptional>; sessionFilter: z.ZodOptional>; target: z.ZodOptional>; }, z.core.$strict>>; markdown: z.ZodOptional>; }, z.core.$strict>>; enabled: z.ZodOptional; commands: z.ZodOptional]>>; nativeSkills: z.ZodOptional]>>; }, z.core.$strict>>; customCommands: z.ZodOptional>>; configWrites: z.ZodOptional; dmPolicy: z.ZodDefault>>; botToken: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; tokenFile: z.ZodOptional; replyToMode: z.ZodOptional, z.ZodLiteral<\"first\">, z.ZodLiteral<\"all\">]>>; groups: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; allowFrom: z.ZodOptional>>; defaultTo: z.ZodOptional>; groupAllowFrom: z.ZodOptional>>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; direct: z.ZodOptional>; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; topics: z.ZodOptional; ingest: z.ZodOptional; disableAudioPreflight: z.ZodOptional; groupPolicy: z.ZodOptional>; skills: z.ZodOptional>; enabled: z.ZodOptional; allowFrom: z.ZodOptional>>; systemPrompt: z.ZodOptional; agentId: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; }, z.core.$strict>>>>; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; requireTopic: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; streaming: z.ZodOptional>; blockStreaming: z.ZodOptional; draftChunk: z.ZodOptional; maxChars: z.ZodOptional; breakPreference: z.ZodOptional, z.ZodLiteral<\"newline\">, z.ZodLiteral<\"sentence\">]>>; }, z.core.$strict>>; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; mediaMaxMb: z.ZodOptional; timeoutSeconds: z.ZodOptional; retry: z.ZodOptional; minDelayMs: z.ZodOptional; maxDelayMs: z.ZodOptional; jitter: z.ZodOptional; }, z.core.$strict>>; network: z.ZodOptional; dnsResultOrder: z.ZodOptional>; dangerouslyAllowPrivateNetwork: z.ZodOptional; }, z.core.$strict>>; proxy: z.ZodOptional; webhookUrl: z.ZodOptional; webhookSecret: z.ZodOptional; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"file\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>, z.ZodObject<{ source: z.ZodLiteral<\"exec\">; provider: z.ZodString; id: z.ZodString; }, z.core.$strict>], \"source\">]>>; webhookPath: z.ZodOptional; webhookHost: z.ZodOptional; webhookPort: z.ZodOptional; webhookCertPath: z.ZodOptional; actions: z.ZodOptional; sendMessage: z.ZodOptional; poll: z.ZodOptional; deleteMessage: z.ZodOptional; editMessage: z.ZodOptional; sticker: z.ZodOptional; createForumTopic: z.ZodOptional; editForumTopic: z.ZodOptional; }, z.core.$strict>>; threadBindings: z.ZodOptional; idleHours: z.ZodOptional; maxAgeHours: z.ZodOptional; spawnSubagentSessions: z.ZodOptional; spawnAcpSessions: z.ZodOptional; }, z.core.$strict>>; reactionNotifications: z.ZodOptional>; reactionLevel: z.ZodOptional>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; linkPreview: z.ZodOptional; silentErrorReplies: z.ZodOptional; responsePrefix: z.ZodOptional; ackReaction: z.ZodOptional; errorPolicy: z.ZodOptional>; errorCooldownMs: z.ZodOptional; apiRoot: z.ZodOptional; autoTopicLabel: z.ZodOptional; prompt: z.ZodOptional; }, z.core.$strict>]>>; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"TelegramConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":313,"sourcePath":"src/config/zod-schema.providers-core.ts"} {"declaration":"export const ToolPolicySchema: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>;","entrypoint":"channel-config-schema","exportName":"ToolPolicySchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":253,"sourcePath":"src/config/zod-schema.agent-runtime.ts"} {"declaration":"export const WhatsAppConfigSchema: z.ZodObject<{ enabled: z.ZodOptional; capabilities: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; configWrites: z.ZodOptional; sendReadReceipts: z.ZodOptional; messagePrefix: z.ZodOptional; responsePrefix: z.ZodOptional; dmPolicy: z.ZodDefault>>; selfChatMode: z.ZodOptional; allowFrom: z.ZodOptional>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; groups: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; ackReaction: z.ZodOptional; direct: z.ZodDefault>; group: z.ZodDefault>>; }, z.core.$strict>>; reactionLevel: z.ZodOptional>; debounceMs: z.ZodDefault>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; accounts: z.ZodOptional>; markdown: z.ZodOptional>; }, z.core.$strict>>; configWrites: z.ZodOptional; sendReadReceipts: z.ZodOptional; messagePrefix: z.ZodOptional; responsePrefix: z.ZodOptional; dmPolicy: z.ZodDefault>>; selfChatMode: z.ZodOptional; allowFrom: z.ZodOptional>; defaultTo: z.ZodOptional; groupAllowFrom: z.ZodOptional>; groupPolicy: z.ZodDefault>>; contextVisibility: z.ZodOptional>; historyLimit: z.ZodOptional; dmHistoryLimit: z.ZodOptional; dms: z.ZodOptional; }, z.core.$strict>>>>; textChunkLimit: z.ZodOptional; chunkMode: z.ZodOptional>; blockStreaming: z.ZodOptional; blockStreamingCoalesce: z.ZodOptional; maxChars: z.ZodOptional; idleMs: z.ZodOptional; }, z.core.$strict>>; groups: z.ZodOptional; tools: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>; toolsBySender: z.ZodOptional>; alsoAllow: z.ZodOptional>; deny: z.ZodOptional>; }, z.core.$strict>>>>; }, z.core.$strict>>>>; ackReaction: z.ZodOptional; direct: z.ZodDefault>; group: z.ZodDefault>>; }, z.core.$strict>>; reactionLevel: z.ZodOptional>; debounceMs: z.ZodDefault>; heartbeat: z.ZodOptional; showAlerts: z.ZodOptional; useIndicator: z.ZodOptional; }, z.core.$strict>>; healthMonitor: z.ZodOptional; }, z.core.$strict>>; name: z.ZodOptional; enabled: z.ZodOptional; authDir: z.ZodOptional; mediaMaxMb: z.ZodOptional; }, z.core.$strict>>>>; defaultAccount: z.ZodOptional; mediaMaxMb: z.ZodDefault>; actions: z.ZodOptional; sendMessage: z.ZodOptional; polls: z.ZodOptional; }, z.core.$strict>>; }, z.core.$strict>;","entrypoint":"channel-config-schema","exportName":"WhatsAppConfigSchema","importSpecifier":"openclaw/plugin-sdk/channel-config-schema","kind":"const","recordType":"export","sourceLine":122,"sourcePath":"src/config/zod-schema.providers-whatsapp.ts"} {"category":"channel","entrypoint":"channel-contract","importSpecifier":"openclaw/plugin-sdk/channel-contract","recordType":"module","sourceLine":1,"sourcePath":"src/plugin-sdk/channel-contract.ts"} -{"declaration":"export type BaseProbeResult = BaseProbeResult;","entrypoint":"channel-contract","exportName":"BaseProbeResult","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":603,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type BaseTokenResolution = BaseTokenResolution;","entrypoint":"channel-contract","exportName":"BaseTokenResolution","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":609,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type BaseProbeResult = BaseProbeResult;","entrypoint":"channel-contract","exportName":"BaseProbeResult","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":630,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type BaseTokenResolution = BaseTokenResolution;","entrypoint":"channel-contract","exportName":"BaseTokenResolution","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":636,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelAccountSnapshot = ChannelAccountSnapshot;","entrypoint":"channel-contract","exportName":"ChannelAccountSnapshot","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":147,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelAgentTool = ChannelAgentTool;","entrypoint":"channel-contract","exportName":"ChannelAgentTool","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":19,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelApprovalAdapter = ChannelApprovalAdapter;","entrypoint":"channel-contract","exportName":"ChannelApprovalAdapter","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":613,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelApprovalCapability = ChannelApprovalCapability;","entrypoint":"channel-contract","exportName":"ChannelApprovalCapability","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":602,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelCommandConversationContext = ChannelCommandConversationContext;","entrypoint":"channel-contract","exportName":"ChannelCommandConversationContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":684,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelDirectoryAdapter = ChannelDirectoryAdapter;","entrypoint":"channel-contract","exportName":"ChannelDirectoryAdapter","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":459,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelApprovalAdapter = ChannelApprovalAdapter;","entrypoint":"channel-contract","exportName":"ChannelApprovalAdapter","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":714,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelApprovalCapability = ChannelApprovalCapability;","entrypoint":"channel-contract","exportName":"ChannelApprovalCapability","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":703,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelCommandConversationContext = ChannelCommandConversationContext;","entrypoint":"channel-contract","exportName":"ChannelCommandConversationContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":785,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelDirectoryAdapter = ChannelDirectoryAdapter;","entrypoint":"channel-contract","exportName":"ChannelDirectoryAdapter","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":472,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelDoctorAdapter = ChannelDoctorAdapter;","entrypoint":"channel-contract","exportName":"ChannelDoctorAdapter","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":560,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelDoctorConfigMutation = ChannelDoctorConfigMutation;","entrypoint":"channel-contract","exportName":"ChannelDoctorConfigMutation","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":540,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelDoctorEmptyAllowlistAccountContext = ChannelDoctorEmptyAllowlistAccountContext;","entrypoint":"channel-contract","exportName":"ChannelDoctorEmptyAllowlistAccountContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":551,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelDoctorSequenceResult = ChannelDoctorSequenceResult;","entrypoint":"channel-contract","exportName":"ChannelDoctorSequenceResult","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":546,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelGroupContext = ChannelGroupContext;","entrypoint":"channel-contract","exportName":"ChannelGroupContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":219,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelMessageActionAdapter = ChannelMessageActionAdapter;","entrypoint":"channel-contract","exportName":"ChannelMessageActionAdapter","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":560,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"channel-contract","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":524,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelMessageActionAdapter = ChannelMessageActionAdapter;","entrypoint":"channel-contract","exportName":"ChannelMessageActionAdapter","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":580,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"channel-contract","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":544,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelMessageActionDiscoveryContext = ChannelMessageActionDiscoveryContext;","entrypoint":"channel-contract","exportName":"ChannelMessageActionDiscoveryContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":32,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelMessageActionName = \"send\" | \"broadcast\" | \"poll\" | \"poll-vote\" | \"react\" | \"reactions\" | \"read\" | \"edit\" | \"unsend\" | \"reply\" | \"sendWithEffect\" | \"renameGroup\" | \"setGroupIcon\" | \"addParticipant\" | \"removeParticipant\" | \"leaveGroup\" | \"sendAttachment\" | \"delete\" | \"pin\" | \"unpin\" | \"list-pins\" | \"permissions\" | \"thread-create\" | \"thread-list\" | \"thread-reply\" | \"search\" | \"sticker\" | \"sticker-search\" | \"member-info\" | \"role-info\" | \"emoji-list\" | \"emoji-upload\" | \"sticker-upload\" | \"role-add\" | \"role-remove\" | \"channel-info\" | \"channel-list\" | \"channel-create\" | \"channel-edit\" | \"channel-delete\" | \"channel-move\" | \"category-create\" | \"category-edit\" | \"category-delete\" | \"topic-create\" | \"topic-edit\" | \"voice-status\" | \"event-list\" | \"event-create\" | \"timeout\" | \"kick\" | \"ban\" | \"set-profile\" | \"set-presence\" | \"download-file\" | \"upload-file\";","entrypoint":"channel-contract","exportName":"ChannelMessageActionName","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":6,"sourcePath":"src/channels/plugins/types.ts"} {"declaration":"export type ChannelMessageToolDiscovery = ChannelMessageToolDiscovery;","entrypoint":"channel-contract","exportName":"ChannelMessageToolDiscovery","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":57,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelMessageToolSchemaContribution = ChannelMessageToolSchemaContribution;","entrypoint":"channel-contract","exportName":"ChannelMessageToolSchemaContribution","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":52,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelStatusIssue = ChannelStatusIssue;","entrypoint":"channel-contract","exportName":"ChannelStatusIssue","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":102,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelStructuredComponents = ChannelStructuredComponents;","entrypoint":"channel-contract","exportName":"ChannelStructuredComponents","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":291,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelThreadingContext = ChannelThreadingContext;","entrypoint":"channel-contract","exportName":"ChannelThreadingContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":368,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelThreadingToolContext = ChannelThreadingToolContext;","entrypoint":"channel-contract","exportName":"ChannelThreadingToolContext","importSpecifier":"openclaw/plugin-sdk/channel-contract","kind":"type","recordType":"export","sourceLine":382,"sourcePath":"src/channels/plugins/types.core.ts"} {"category":"channel","entrypoint":"channel-pairing","importSpecifier":"openclaw/plugin-sdk/channel-pairing","recordType":"module","sourceLine":1,"sourcePath":"src/plugin-sdk/channel-pairing.ts"} @@ -234,13 +239,13 @@ {"declaration":"export type ChannelReplyPipeline = ChannelReplyPipeline;","entrypoint":"channel-reply-pipeline","exportName":"ChannelReplyPipeline","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export","sourceLine":16,"sourcePath":"src/plugin-sdk/channel-reply-pipeline.ts"} {"declaration":"export type CreateTypingCallbacksParams = CreateTypingCallbacksParams;","entrypoint":"channel-reply-pipeline","exportName":"CreateTypingCallbacksParams","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export","sourceLine":11,"sourcePath":"src/channels/typing.ts"} {"declaration":"export type ReplyPrefixContext = import(\"../auto-reply/reply/response-prefix-template.ts\").ResponsePrefixContext;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export","sourceLine":12,"sourcePath":"src/plugin-sdk/channel-reply-pipeline.ts"} -{"declaration":"export type ReplyPrefixContextBundle = ReplyPrefixContextBundle;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixContextBundle","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export","sourceLine":12,"sourcePath":"src/channels/reply-prefix.ts"} -{"declaration":"export type ReplyPrefixOptions = ReplyPrefixOptions;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export","sourceLine":20,"sourcePath":"src/channels/reply-prefix.ts"} +{"declaration":"export type ReplyPrefixContextBundle = ReplyPrefixContextBundle;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixContextBundle","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export","sourceLine":11,"sourcePath":"src/channels/reply-prefix.ts"} +{"declaration":"export type ReplyPrefixOptions = ReplyPrefixOptions;","entrypoint":"channel-reply-pipeline","exportName":"ReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export","sourceLine":18,"sourcePath":"src/channels/reply-prefix.ts"} {"declaration":"export type TypingCallbacks = TypingCallbacks;","entrypoint":"channel-reply-pipeline","exportName":"TypingCallbacks","importSpecifier":"openclaw/plugin-sdk/channel-reply-pipeline","kind":"type","recordType":"export","sourceLine":4,"sourcePath":"src/channels/typing.ts"} {"category":"legacy","entrypoint":"channel-runtime","importSpecifier":"openclaw/plugin-sdk/channel-runtime","recordType":"module","sourceLine":1,"sourcePath":"src/plugin-sdk/channel-runtime.ts"} {"declaration":"export function createAccountStatusSink(params: { accountId: string; setStatus: (next: ChannelAccountSnapshot) => void; }): (patch: Omit) => void;","entrypoint":"channel-runtime","exportName":"createAccountStatusSink","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":15,"sourcePath":"src/plugin-sdk/channel-lifecycle.core.ts"} -{"declaration":"export function createReplyPrefixContext(params: { cfg: OpenClawConfig; agentId: string; channel?: string | undefined; accountId?: string | undefined; }): ReplyPrefixContextBundle;","entrypoint":"channel-runtime","exportName":"createReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":28,"sourcePath":"src/channels/reply-prefix.ts"} -{"declaration":"export function createReplyPrefixOptions(params: { cfg: OpenClawConfig; agentId: string; channel?: string | undefined; accountId?: string | undefined; }): ReplyPrefixOptions;","entrypoint":"channel-runtime","exportName":"createReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":64,"sourcePath":"src/channels/reply-prefix.ts"} +{"declaration":"export function createReplyPrefixContext(params: { cfg: OpenClawConfig; agentId: string; channel?: string | undefined; accountId?: string | undefined; }): ReplyPrefixContextBundle;","entrypoint":"channel-runtime","exportName":"createReplyPrefixContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":23,"sourcePath":"src/channels/reply-prefix.ts"} +{"declaration":"export function createReplyPrefixOptions(params: { cfg: OpenClawConfig; agentId: string; channel?: string | undefined; accountId?: string | undefined; }): ReplyPrefixOptions;","entrypoint":"channel-runtime","exportName":"createReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":53,"sourcePath":"src/channels/reply-prefix.ts"} {"declaration":"export function createTypingCallbacks(params: CreateTypingCallbacksParams): TypingCallbacks;","entrypoint":"channel-runtime","exportName":"createTypingCallbacks","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":23,"sourcePath":"src/channels/typing.ts"} {"declaration":"export function emitHeartbeatEvent(evt: Omit): void;","entrypoint":"channel-runtime","exportName":"emitHeartbeatEvent","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":51,"sourcePath":"src/infra/heartbeat-events.ts"} {"declaration":"export function enqueueSystemEvent(text: string, options: SystemEventOptions): boolean;","entrypoint":"channel-runtime","exportName":"enqueueSystemEvent","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":93,"sourcePath":"src/infra/system-events.ts"} @@ -262,51 +267,51 @@ {"declaration":"export function waitUntilAbort(signal?: AbortSignal | undefined, onAbort?: (() => void | Promise) | undefined): Promise;","entrypoint":"channel-runtime","exportName":"waitUntilAbort","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"function","recordType":"export","sourceLine":30,"sourcePath":"src/plugin-sdk/channel-lifecycle.core.ts"} {"declaration":"export const CHANNEL_MESSAGE_ACTION_NAMES: readonly [\"send\", \"broadcast\", \"poll\", \"poll-vote\", \"react\", \"reactions\", \"read\", \"edit\", \"unsend\", \"reply\", \"sendWithEffect\", \"renameGroup\", \"setGroupIcon\", \"addParticipant\", \"removeParticipant\", \"leaveGroup\", \"sendAttachment\", \"delete\", \"pin\", \"unpin\", \"list-pins\", \"permissions\", \"thread-create\", \"thread-list\", \"thread-reply\", \"search\", \"sticker\", \"sticker-search\", \"member-info\", \"role-info\", \"emoji-list\", \"emoji-upload\", \"sticker-upload\", \"role-add\", \"role-remove\", \"channel-info\", \"channel-list\", \"channel-create\", \"channel-edit\", \"channel-delete\", \"channel-move\", \"category-create\", \"category-edit\", \"category-delete\", \"topic-create\", \"topic-edit\", \"voice-status\", \"event-list\", \"event-create\", \"timeout\", \"kick\", \"ban\", \"set-profile\", \"set-presence\", \"set-profile\", \"download-file\", \"upload-file\"];","entrypoint":"channel-runtime","exportName":"CHANNEL_MESSAGE_ACTION_NAMES","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"const","recordType":"export","sourceLine":1,"sourcePath":"src/channels/plugins/message-action-names.ts"} {"declaration":"export const CHANNEL_MESSAGE_CAPABILITIES: readonly [\"interactive\", \"buttons\", \"cards\", \"components\", \"blocks\"];","entrypoint":"channel-runtime","exportName":"CHANNEL_MESSAGE_CAPABILITIES","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"const","recordType":"export","sourceLine":1,"sourcePath":"src/channels/plugins/message-capabilities.ts"} -{"declaration":"export type BaseProbeResult = BaseProbeResult;","entrypoint":"channel-runtime","exportName":"BaseProbeResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":603,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type BaseTokenResolution = BaseTokenResolution;","entrypoint":"channel-runtime","exportName":"BaseTokenResolution","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":609,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type BaseProbeResult = BaseProbeResult;","entrypoint":"channel-runtime","exportName":"BaseProbeResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":630,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type BaseTokenResolution = BaseTokenResolution;","entrypoint":"channel-runtime","exportName":"BaseTokenResolution","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":636,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelAccountSnapshot = ChannelAccountSnapshot;","entrypoint":"channel-runtime","exportName":"ChannelAccountSnapshot","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":147,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelAccountState = ChannelAccountState;","entrypoint":"channel-runtime","exportName":"ChannelAccountState","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":110,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelActionAvailabilityState = ChannelActionAvailabilityState;","entrypoint":"channel-runtime","exportName":"ChannelActionAvailabilityState","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":32,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelAgentPromptAdapter = ChannelAgentPromptAdapter;","entrypoint":"channel-runtime","exportName":"ChannelAgentPromptAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":497,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelAgentPromptAdapter = ChannelAgentPromptAdapter;","entrypoint":"channel-runtime","exportName":"ChannelAgentPromptAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":511,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelAgentTool = ChannelAgentTool;","entrypoint":"channel-runtime","exportName":"ChannelAgentTool","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":19,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelAgentToolFactory = ChannelAgentToolFactory;","entrypoint":"channel-runtime","exportName":"ChannelAgentToolFactory","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":24,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelAllowlistAdapter = ChannelAllowlistAdapter;","entrypoint":"channel-runtime","exportName":"ChannelAllowlistAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":619,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelApprovalAdapter = ChannelApprovalAdapter;","entrypoint":"channel-runtime","exportName":"ChannelApprovalAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":613,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelApprovalCapability = ChannelApprovalCapability;","entrypoint":"channel-runtime","exportName":"ChannelApprovalCapability","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":602,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelAllowlistAdapter = ChannelAllowlistAdapter;","entrypoint":"channel-runtime","exportName":"ChannelAllowlistAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":720,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelApprovalAdapter = ChannelApprovalAdapter;","entrypoint":"channel-runtime","exportName":"ChannelApprovalAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":714,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelApprovalCapability = ChannelApprovalCapability;","entrypoint":"channel-runtime","exportName":"ChannelApprovalCapability","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":703,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelApprovalForwardTarget = ChannelApprovalForwardTarget;","entrypoint":"channel-runtime","exportName":"ChannelApprovalForwardTarget","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":39,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelApprovalInitiatingSurfaceState = ChannelActionAvailabilityState;","entrypoint":"channel-runtime","exportName":"ChannelApprovalInitiatingSurfaceState","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":37,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelAuthAdapter = ChannelAuthAdapter;","entrypoint":"channel-runtime","exportName":"ChannelAuthAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":396,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelAuthAdapter = ChannelAuthAdapter;","entrypoint":"channel-runtime","exportName":"ChannelAuthAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":409,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelCapabilities = ChannelCapabilities;","entrypoint":"channel-runtime","exportName":"ChannelCapabilities","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":233,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelCapabilitiesDiagnostics = ChannelCapabilitiesDiagnostics;","entrypoint":"channel-runtime","exportName":"ChannelCapabilitiesDiagnostics","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":54,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelCapabilitiesDisplayLine = ChannelCapabilitiesDisplayLine;","entrypoint":"channel-runtime","exportName":"ChannelCapabilitiesDisplayLine","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":49,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelCapabilitiesDisplayTone = ChannelCapabilitiesDisplayTone;","entrypoint":"channel-runtime","exportName":"ChannelCapabilitiesDisplayTone","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":47,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelCommandAdapter = ChannelCommandAdapter;","entrypoint":"channel-runtime","exportName":"ChannelCommandAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":497,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelCommandConversationContext = ChannelCommandConversationContext;","entrypoint":"channel-runtime","exportName":"ChannelCommandConversationContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":684,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelCommandAdapter = ChannelCommandAdapter;","entrypoint":"channel-runtime","exportName":"ChannelCommandAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":510,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelCommandConversationContext = ChannelCommandConversationContext;","entrypoint":"channel-runtime","exportName":"ChannelCommandConversationContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":785,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelConfigAdapter = ChannelConfigAdapter;","entrypoint":"channel-runtime","exportName":"ChannelConfigAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":98,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelConfiguredBindingConversationRef = ChannelConfiguredBindingConversationRef;","entrypoint":"channel-runtime","exportName":"ChannelConfiguredBindingConversationRef","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":675,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelConfiguredBindingMatch = ChannelConfiguredBindingMatch;","entrypoint":"channel-runtime","exportName":"ChannelConfiguredBindingMatch","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":680,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelConfiguredBindingProvider = ChannelConfiguredBindingProvider;","entrypoint":"channel-runtime","exportName":"ChannelConfiguredBindingProvider","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":696,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelConversationBindingSupport = ChannelConversationBindingSupport;","entrypoint":"channel-runtime","exportName":"ChannelConversationBindingSupport","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":712,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelDirectoryAdapter = ChannelDirectoryAdapter;","entrypoint":"channel-runtime","exportName":"ChannelDirectoryAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":459,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelDirectoryEntry = ChannelDirectoryEntry;","entrypoint":"channel-runtime","exportName":"ChannelDirectoryEntry","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":511,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelDirectoryEntryKind = ChannelDirectoryEntryKind;","entrypoint":"channel-runtime","exportName":"ChannelDirectoryEntryKind","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":509,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelElevatedAdapter = ChannelElevatedAdapter;","entrypoint":"channel-runtime","exportName":"ChannelElevatedAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":490,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelGatewayAdapter = ChannelGatewayAdapter;","entrypoint":"channel-runtime","exportName":"ChannelGatewayAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":380,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelGatewayContext = ChannelGatewayContext;","entrypoint":"channel-runtime","exportName":"ChannelGatewayContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":272,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelConfiguredBindingConversationRef = ChannelConfiguredBindingConversationRef;","entrypoint":"channel-runtime","exportName":"ChannelConfiguredBindingConversationRef","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":776,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelConfiguredBindingMatch = ChannelConfiguredBindingMatch;","entrypoint":"channel-runtime","exportName":"ChannelConfiguredBindingMatch","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":781,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelConfiguredBindingProvider = ChannelConfiguredBindingProvider;","entrypoint":"channel-runtime","exportName":"ChannelConfiguredBindingProvider","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":797,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelConversationBindingSupport = ChannelConversationBindingSupport;","entrypoint":"channel-runtime","exportName":"ChannelConversationBindingSupport","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":814,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelDirectoryAdapter = ChannelDirectoryAdapter;","entrypoint":"channel-runtime","exportName":"ChannelDirectoryAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":472,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelDirectoryEntry = ChannelDirectoryEntry;","entrypoint":"channel-runtime","exportName":"ChannelDirectoryEntry","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":531,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelDirectoryEntryKind = ChannelDirectoryEntryKind;","entrypoint":"channel-runtime","exportName":"ChannelDirectoryEntryKind","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":529,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelElevatedAdapter = ChannelElevatedAdapter;","entrypoint":"channel-runtime","exportName":"ChannelElevatedAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":503,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelGatewayAdapter = ChannelGatewayAdapter;","entrypoint":"channel-runtime","exportName":"ChannelGatewayAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":393,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelGatewayContext = ChannelGatewayContext;","entrypoint":"channel-runtime","exportName":"ChannelGatewayContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":285,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelGroupAdapter = ChannelGroupAdapter;","entrypoint":"channel-runtime","exportName":"ChannelGroupAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":130,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelGroupContext = ChannelGroupContext;","entrypoint":"channel-runtime","exportName":"ChannelGroupContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":219,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelHeartbeatAdapter = ChannelHeartbeatAdapter;","entrypoint":"channel-runtime","exportName":"ChannelHeartbeatAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":422,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelHeartbeatAdapter = ChannelHeartbeatAdapter;","entrypoint":"channel-runtime","exportName":"ChannelHeartbeatAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":435,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelHeartbeatDeps = ChannelHeartbeatDeps;","entrypoint":"channel-runtime","exportName":"ChannelHeartbeatDeps","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":118,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelId = ChannelId;","entrypoint":"channel-runtime","exportName":"ChannelId","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":14,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelLifecycleAdapter = ChannelLifecycleAdapter;","entrypoint":"channel-runtime","exportName":"ChannelLifecycleAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":502,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelLoginWithQrStartResult = ChannelLoginWithQrStartResult;","entrypoint":"channel-runtime","exportName":"ChannelLoginWithQrStartResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":351,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelLoginWithQrWaitResult = ChannelLoginWithQrWaitResult;","entrypoint":"channel-runtime","exportName":"ChannelLoginWithQrWaitResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":356,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelLogoutContext = ChannelLogoutContext;","entrypoint":"channel-runtime","exportName":"ChannelLogoutContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":361,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelLogoutResult = ChannelLogoutResult;","entrypoint":"channel-runtime","exportName":"ChannelLogoutResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":345,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelLifecycleAdapter = ChannelLifecycleAdapter;","entrypoint":"channel-runtime","exportName":"ChannelLifecycleAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":593,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelLoginWithQrStartResult = ChannelLoginWithQrStartResult;","entrypoint":"channel-runtime","exportName":"ChannelLoginWithQrStartResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":364,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelLoginWithQrWaitResult = ChannelLoginWithQrWaitResult;","entrypoint":"channel-runtime","exportName":"ChannelLoginWithQrWaitResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":369,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelLogoutContext = ChannelLogoutContext;","entrypoint":"channel-runtime","exportName":"ChannelLogoutContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":374,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelLogoutResult = ChannelLogoutResult;","entrypoint":"channel-runtime","exportName":"ChannelLogoutResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":358,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelLogSink = ChannelLogSink;","entrypoint":"channel-runtime","exportName":"ChannelLogSink","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":212,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelMentionAdapter = ChannelMentionAdapter;","entrypoint":"channel-runtime","exportName":"ChannelMentionAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":263,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelMessageActionAdapter = ChannelMessageActionAdapter;","entrypoint":"channel-runtime","exportName":"ChannelMessageActionAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":560,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"channel-runtime","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":524,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelMessageActionAdapter = ChannelMessageActionAdapter;","entrypoint":"channel-runtime","exportName":"ChannelMessageActionAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":580,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"channel-runtime","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":544,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelMessageActionDiscoveryContext = ChannelMessageActionDiscoveryContext;","entrypoint":"channel-runtime","exportName":"ChannelMessageActionDiscoveryContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":32,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelMessageActionName = \"send\" | \"broadcast\" | \"poll\" | \"poll-vote\" | \"react\" | \"reactions\" | \"read\" | \"edit\" | \"unsend\" | \"reply\" | \"sendWithEffect\" | \"renameGroup\" | \"setGroupIcon\" | \"addParticipant\" | \"removeParticipant\" | \"leaveGroup\" | \"sendAttachment\" | \"delete\" | \"pin\" | \"unpin\" | \"list-pins\" | \"permissions\" | \"thread-create\" | \"thread-list\" | \"thread-reply\" | \"search\" | \"sticker\" | \"sticker-search\" | \"member-info\" | \"role-info\" | \"emoji-list\" | \"emoji-upload\" | \"sticker-upload\" | \"role-add\" | \"role-remove\" | \"channel-info\" | \"channel-list\" | \"channel-create\" | \"channel-edit\" | \"channel-delete\" | \"channel-move\" | \"category-create\" | \"category-edit\" | \"category-delete\" | \"topic-create\" | \"topic-edit\" | \"voice-status\" | \"event-list\" | \"event-create\" | \"timeout\" | \"kick\" | \"ban\" | \"set-profile\" | \"set-presence\" | \"download-file\" | \"upload-file\";","entrypoint":"channel-runtime","exportName":"ChannelMessageActionName","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":6,"sourcePath":"src/channels/plugins/types.ts"} {"declaration":"export type ChannelMessageCapability = \"interactive\" | \"buttons\" | \"cards\" | \"components\" | \"blocks\";","entrypoint":"channel-runtime","exportName":"ChannelMessageCapability","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":9,"sourcePath":"src/channels/plugins/message-capabilities.ts"} @@ -319,34 +324,34 @@ {"declaration":"export type ChannelOutboundPayloadHint = ChannelOutboundPayloadHint;","entrypoint":"channel-runtime","exportName":"ChannelOutboundPayloadHint","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":161,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelOutboundTargetMode = ChannelOutboundTargetMode;","entrypoint":"channel-runtime","exportName":"ChannelOutboundTargetMode","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":16,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelOutboundTargetRef = ChannelOutboundTargetRef;","entrypoint":"channel-runtime","exportName":"ChannelOutboundTargetRef","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":165,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelPairingAdapter = ChannelPairingAdapter;","entrypoint":"channel-runtime","exportName":"ChannelPairingAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":369,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelPlugin = ChannelPlugin;","entrypoint":"channel-runtime","exportName":"ChannelPlugin","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":81,"sourcePath":"src/channels/plugins/types.plugin.ts"} -{"declaration":"export type ChannelPollContext = ChannelPollContext;","entrypoint":"channel-runtime","exportName":"ChannelPollContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":591,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelPollResult = ChannelPollResult;","entrypoint":"channel-runtime","exportName":"ChannelPollResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":582,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelResolveKind = ChannelResolveKind;","entrypoint":"channel-runtime","exportName":"ChannelResolveKind","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":470,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelResolverAdapter = ChannelResolverAdapter;","entrypoint":"channel-runtime","exportName":"ChannelResolverAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":480,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelResolveResult = ChannelResolveResult;","entrypoint":"channel-runtime","exportName":"ChannelResolveResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":472,"sourcePath":"src/channels/plugins/types.adapters.ts"} -{"declaration":"export type ChannelSecurityAdapter = ChannelSecurityAdapter;","entrypoint":"channel-runtime","exportName":"ChannelSecurityAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":743,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelPairingAdapter = ChannelPairingAdapter;","entrypoint":"channel-runtime","exportName":"ChannelPairingAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":382,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelPlugin = ChannelPlugin;","entrypoint":"channel-runtime","exportName":"ChannelPlugin","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":82,"sourcePath":"src/channels/plugins/types.plugin.ts"} +{"declaration":"export type ChannelPollContext = ChannelPollContext;","entrypoint":"channel-runtime","exportName":"ChannelPollContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":618,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelPollResult = ChannelPollResult;","entrypoint":"channel-runtime","exportName":"ChannelPollResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":609,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelResolveKind = ChannelResolveKind;","entrypoint":"channel-runtime","exportName":"ChannelResolveKind","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":483,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelResolverAdapter = ChannelResolverAdapter;","entrypoint":"channel-runtime","exportName":"ChannelResolverAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":493,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelResolveResult = ChannelResolveResult;","entrypoint":"channel-runtime","exportName":"ChannelResolveResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":485,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelSecurityAdapter = ChannelSecurityAdapter;","entrypoint":"channel-runtime","exportName":"ChannelSecurityAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":884,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelSecurityContext = ChannelSecurityContext;","entrypoint":"channel-runtime","exportName":"ChannelSecurityContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":257,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelSecurityDmPolicy = ChannelSecurityDmPolicy;","entrypoint":"channel-runtime","exportName":"ChannelSecurityDmPolicy","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":248,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelSetupAdapter = ChannelSetupAdapter;","entrypoint":"channel-runtime","exportName":"ChannelSetupAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":63,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelSetupInput = ChannelSetupInput;","entrypoint":"channel-runtime","exportName":"ChannelSetupInput","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":64,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelStatusAdapter = ChannelStatusAdapter;","entrypoint":"channel-runtime","exportName":"ChannelStatusAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":218,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelStatusAdapter = ChannelStatusAdapter;","entrypoint":"channel-runtime","exportName":"ChannelStatusAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":230,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelStatusIssue = ChannelStatusIssue;","entrypoint":"channel-runtime","exportName":"ChannelStatusIssue","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":102,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelStreamingAdapter = ChannelStreamingAdapter;","entrypoint":"channel-runtime","exportName":"ChannelStreamingAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":282,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelStructuredComponents = ChannelStructuredComponents;","entrypoint":"channel-runtime","exportName":"ChannelStructuredComponents","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":291,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelThreadingAdapter = ChannelThreadingAdapter;","entrypoint":"channel-runtime","exportName":"ChannelThreadingAdapter","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":325,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelThreadingContext = ChannelThreadingContext;","entrypoint":"channel-runtime","exportName":"ChannelThreadingContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":368,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelThreadingToolContext = ChannelThreadingToolContext;","entrypoint":"channel-runtime","exportName":"ChannelThreadingToolContext","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":382,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelToolSend = ChannelToolSend;","entrypoint":"channel-runtime","exportName":"ChannelToolSend","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":553,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelToolSend = ChannelToolSend;","entrypoint":"channel-runtime","exportName":"ChannelToolSend","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":573,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChatType = ChatType;","entrypoint":"channel-runtime","exportName":"ChatType","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":1,"sourcePath":"src/channels/chat-type.ts"} {"declaration":"export type CreateTypingCallbacksParams = CreateTypingCallbacksParams;","entrypoint":"channel-runtime","exportName":"CreateTypingCallbacksParams","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":11,"sourcePath":"src/channels/typing.ts"} {"declaration":"export type HeartbeatEventPayload = HeartbeatEventPayload;","entrypoint":"channel-runtime","exportName":"HeartbeatEventPayload","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":6,"sourcePath":"src/infra/heartbeat-events.ts"} {"declaration":"export type HeartbeatIndicatorType = HeartbeatIndicatorType;","entrypoint":"channel-runtime","exportName":"HeartbeatIndicatorType","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":4,"sourcePath":"src/infra/heartbeat-events.ts"} {"declaration":"export type NormalizedPollInput = NormalizedPollInput;","entrypoint":"channel-runtime","exportName":"NormalizedPollInput","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":17,"sourcePath":"src/polls.ts"} {"declaration":"export type PollInput = PollInput;","entrypoint":"channel-runtime","exportName":"PollInput","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":1,"sourcePath":"src/polls.ts"} -{"declaration":"export type ReplyPrefixContextBundle = ReplyPrefixContextBundle;","entrypoint":"channel-runtime","exportName":"ReplyPrefixContextBundle","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":12,"sourcePath":"src/channels/reply-prefix.ts"} -{"declaration":"export type ReplyPrefixOptions = ReplyPrefixOptions;","entrypoint":"channel-runtime","exportName":"ReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":20,"sourcePath":"src/channels/reply-prefix.ts"} +{"declaration":"export type ReplyPrefixContextBundle = ReplyPrefixContextBundle;","entrypoint":"channel-runtime","exportName":"ReplyPrefixContextBundle","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":11,"sourcePath":"src/channels/reply-prefix.ts"} +{"declaration":"export type ReplyPrefixOptions = ReplyPrefixOptions;","entrypoint":"channel-runtime","exportName":"ReplyPrefixOptions","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":18,"sourcePath":"src/channels/reply-prefix.ts"} {"declaration":"export type ResolvedHeartbeatVisibility = ResolvedHeartbeatVisibility;","entrypoint":"channel-runtime","exportName":"ResolvedHeartbeatVisibility","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":5,"sourcePath":"src/infra/heartbeat-visibility.ts"} {"declaration":"export type TransportReadyResult = TransportReadyResult;","entrypoint":"channel-runtime","exportName":"TransportReadyResult","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":5,"sourcePath":"src/infra/transport-ready.ts"} {"declaration":"export type TypingCallbacks = TypingCallbacks;","entrypoint":"channel-runtime","exportName":"TypingCallbacks","importSpecifier":"openclaw/plugin-sdk/channel-runtime","kind":"type","recordType":"export","sourceLine":4,"sourcePath":"src/channels/typing.ts"} @@ -355,62 +360,61 @@ {"declaration":"export function createOptionalChannelSetupAdapter(params: OptionalChannelSetupParams): ChannelSetupAdapter;","entrypoint":"channel-setup","exportName":"createOptionalChannelSetupAdapter","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":22,"sourcePath":"src/plugin-sdk/optional-channel-setup.ts"} {"declaration":"export function createOptionalChannelSetupSurface(params: OptionalChannelSetupParams): OptionalChannelSetupSurface;","entrypoint":"channel-setup","exportName":"createOptionalChannelSetupSurface","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":40,"sourcePath":"src/plugin-sdk/channel-setup.ts"} {"declaration":"export function createOptionalChannelSetupWizard(params: OptionalChannelSetupParams): ChannelSetupWizard;","entrypoint":"channel-setup","exportName":"createOptionalChannelSetupWizard","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":35,"sourcePath":"src/plugin-sdk/optional-channel-setup.ts"} -{"declaration":"export function createTopLevelChannelDmPolicy(params: { label: string; channel: string; policyKey: string; allowFromKey: string; getCurrent: (cfg: OpenClawConfig) => DmPolicy; promptAllowFrom?: ((params: { cfg: OpenClawConfig; prompter: WizardPrompter; accountId?: string | undefined; }) => Promise<...>) | undefined; getAllowFrom?: ((cfg: OpenClawConfig) => (string | number)[] | undefined) | undefined; }): ChannelSetupDmPolicy;","entrypoint":"channel-setup","exportName":"createTopLevelChannelDmPolicy","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":411,"sourcePath":"src/channels/plugins/setup-wizard-helpers.ts"} +{"declaration":"export function createTopLevelChannelDmPolicy(params: { label: string; channel: string; policyKey: string; allowFromKey: string; getCurrent: (cfg: OpenClawConfig) => DmPolicy; promptAllowFrom?: ((params: { cfg: OpenClawConfig; prompter: WizardPrompter; accountId?: string | undefined; }) => Promise<...>) | undefined; getAllowFrom?: ((cfg: OpenClawConfig) => (string | number)[] | undefined) | undefined; }): ChannelSetupDmPolicy;","entrypoint":"channel-setup","exportName":"createTopLevelChannelDmPolicy","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":413,"sourcePath":"src/channels/plugins/setup-wizard-helpers.ts"} {"declaration":"export function formatDocsLink(path: string, label?: string | undefined, opts?: { fallback?: string | undefined; force?: boolean | undefined; } | undefined): string;","entrypoint":"channel-setup","exportName":"formatDocsLink","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":9,"sourcePath":"src/terminal/links.ts"} -{"declaration":"export function setSetupChannelEnabled(cfg: OpenClawConfig, channel: string, enabled: boolean): OpenClawConfig;","entrypoint":"channel-setup","exportName":"setSetupChannelEnabled","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":875,"sourcePath":"src/channels/plugins/setup-wizard-helpers.ts"} +{"declaration":"export function setSetupChannelEnabled(cfg: OpenClawConfig, channel: string, enabled: boolean): OpenClawConfig;","entrypoint":"channel-setup","exportName":"setSetupChannelEnabled","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":882,"sourcePath":"src/channels/plugins/setup-wizard-helpers.ts"} {"declaration":"export function splitSetupEntries(raw: string): string[];","entrypoint":"channel-setup","exportName":"splitSetupEntries","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"function","recordType":"export","sourceLine":80,"sourcePath":"src/channels/plugins/setup-wizard-helpers.ts"} {"declaration":"export const DEFAULT_ACCOUNT_ID: \"default\";","entrypoint":"channel-setup","exportName":"DEFAULT_ACCOUNT_ID","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"const","recordType":"export","sourceLine":3,"sourcePath":"src/routing/account-id.ts"} {"declaration":"export type ChannelSetupAdapter = ChannelSetupAdapter;","entrypoint":"channel-setup","exportName":"ChannelSetupAdapter","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"type","recordType":"export","sourceLine":63,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type ChannelSetupDmPolicy = ChannelSetupDmPolicy;","entrypoint":"channel-setup","exportName":"ChannelSetupDmPolicy","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"type","recordType":"export","sourceLine":93,"sourcePath":"src/channels/plugins/setup-wizard-types.ts"} {"declaration":"export type ChannelSetupInput = ChannelSetupInput;","entrypoint":"channel-setup","exportName":"ChannelSetupInput","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"type","recordType":"export","sourceLine":64,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelSetupWizard = ChannelSetupWizard;","entrypoint":"channel-setup","exportName":"ChannelSetupWizard","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"type","recordType":"export","sourceLine":247,"sourcePath":"src/channels/plugins/setup-wizard.ts"} +{"declaration":"export type ChannelSetupWizard = ChannelSetupWizard;","entrypoint":"channel-setup","exportName":"ChannelSetupWizard","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"type","recordType":"export","sourceLine":253,"sourcePath":"src/channels/plugins/setup-wizard.ts"} {"declaration":"export type OptionalChannelSetupSurface = OptionalChannelSetupSurface;","entrypoint":"channel-setup","exportName":"OptionalChannelSetupSurface","importSpecifier":"openclaw/plugin-sdk/channel-setup","kind":"type","recordType":"export","sourceLine":29,"sourcePath":"src/plugin-sdk/channel-setup.ts"} {"category":"channel","entrypoint":"command-auth","importSpecifier":"openclaw/plugin-sdk/command-auth","recordType":"module","sourceLine":1,"sourcePath":"src/plugin-sdk/command-auth.ts"} -{"declaration":"export function buildCommandsMessage(cfg?: OpenClawConfig | undefined, skillCommands?: SkillCommandSpec[] | undefined, options?: CommandsMessageOptions | undefined): string;","entrypoint":"command-auth","exportName":"buildCommandsMessage","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":1076,"sourcePath":"src/auto-reply/status.ts"} -{"declaration":"export function buildCommandsMessagePaginated(cfg?: OpenClawConfig | undefined, skillCommands?: SkillCommandSpec[] | undefined, options?: CommandsMessageOptions | undefined): CommandsMessageResult;","entrypoint":"command-auth","exportName":"buildCommandsMessagePaginated","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":1085,"sourcePath":"src/auto-reply/status.ts"} -{"declaration":"export function buildCommandsPaginationKeyboard(currentPage: number, totalPages: number, agentId?: string | undefined): { text: string; callback_data: string; }[][];","entrypoint":"command-auth","exportName":"buildCommandsPaginationKeyboard","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":175,"sourcePath":"src/auto-reply/reply/commands-info.ts"} -{"declaration":"export function buildCommandText(commandName: string, args?: string | undefined): string;","entrypoint":"command-auth","exportName":"buildCommandText","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":199,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function buildCommandTextFromArgs(command: ChatCommandDefinition, args?: CommandArgs | undefined): string;","entrypoint":"command-auth","exportName":"buildCommandTextFromArgs","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":291,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function buildHelpMessage(cfg?: OpenClawConfig | undefined): string;","entrypoint":"command-auth","exportName":"buildHelpMessage","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":871,"sourcePath":"src/auto-reply/status.ts"} -{"declaration":"export function buildModelsProviderData(cfg: OpenClawConfig, agentId?: string | undefined): Promise;","entrypoint":"command-auth","exportName":"buildModelsProviderData","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":39,"sourcePath":"src/auto-reply/reply/commands-models.ts"} +{"declaration":"export function buildCommandsMessage(cfg?: OpenClawConfig | undefined, skillCommands?: SkillCommandSpec[] | undefined, options?: CommandsMessageOptions | undefined): string;","entrypoint":"command-auth","exportName":"buildCommandsMessage","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":1077,"sourcePath":"src/auto-reply/status.ts"} +{"declaration":"export function buildCommandsMessagePaginated(cfg?: OpenClawConfig | undefined, skillCommands?: SkillCommandSpec[] | undefined, options?: CommandsMessageOptions | undefined): CommandsMessageResult;","entrypoint":"command-auth","exportName":"buildCommandsMessagePaginated","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":1086,"sourcePath":"src/auto-reply/status.ts"} +{"declaration":"export function buildCommandText(commandName: string, args?: string | undefined): string;","entrypoint":"command-auth","exportName":"buildCommandText","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":191,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function buildCommandTextFromArgs(command: ChatCommandDefinition, args?: CommandArgs | undefined): string;","entrypoint":"command-auth","exportName":"buildCommandTextFromArgs","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":283,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function buildHelpMessage(cfg?: OpenClawConfig | undefined): string;","entrypoint":"command-auth","exportName":"buildHelpMessage","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":872,"sourcePath":"src/auto-reply/status.ts"} +{"declaration":"export function buildModelsProviderData(cfg: OpenClawConfig, agentId?: string | undefined): Promise;","entrypoint":"command-auth","exportName":"buildModelsProviderData","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":33,"sourcePath":"src/auto-reply/reply/commands-models.ts"} {"declaration":"export function createPreCryptoDirectDmAuthorizer(params: { resolveAccess: (senderId: string) => Promise>; issuePairingChallenge?: ((params: { ...; }) => Promise<...>) | undefined; onBlocked?: ((params: { ...; }) => void) | undefined; }): (input: { ...; }) => Promise<...>;","entrypoint":"command-auth","exportName":"createPreCryptoDirectDmAuthorizer","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":105,"sourcePath":"src/plugin-sdk/direct-dm.ts"} -{"declaration":"export function findCommandByNativeName(name: string, provider?: string | undefined): ChatCommandDefinition | undefined;","entrypoint":"command-auth","exportName":"findCommandByNativeName","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":187,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function formatModelsAvailableHeader(params: { provider: string; total: number; cfg: OpenClawConfig; agentDir?: string | undefined; sessionEntry?: SessionEntry | undefined; }): string;","entrypoint":"command-auth","exportName":"formatModelsAvailableHeader","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":215,"sourcePath":"src/auto-reply/reply/commands-models.ts"} -{"declaration":"export function getCommandDetection(_cfg?: OpenClawConfig | undefined): CommandDetection;","entrypoint":"command-auth","exportName":"getCommandDetection","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":440,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function findCommandByNativeName(name: string, provider?: string | undefined): ChatCommandDefinition | undefined;","entrypoint":"command-auth","exportName":"findCommandByNativeName","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":179,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function formatModelsAvailableHeader(params: { provider: string; total: number; cfg: OpenClawConfig; agentDir?: string | undefined; sessionEntry?: SessionEntry | undefined; }): string;","entrypoint":"command-auth","exportName":"formatModelsAvailableHeader","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":209,"sourcePath":"src/auto-reply/reply/commands-models.ts"} +{"declaration":"export function getCommandDetection(_cfg?: OpenClawConfig | undefined): CommandDetection;","entrypoint":"command-auth","exportName":"getCommandDetection","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":432,"sourcePath":"src/auto-reply/commands-registry.ts"} {"declaration":"export function hasControlCommand(text?: string | undefined, cfg?: OpenClawConfig | undefined, options?: CommandNormalizeOptions | undefined): boolean;","entrypoint":"command-auth","exportName":"hasControlCommand","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":11,"sourcePath":"src/auto-reply/command-detection.ts"} {"declaration":"export function hasInlineCommandTokens(text?: string | undefined): boolean;","entrypoint":"command-auth","exportName":"hasInlineCommandTokens","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":80,"sourcePath":"src/auto-reply/command-detection.ts"} -{"declaration":"export function isCommandEnabled(cfg: OpenClawConfig, commandKey: string): boolean;","entrypoint":"command-auth","exportName":"isCommandEnabled","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":98,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function isCommandMessage(raw: string): boolean;","entrypoint":"command-auth","exportName":"isCommandMessage","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":435,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function isCommandEnabled(cfg: OpenClawConfig, commandKey: string): boolean;","entrypoint":"command-auth","exportName":"isCommandEnabled","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":99,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function isCommandMessage(raw: string): boolean;","entrypoint":"command-auth","exportName":"isCommandMessage","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":427,"sourcePath":"src/auto-reply/commands-registry.ts"} {"declaration":"export function isControlCommandMessage(text?: string | undefined, cfg?: OpenClawConfig | undefined, options?: CommandNormalizeOptions | undefined): boolean;","entrypoint":"command-auth","exportName":"isControlCommandMessage","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":53,"sourcePath":"src/auto-reply/command-detection.ts"} -{"declaration":"export function isNativeCommandSurface(surface?: string | undefined): boolean;","entrypoint":"command-auth","exportName":"isNativeCommandSurface","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":521,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function listChatCommands(params?: { skillCommands?: SkillCommandSpec[] | undefined; } | undefined): ChatCommandDefinition[];","entrypoint":"command-auth","exportName":"listChatCommands","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":88,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function listChatCommandsForConfig(cfg: OpenClawConfig, params?: { skillCommands?: SkillCommandSpec[] | undefined; } | undefined): ChatCommandDefinition[];","entrypoint":"command-auth","exportName":"listChatCommandsForConfig","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":117,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function listNativeCommandSpecs(params?: { skillCommands?: SkillCommandSpec[] | undefined; provider?: string | undefined; } | undefined): NativeCommandSpec[];","entrypoint":"command-auth","exportName":"listNativeCommandSpecs","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":170,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function listNativeCommandSpecsForConfig(cfg: OpenClawConfig, params?: { skillCommands?: SkillCommandSpec[] | undefined; provider?: string | undefined; } | undefined): NativeCommandSpec[];","entrypoint":"command-auth","exportName":"listNativeCommandSpecsForConfig","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":180,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function isNativeCommandSurface(surface?: string | undefined): boolean;","entrypoint":"command-auth","exportName":"isNativeCommandSurface","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":513,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function listChatCommands(params?: { skillCommands?: SkillCommandSpec[] | undefined; } | undefined): ChatCommandDefinition[];","entrypoint":"command-auth","exportName":"listChatCommands","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":89,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function listChatCommandsForConfig(cfg: OpenClawConfig, params?: { skillCommands?: SkillCommandSpec[] | undefined; } | undefined): ChatCommandDefinition[];","entrypoint":"command-auth","exportName":"listChatCommandsForConfig","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":118,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function listNativeCommandSpecs(params?: { skillCommands?: SkillCommandSpec[] | undefined; provider?: string | undefined; } | undefined): NativeCommandSpec[];","entrypoint":"command-auth","exportName":"listNativeCommandSpecs","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":162,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function listNativeCommandSpecsForConfig(cfg: OpenClawConfig, params?: { skillCommands?: SkillCommandSpec[] | undefined; provider?: string | undefined; } | undefined): NativeCommandSpec[];","entrypoint":"command-auth","exportName":"listNativeCommandSpecsForConfig","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":172,"sourcePath":"src/auto-reply/commands-registry.ts"} {"declaration":"export function listReservedChatSlashCommandNames(extraNames?: string[]): Set;","entrypoint":"command-auth","exportName":"listReservedChatSlashCommandNames","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":4,"sourcePath":"src/auto-reply/skill-commands-base.ts"} -{"declaration":"export function listSkillCommandsForAgents(params: { cfg: OpenClawConfig; agentIds?: string[] | undefined; }): SkillCommandSpec[];","entrypoint":"command-auth","exportName":"listSkillCommandsForAgents","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":46,"sourcePath":"src/auto-reply/skill-commands.ts"} -{"declaration":"export function listSkillCommandsForWorkspace(params: { workspaceDir: string; cfg: OpenClawConfig; skillFilter?: string[] | undefined; }): SkillCommandSpec[];","entrypoint":"command-auth","exportName":"listSkillCommandsForWorkspace","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":17,"sourcePath":"src/auto-reply/skill-commands.ts"} -{"declaration":"export function maybeResolveTextAlias(raw: string, cfg?: OpenClawConfig | undefined): string | null;","entrypoint":"command-auth","exportName":"maybeResolveTextAlias","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":473,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function normalizeCommandBody(raw: string, options?: CommandNormalizeOptions | undefined): string;","entrypoint":"command-auth","exportName":"normalizeCommandBody","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":384,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function parseCommandArgs(command: ChatCommandDefinition, raw?: string | undefined): CommandArgs | undefined;","entrypoint":"command-auth","exportName":"parseCommandArgs","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":254,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function resolveCommandArgChoices(params: { command: ChatCommandDefinition; arg: CommandArgDefinition; cfg?: OpenClawConfig | undefined; provider?: string | undefined; model?: string | undefined; }): ResolvedCommandArgChoice[];","entrypoint":"command-auth","exportName":"resolveCommandArgChoices","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":316,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function resolveCommandArgMenu(params: { command: ChatCommandDefinition; args?: CommandArgs | undefined; cfg?: OpenClawConfig | undefined; }): { arg: CommandArgDefinition; choices: ResolvedCommandArgChoice[]; title?: string | undefined; } | null;","entrypoint":"command-auth","exportName":"resolveCommandArgMenu","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":346,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function resolveCommandAuthorization(params: { ctx: MsgContext; cfg: OpenClawConfig; commandAuthorized: boolean; }): CommandAuthorization;","entrypoint":"command-auth","exportName":"resolveCommandAuthorization","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":463,"sourcePath":"src/auto-reply/command-auth.ts"} +{"declaration":"export function listSkillCommandsForAgents(params: { cfg: OpenClawConfig; agentIds?: string[] | undefined; }): SkillCommandSpec[];","entrypoint":"command-auth","exportName":"listSkillCommandsForAgents","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":48,"sourcePath":"src/auto-reply/skill-commands.ts"} +{"declaration":"export function listSkillCommandsForWorkspace(params: { workspaceDir: string; cfg: OpenClawConfig; agentId?: string | undefined; skillFilter?: string[] | undefined; }): SkillCommandSpec[];","entrypoint":"command-auth","exportName":"listSkillCommandsForWorkspace","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":17,"sourcePath":"src/auto-reply/skill-commands.ts"} +{"declaration":"export function maybeResolveTextAlias(raw: string, cfg?: OpenClawConfig | undefined): string | null;","entrypoint":"command-auth","exportName":"maybeResolveTextAlias","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":465,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function normalizeCommandBody(raw: string, options?: CommandNormalizeOptions | undefined): string;","entrypoint":"command-auth","exportName":"normalizeCommandBody","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":376,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function parseCommandArgs(command: ChatCommandDefinition, raw?: string | undefined): CommandArgs | undefined;","entrypoint":"command-auth","exportName":"parseCommandArgs","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":246,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function resolveCommandArgChoices(params: { command: ChatCommandDefinition; arg: CommandArgDefinition; cfg?: OpenClawConfig | undefined; provider?: string | undefined; model?: string | undefined; }): ResolvedCommandArgChoice[];","entrypoint":"command-auth","exportName":"resolveCommandArgChoices","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":308,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function resolveCommandArgMenu(params: { command: ChatCommandDefinition; args?: CommandArgs | undefined; cfg?: OpenClawConfig | undefined; }): { arg: CommandArgDefinition; choices: ResolvedCommandArgChoice[]; title?: string | undefined; } | null;","entrypoint":"command-auth","exportName":"resolveCommandArgMenu","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":338,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function resolveCommandAuthorization(params: { ctx: MsgContext; cfg: OpenClawConfig; commandAuthorized: boolean; }): CommandAuthorization;","entrypoint":"command-auth","exportName":"resolveCommandAuthorization","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":455,"sourcePath":"src/auto-reply/command-auth.ts"} {"declaration":"export function resolveCommandAuthorizedFromAuthorizers(params: { useAccessGroups: boolean; authorizers: CommandAuthorizer[]; modeWhenAccessGroupsOff?: CommandGatingModeWhenAccessGroupsOff | undefined; }): boolean;","entrypoint":"command-auth","exportName":"resolveCommandAuthorizedFromAuthorizers","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":8,"sourcePath":"src/channels/command-gating.ts"} {"declaration":"export function resolveControlCommandGate(params: { useAccessGroups: boolean; authorizers: CommandAuthorizer[]; allowTextCommands: boolean; hasControlCommand: boolean; modeWhenAccessGroupsOff?: CommandGatingModeWhenAccessGroupsOff | undefined; }): { ...; };","entrypoint":"command-auth","exportName":"resolveControlCommandGate","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":31,"sourcePath":"src/channels/command-gating.ts"} -{"declaration":"export function resolveDirectDmAuthorizationOutcome(params: { isGroup: boolean; dmPolicy: string; senderAllowedForCommands: boolean; }): \"disabled\" | \"unauthorized\" | \"allowed\";","entrypoint":"command-auth","exportName":"resolveDirectDmAuthorizationOutcome","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":122,"sourcePath":"src/plugin-sdk/command-auth.ts"} +{"declaration":"export function resolveDirectDmAuthorizationOutcome(params: { isGroup: boolean; dmPolicy: string; senderAllowedForCommands: boolean; }): \"disabled\" | \"unauthorized\" | \"allowed\";","entrypoint":"command-auth","exportName":"resolveDirectDmAuthorizationOutcome","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":121,"sourcePath":"src/plugin-sdk/command-auth.ts"} {"declaration":"export function resolveDualTextControlCommandGate(params: { useAccessGroups: boolean; primaryConfigured: boolean; primaryAllowed: boolean; secondaryConfigured: boolean; secondaryAllowed: boolean; hasControlCommand: boolean; modeWhenAccessGroupsOff?: CommandGatingModeWhenAccessGroupsOff | undefined; }): { ...; };","entrypoint":"command-auth","exportName":"resolveDualTextControlCommandGate","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":47,"sourcePath":"src/channels/command-gating.ts"} {"declaration":"export function resolveInboundDirectDmAccessWithRuntime(params: { cfg: OpenClawConfig; channel: ChannelId; accountId: string; dmPolicy?: string | null | undefined; allowFrom?: (string | number)[] | null | undefined; senderId: string; ... 4 more ...; readStoreAllowFrom?: ((provider: ChannelId, accountId: string) => Promise<...>) | undefined; }): Promise<...>;","entrypoint":"command-auth","exportName":"resolveInboundDirectDmAccessWithRuntime","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":35,"sourcePath":"src/plugin-sdk/direct-dm.ts"} -{"declaration":"export function resolveModelsCommandReply(params: { cfg: OpenClawConfig; commandBodyNormalized: string; surface?: string | undefined; currentModel?: string | undefined; agentId?: string | undefined; agentDir?: string | undefined; sessionEntry?: SessionEntry | undefined; }): Promise<...>;","entrypoint":"command-auth","exportName":"resolveModelsCommandReply","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":231,"sourcePath":"src/auto-reply/reply/commands-models.ts"} +{"declaration":"export function resolveModelsCommandReply(params: { cfg: OpenClawConfig; commandBodyNormalized: string; surface?: string | undefined; currentModel?: string | undefined; agentId?: string | undefined; agentDir?: string | undefined; sessionEntry?: SessionEntry | undefined; }): Promise<...>;","entrypoint":"command-auth","exportName":"resolveModelsCommandReply","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":225,"sourcePath":"src/auto-reply/reply/commands-models.ts"} {"declaration":"export function resolveNativeCommandSessionTargets(params: ResolveNativeCommandSessionTargetsParams): { sessionKey: string; commandTargetSessionKey: string; };","entrypoint":"command-auth","exportName":"resolveNativeCommandSessionTargets","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":10,"sourcePath":"src/channels/native-command-session-targets.ts"} -{"declaration":"export function resolveSenderCommandAuthorization(params: ResolveSenderCommandAuthorizationParams): Promise<{ shouldComputeAuth: boolean; effectiveAllowFrom: string[]; effectiveGroupAllowFrom: string[]; senderAllowedForCommands: boolean; commandAuthorized: boolean | undefined; }>;","entrypoint":"command-auth","exportName":"resolveSenderCommandAuthorization","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":151,"sourcePath":"src/plugin-sdk/command-auth.ts"} -{"declaration":"export function resolveSenderCommandAuthorizationWithRuntime(params: ResolveSenderCommandAuthorizationWithRuntimeParams): Promise<{ shouldComputeAuth: boolean; effectiveAllowFrom: string[]; effectiveGroupAllowFrom: string[]; senderAllowedForCommands: boolean; commandAuthorized: boolean | undefined; }>;","entrypoint":"command-auth","exportName":"resolveSenderCommandAuthorizationWithRuntime","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":140,"sourcePath":"src/plugin-sdk/command-auth.ts"} +{"declaration":"export function resolveSenderCommandAuthorization(params: ResolveSenderCommandAuthorizationParams): Promise<{ shouldComputeAuth: boolean; effectiveAllowFrom: string[]; effectiveGroupAllowFrom: string[]; senderAllowedForCommands: boolean; commandAuthorized: boolean | undefined; }>;","entrypoint":"command-auth","exportName":"resolveSenderCommandAuthorization","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":150,"sourcePath":"src/plugin-sdk/command-auth.ts"} +{"declaration":"export function resolveSenderCommandAuthorizationWithRuntime(params: ResolveSenderCommandAuthorizationWithRuntimeParams): Promise<{ shouldComputeAuth: boolean; effectiveAllowFrom: string[]; effectiveGroupAllowFrom: string[]; senderAllowedForCommands: boolean; commandAuthorized: boolean | undefined; }>;","entrypoint":"command-auth","exportName":"resolveSenderCommandAuthorizationWithRuntime","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":139,"sourcePath":"src/plugin-sdk/command-auth.ts"} {"declaration":"export function resolveSkillCommandInvocation(params: { commandBodyNormalized: string; skillCommands: SkillCommandSpec[]; }): { command: SkillCommandSpec; args?: string | undefined; } | null;","entrypoint":"command-auth","exportName":"resolveSkillCommandInvocation","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":58,"sourcePath":"src/auto-reply/skill-commands-base.ts"} {"declaration":"export function resolveStoredModelOverride(params: { sessionEntry?: SessionEntry | undefined; sessionStore?: Record | undefined; sessionKey?: string | undefined; parentSessionKey?: string | undefined; defaultProvider: string; }): StoredModelOverride | null;","entrypoint":"command-auth","exportName":"resolveStoredModelOverride","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":145,"sourcePath":"src/auto-reply/reply/model-selection.ts"} -{"declaration":"export function resolveTextCommand(raw: string, cfg?: OpenClawConfig | undefined): { command: ChatCommandDefinition; args?: string | undefined; } | null;","entrypoint":"command-auth","exportName":"resolveTextCommand","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":494,"sourcePath":"src/auto-reply/commands-registry.ts"} -{"declaration":"export function serializeCommandArgs(command: ChatCommandDefinition, args?: CommandArgs | undefined): string | undefined;","entrypoint":"command-auth","exportName":"serializeCommandArgs","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":271,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function resolveTextCommand(raw: string, cfg?: OpenClawConfig | undefined): { command: ChatCommandDefinition; args?: string | undefined; } | null;","entrypoint":"command-auth","exportName":"resolveTextCommand","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":486,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function serializeCommandArgs(command: ChatCommandDefinition, args?: CommandArgs | undefined): string | undefined;","entrypoint":"command-auth","exportName":"serializeCommandArgs","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":263,"sourcePath":"src/auto-reply/commands-registry.ts"} {"declaration":"export function shouldComputeCommandAuthorized(text?: string | undefined, cfg?: OpenClawConfig | undefined, options?: CommandNormalizeOptions | undefined): boolean;","entrypoint":"command-auth","exportName":"shouldComputeCommandAuthorized","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":88,"sourcePath":"src/auto-reply/command-detection.ts"} -{"declaration":"export function shouldHandleTextCommands(params: ShouldHandleTextCommandsParams): boolean;","entrypoint":"command-auth","exportName":"shouldHandleTextCommands","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":528,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export function shouldHandleTextCommands(params: ShouldHandleTextCommandsParams): boolean;","entrypoint":"command-auth","exportName":"shouldHandleTextCommands","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"function","recordType":"export","sourceLine":520,"sourcePath":"src/auto-reply/commands-registry.ts"} {"declaration":"export type ChatCommandDefinition = ChatCommandDefinition;","entrypoint":"command-auth","exportName":"ChatCommandDefinition","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":53,"sourcePath":"src/auto-reply/commands-registry.types.ts"} {"declaration":"export type CommandArgChoiceContext = CommandArgChoiceContext;","entrypoint":"command-auth","exportName":"CommandArgChoiceContext","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":16,"sourcePath":"src/auto-reply/commands-registry.types.ts"} {"declaration":"export type CommandArgDefinition = CommandArgDefinition;","entrypoint":"command-auth","exportName":"CommandArgDefinition","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":28,"sourcePath":"src/auto-reply/commands-registry.types.ts"} @@ -419,20 +423,20 @@ {"declaration":"export type CommandArgsParsing = CommandArgsParsing;","entrypoint":"command-auth","exportName":"CommandArgsParsing","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":51,"sourcePath":"src/auto-reply/commands-registry.types.ts"} {"declaration":"export type CommandArgValues = CommandArgValues;","entrypoint":"command-auth","exportName":"CommandArgValues","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":44,"sourcePath":"src/auto-reply/commands-registry.types.ts"} {"declaration":"export type CommandAuthorization = CommandAuthorization;","entrypoint":"command-auth","exportName":"CommandAuthorization","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":13,"sourcePath":"src/auto-reply/command-auth.ts"} -{"declaration":"export type CommandAuthorizationRuntime = CommandAuthorizationRuntime;","entrypoint":"command-auth","exportName":"CommandAuthorizationRuntime","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":106,"sourcePath":"src/plugin-sdk/command-auth.ts"} +{"declaration":"export type CommandAuthorizationRuntime = CommandAuthorizationRuntime;","entrypoint":"command-auth","exportName":"CommandAuthorizationRuntime","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":105,"sourcePath":"src/plugin-sdk/command-auth.ts"} {"declaration":"export type CommandAuthorizer = CommandAuthorizer;","entrypoint":"command-auth","exportName":"CommandAuthorizer","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":1,"sourcePath":"src/channels/command-gating.ts"} {"declaration":"export type CommandDetection = CommandDetection;","entrypoint":"command-auth","exportName":"CommandDetection","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":78,"sourcePath":"src/auto-reply/commands-registry.types.ts"} {"declaration":"export type CommandGatingModeWhenAccessGroupsOff = CommandGatingModeWhenAccessGroupsOff;","entrypoint":"command-auth","exportName":"CommandGatingModeWhenAccessGroupsOff","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":6,"sourcePath":"src/channels/command-gating.ts"} {"declaration":"export type CommandNormalizeOptions = CommandNormalizeOptions;","entrypoint":"command-auth","exportName":"CommandNormalizeOptions","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":74,"sourcePath":"src/auto-reply/commands-registry.types.ts"} {"declaration":"export type CommandScope = CommandScope;","entrypoint":"command-auth","exportName":"CommandScope","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":3,"sourcePath":"src/auto-reply/commands-registry.types.ts"} {"declaration":"export type DirectDmCommandAuthorizationRuntime = DirectDmCommandAuthorizationRuntime;","entrypoint":"command-auth","exportName":"DirectDmCommandAuthorizationRuntime","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":13,"sourcePath":"src/plugin-sdk/direct-dm.ts"} -{"declaration":"export type ModelsProviderData = ModelsProviderData;","entrypoint":"command-auth","exportName":"ModelsProviderData","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":27,"sourcePath":"src/auto-reply/reply/commands-models.ts"} +{"declaration":"export type ModelsProviderData = ModelsProviderData;","entrypoint":"command-auth","exportName":"ModelsProviderData","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":21,"sourcePath":"src/auto-reply/reply/commands-models.ts"} {"declaration":"export type NativeCommandSpec = NativeCommandSpec;","entrypoint":"command-auth","exportName":"NativeCommandSpec","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":67,"sourcePath":"src/auto-reply/commands-registry.types.ts"} -{"declaration":"export type ResolvedCommandArgChoice = ResolvedCommandArgChoice;","entrypoint":"command-auth","exportName":"ResolvedCommandArgChoice","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":314,"sourcePath":"src/auto-reply/commands-registry.ts"} +{"declaration":"export type ResolvedCommandArgChoice = ResolvedCommandArgChoice;","entrypoint":"command-auth","exportName":"ResolvedCommandArgChoice","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":306,"sourcePath":"src/auto-reply/commands-registry.ts"} {"declaration":"export type ResolvedInboundDirectDmAccess = ResolvedInboundDirectDmAccess;","entrypoint":"command-auth","exportName":"ResolvedInboundDirectDmAccess","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":22,"sourcePath":"src/plugin-sdk/direct-dm.ts"} {"declaration":"export type ResolveNativeCommandSessionTargetsParams = ResolveNativeCommandSessionTargetsParams;","entrypoint":"command-auth","exportName":"ResolveNativeCommandSessionTargetsParams","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":1,"sourcePath":"src/channels/native-command-session-targets.ts"} -{"declaration":"export type ResolveSenderCommandAuthorizationParams = ResolveSenderCommandAuthorizationParams;","entrypoint":"command-auth","exportName":"ResolveSenderCommandAuthorizationParams","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":89,"sourcePath":"src/plugin-sdk/command-auth.ts"} -{"declaration":"export type ResolveSenderCommandAuthorizationWithRuntimeParams = ResolveSenderCommandAuthorizationWithRuntimeParams;","entrypoint":"command-auth","exportName":"ResolveSenderCommandAuthorizationWithRuntimeParams","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":114,"sourcePath":"src/plugin-sdk/command-auth.ts"} +{"declaration":"export type ResolveSenderCommandAuthorizationParams = ResolveSenderCommandAuthorizationParams;","entrypoint":"command-auth","exportName":"ResolveSenderCommandAuthorizationParams","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":88,"sourcePath":"src/plugin-sdk/command-auth.ts"} +{"declaration":"export type ResolveSenderCommandAuthorizationWithRuntimeParams = ResolveSenderCommandAuthorizationWithRuntimeParams;","entrypoint":"command-auth","exportName":"ResolveSenderCommandAuthorizationWithRuntimeParams","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":113,"sourcePath":"src/plugin-sdk/command-auth.ts"} {"declaration":"export type ShouldHandleTextCommandsParams = ShouldHandleTextCommandsParams;","entrypoint":"command-auth","exportName":"ShouldHandleTextCommandsParams","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":83,"sourcePath":"src/auto-reply/commands-registry.types.ts"} {"declaration":"export type SkillCommandSpec = SkillCommandSpec;","entrypoint":"command-auth","exportName":"SkillCommandSpec","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":51,"sourcePath":"src/agents/skills/types.ts"} {"declaration":"export type StoredModelOverride = StoredModelOverride;","entrypoint":"command-auth","exportName":"StoredModelOverride","importSpecifier":"openclaw/plugin-sdk/command-auth","kind":"type","recordType":"export","sourceLine":124,"sourcePath":"src/auto-reply/reply/model-selection.ts"} @@ -440,18 +444,18 @@ {"declaration":"export function applyAccountNameToChannelSection(params: { cfg: OpenClawConfig; channelKey: string; accountId: string; name?: string | undefined; alwaysUseAccounts?: boolean | undefined; }): OpenClawConfig;","entrypoint":"core","exportName":"applyAccountNameToChannelSection","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":34,"sourcePath":"src/channels/plugins/setup-helpers.ts"} {"declaration":"export function buildAgentSessionKey(params: { agentId: string; channel: string; accountId?: string | null | undefined; peer?: RoutePeer | null | undefined; dmScope?: \"main\" | \"per-peer\" | \"per-channel-peer\" | \"per-account-channel-peer\" | undefined; identityLinks?: Record<...> | undefined; }): string;","entrypoint":"core","exportName":"buildAgentSessionKey","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":92,"sourcePath":"src/routing/resolve-route.ts"} {"declaration":"export function buildChannelConfigSchema(schema: ZodType>, options?: BuildChannelConfigSchemaOptions | undefined): ChannelConfigSchema;","entrypoint":"core","exportName":"buildChannelConfigSchema","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":76,"sourcePath":"src/channels/plugins/config-schema.ts"} -{"declaration":"export function buildChannelOutboundSessionRoute(params: { cfg: OpenClawConfig; agentId: string; channel: string; accountId?: string | null | undefined; peer: { kind: \"direct\" | \"group\" | \"channel\"; id: string; }; chatType: \"direct\" | \"group\" | \"channel\"; from: string; to: string; threadId?: string | ... 1 more ... | undefined; }): ChannelOutboundSessionRoute;","entrypoint":"core","exportName":"buildChannelOutboundSessionRoute","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":194,"sourcePath":"src/plugin-sdk/core.ts"} +{"declaration":"export function buildChannelOutboundSessionRoute(params: { cfg: OpenClawConfig; agentId: string; channel: string; accountId?: string | null | undefined; peer: { kind: \"direct\" | \"group\" | \"channel\"; id: string; }; chatType: \"direct\" | \"group\" | \"channel\"; from: string; to: string; threadId?: string | ... 1 more ... | undefined; }): ChannelOutboundSessionRoute;","entrypoint":"core","exportName":"buildChannelOutboundSessionRoute","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":193,"sourcePath":"src/plugin-sdk/core.ts"} {"declaration":"export function buildPluginConfigSchema(schema: ZodType>, options?: BuildPluginConfigSchemaOptions | undefined): OpenClawPluginConfigSchema;","entrypoint":"core","exportName":"buildPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":78,"sourcePath":"src/plugins/config-schema.ts"} {"declaration":"export function channelTargetSchema(options?: { description?: string | undefined; } | undefined): TString;","entrypoint":"core","exportName":"channelTargetSchema","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":38,"sourcePath":"src/agents/schema/typebox.ts"} {"declaration":"export function channelTargetsSchema(options?: { description?: string | undefined; } | undefined): TArray;","entrypoint":"core","exportName":"channelTargetsSchema","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":44,"sourcePath":"src/agents/schema/typebox.ts"} {"declaration":"export function clearAccountEntryFields(params: { accounts?: Record | undefined; accountId: string; fields: string[]; isValueSet?: ((value: unknown) => boolean) | undefined; markClearedOnFieldPresence?: boolean | undefined; }): { ...; };","entrypoint":"core","exportName":"clearAccountEntryFields","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":122,"sourcePath":"src/channels/plugins/config-helpers.ts"} -{"declaration":"export function createChannelPluginBase(params: CreateChannelPluginBaseOptions): CreatedChannelPluginBase;","entrypoint":"core","exportName":"createChannelPluginBase","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":551,"sourcePath":"src/plugin-sdk/core.ts"} -{"declaration":"export function createChatChannelPlugin(params: { base: ChatChannelPluginBase; security?: ChannelSecurityAdapter | ChatChannelSecurityOptions<...> | undefined; pairing?: ChannelPairingAdapter | ... 1 more ... | undefined; threading?: ChannelThreadingAdapter | ... 1 more ... | undefined; outbound?: ChannelOutboundAdapter | ... 1 more ... | undefined; }): ChannelPlugin<...>;","entrypoint":"core","exportName":"createChatChannelPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":524,"sourcePath":"src/plugin-sdk/core.ts"} +{"declaration":"export function createChannelPluginBase(params: CreateChannelPluginBaseOptions): CreatedChannelPluginBase;","entrypoint":"core","exportName":"createChannelPluginBase","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":558,"sourcePath":"src/plugin-sdk/core.ts"} +{"declaration":"export function createChatChannelPlugin(params: { base: ChatChannelPluginBase; security?: ChannelSecurityAdapter | ChatChannelSecurityOptions<...> | undefined; pairing?: ChannelPairingAdapter | ... 1 more ... | undefined; threading?: ChannelThreadingAdapter | ... 1 more ... | undefined; outbound?: ChannelOutboundAdapter | ... 1 more ... | undefined; }): ChannelPlugin<...>;","entrypoint":"core","exportName":"createChatChannelPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":531,"sourcePath":"src/plugin-sdk/core.ts"} {"declaration":"export function createDedupeCache(options: DedupeCacheOptions): DedupeCache;","entrypoint":"core","exportName":"createDedupeCache","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":17,"sourcePath":"src/infra/dedupe.ts"} {"declaration":"export function createSubsystemLogger(subsystem: string): SubsystemLogger;","entrypoint":"core","exportName":"createSubsystemLogger","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":308,"sourcePath":"src/logging/subsystem.ts"} -{"declaration":"export function defineChannelPluginEntry({ id, name, description, plugin, configSchema, setRuntime, registerCliMetadata, registerFull, }: DefineChannelPluginEntryOptions): DefinedChannelPluginEntry;","entrypoint":"core","exportName":"defineChannelPluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":288,"sourcePath":"src/plugin-sdk/core.ts"} -{"declaration":"export function definePluginEntry({ id, name, description, kind, configSchema, register, }: DefinePluginEntryOptions): DefinedPluginEntry;","entrypoint":"core","exportName":"definePluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":159,"sourcePath":"src/plugin-sdk/plugin-entry.ts"} -{"declaration":"export function defineSetupPluginEntry(plugin: TPlugin): { plugin: TPlugin; };","entrypoint":"core","exportName":"defineSetupPluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":331,"sourcePath":"src/plugin-sdk/core.ts"} +{"declaration":"export function defineChannelPluginEntry({ id, name, description, plugin, configSchema, setRuntime, registerCliMetadata, registerFull, }: DefineChannelPluginEntryOptions): DefinedChannelPluginEntry;","entrypoint":"core","exportName":"defineChannelPluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":291,"sourcePath":"src/plugin-sdk/core.ts"} +{"declaration":"export function definePluginEntry({ id, name, description, kind, configSchema, register, }: DefinePluginEntryOptions): DefinedPluginEntry;","entrypoint":"core","exportName":"definePluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":157,"sourcePath":"src/plugin-sdk/plugin-entry.ts"} +{"declaration":"export function defineSetupPluginEntry(plugin: TPlugin): { plugin: TPlugin; };","entrypoint":"core","exportName":"defineSetupPluginEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":334,"sourcePath":"src/plugin-sdk/core.ts"} {"declaration":"export function delegateCompactionToRuntime(params: { sessionId: string; sessionKey?: string | undefined; sessionFile: string; tokenBudget?: number | undefined; force?: boolean | undefined; currentTokenCount?: number | undefined; compactionTarget?: \"budget\" | ... 1 more ... | undefined; customInstructions?: string | undefined; runtimeContext?: ContextEngineRuntimeContext | undefined; }): Promise<...>;","entrypoint":"core","exportName":"delegateCompactionToRuntime","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":16,"sourcePath":"src/context-engine/delegate.ts"} {"declaration":"export function deleteAccountFromConfigSection(params: { cfg: OpenClawConfig; sectionKey: string; accountId: string; clearBaseFields?: string[] | undefined; }): OpenClawConfig;","entrypoint":"core","exportName":"deleteAccountFromConfigSection","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":60,"sourcePath":"src/channels/plugins/config-helpers.ts"} {"declaration":"export function emptyPluginConfigSchema(): OpenClawPluginConfigSchema;","entrypoint":"core","exportName":"emptyPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":108,"sourcePath":"src/plugins/config-schema.ts"} @@ -476,144 +480,142 @@ {"declaration":"export function resolveThreadSessionKeys(params: { baseSessionKey: string; threadId?: string | null | undefined; parentSessionKey?: string | undefined; useSuffix?: boolean | undefined; normalizeThreadId?: ((threadId: string) => string) | undefined; }): { ...; };","entrypoint":"core","exportName":"resolveThreadSessionKeys","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":234,"sourcePath":"src/routing/session-key.ts"} {"declaration":"export function setAccountEnabledInConfigSection(params: { cfg: OpenClawConfig; sectionKey: string; accountId: string; enabled: boolean; allowTopLevel?: boolean | undefined; }): OpenClawConfig;","entrypoint":"core","exportName":"setAccountEnabledInConfigSection","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":16,"sourcePath":"src/channels/plugins/config-helpers.ts"} {"declaration":"export function stringEnum(values: T, options?: StringEnumOptions): TUnsafe;","entrypoint":"core","exportName":"stringEnum","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":15,"sourcePath":"src/agents/schema/typebox.ts"} -{"declaration":"export function stripChannelTargetPrefix(raw: string, ...providers: string[]): string;","entrypoint":"core","exportName":"stripChannelTargetPrefix","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":174,"sourcePath":"src/plugin-sdk/core.ts"} -{"declaration":"export function stripTargetKindPrefix(raw: string): string;","entrypoint":"core","exportName":"stripTargetKindPrefix","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":186,"sourcePath":"src/plugin-sdk/core.ts"} +{"declaration":"export function stripChannelTargetPrefix(raw: string, ...providers: string[]): string;","entrypoint":"core","exportName":"stripChannelTargetPrefix","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":173,"sourcePath":"src/plugin-sdk/core.ts"} +{"declaration":"export function stripTargetKindPrefix(raw: string): string;","entrypoint":"core","exportName":"stripTargetKindPrefix","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":185,"sourcePath":"src/plugin-sdk/core.ts"} {"declaration":"export function tryReadSecretFileSync(filePath: string | undefined, label: string, options?: SecretFileReadOptions): string | undefined;","entrypoint":"core","exportName":"tryReadSecretFileSync","importSpecifier":"openclaw/plugin-sdk/core","kind":"function","recordType":"export","sourceLine":130,"sourcePath":"src/infra/secret-file.ts"} {"declaration":"export const DEFAULT_ACCOUNT_ID: \"default\";","entrypoint":"core","exportName":"DEFAULT_ACCOUNT_ID","importSpecifier":"openclaw/plugin-sdk/core","kind":"const","recordType":"export","sourceLine":3,"sourcePath":"src/routing/account-id.ts"} {"declaration":"export const DEFAULT_SECRET_FILE_MAX_BYTES: number;","entrypoint":"core","exportName":"DEFAULT_SECRET_FILE_MAX_BYTES","importSpecifier":"openclaw/plugin-sdk/core","kind":"const","recordType":"export","sourceLine":5,"sourcePath":"src/infra/secret-file.ts"} {"declaration":"export type AnyAgentTool = AnyAgentTool;","entrypoint":"core","exportName":"AnyAgentTool","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":9,"sourcePath":"src/agents/tools/common.ts"} -{"declaration":"export type ChannelConfigUiHint = ChannelConfigUiHint;","entrypoint":"core","exportName":"ChannelConfigUiHint","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":40,"sourcePath":"src/channels/plugins/types.plugin.ts"} -{"declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"core","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":524,"sourcePath":"src/channels/plugins/types.core.ts"} +{"declaration":"export type ChannelConfigUiHint = ChannelConfigUiHint;","entrypoint":"core","exportName":"ChannelConfigUiHint","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":41,"sourcePath":"src/channels/plugins/types.plugin.ts"} +{"declaration":"export type ChannelMessageActionContext = ChannelMessageActionContext;","entrypoint":"core","exportName":"ChannelMessageActionContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":544,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelMessagingAdapter = ChannelMessagingAdapter;","entrypoint":"core","exportName":"ChannelMessagingAdapter","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":398,"sourcePath":"src/channels/plugins/types.core.ts"} {"declaration":"export type ChannelOutboundSessionRoute = ChannelOutboundSessionRoute;","entrypoint":"core","exportName":"ChannelOutboundSessionRoute","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":312,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelOutboundSessionRouteParams = { cfg: OpenClawConfig; agentId: string; accountId?: string | null; target: string; resolvedTarget?: { to: string; kind: import(\"../channels/plugins/types.core.js\").ChannelDirectoryEntryKind | \"channel\"; display?: string; source: \"normalized\" | \"directory\"; }; replyToId?: string | null; threadId?: string | number | null;};","entrypoint":"core","exportName":"ChannelOutboundSessionRouteParams","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":169,"sourcePath":"src/plugin-sdk/core.ts"} -{"declaration":"export type ChannelPlugin = ChannelPlugin;","entrypoint":"core","exportName":"ChannelPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":81,"sourcePath":"src/channels/plugins/types.plugin.ts"} +{"declaration":"export type ChannelOutboundSessionRouteParams = { cfg: OpenClawConfig; agentId: string; accountId?: string | null; target: string; resolvedTarget?: { to: string; kind: import(\"../channels/plugins/types.core.js\").ChannelDirectoryEntryKind | \"channel\"; display?: string; source: \"normalized\" | \"directory\"; }; replyToId?: string | null; threadId?: string | number | null;};","entrypoint":"core","exportName":"ChannelOutboundSessionRouteParams","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":168,"sourcePath":"src/plugin-sdk/core.ts"} +{"declaration":"export type ChannelPlugin = ChannelPlugin;","entrypoint":"core","exportName":"ChannelPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":82,"sourcePath":"src/channels/plugins/types.plugin.ts"} {"declaration":"export type GatewayBindUrlResult = GatewayBindUrlResult;","entrypoint":"core","exportName":"GatewayBindUrlResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1,"sourcePath":"src/shared/gateway-bind-url.ts"} -{"declaration":"export type GatewayRequestHandlerOptions = GatewayRequestHandlerOptions;","entrypoint":"core","exportName":"GatewayRequestHandlerOptions","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":115,"sourcePath":"src/gateway/server-methods/types.ts"} -{"declaration":"export type MediaUnderstandingProviderPlugin = MediaUnderstandingProvider;","entrypoint":"core","exportName":"MediaUnderstandingProviderPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1531,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type GatewayRequestHandlerOptions = GatewayRequestHandlerOptions;","entrypoint":"core","exportName":"GatewayRequestHandlerOptions","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":116,"sourcePath":"src/gateway/server-methods/types.ts"} +{"declaration":"export type MediaUnderstandingProviderPlugin = MediaUnderstandingProvider;","entrypoint":"core","exportName":"MediaUnderstandingProviderPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1527,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type OpenClawConfig = OpenClawConfig;","entrypoint":"core","exportName":"OpenClawConfig","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":32,"sourcePath":"src/config/types.openclaw.ts"} -{"declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"core","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1943,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginCommandDefinition = OpenClawPluginCommandDefinition;","entrypoint":"core","exportName":"OpenClawPluginCommandDefinition","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1654,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"core","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":104,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginDefinition = OpenClawPluginDefinition;","entrypoint":"core","exportName":"OpenClawPluginDefinition","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1925,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginService = OpenClawPluginService;","entrypoint":"core","exportName":"OpenClawPluginService","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1892,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginServiceContext = OpenClawPluginServiceContext;","entrypoint":"core","exportName":"OpenClawPluginServiceContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1884,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginToolContext = OpenClawPluginToolContext;","entrypoint":"core","exportName":"OpenClawPluginToolContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":119,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginToolFactory = OpenClawPluginToolFactory;","entrypoint":"core","exportName":"OpenClawPluginToolFactory","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":144,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type PluginCommandContext = PluginCommandContext;","entrypoint":"core","exportName":"PluginCommandContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1546,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type PluginInteractiveTelegramHandlerContext = PluginInteractiveTelegramHandlerContext;","entrypoint":"core","exportName":"PluginInteractiveTelegramHandlerContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1690,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type PluginLogger = PluginLogger;","entrypoint":"core","exportName":"PluginLogger","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":75,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"core","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1794,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginCommandDefinition = OpenClawPluginCommandDefinition;","entrypoint":"core","exportName":"OpenClawPluginCommandDefinition","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1650,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"core","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":100,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginDefinition = OpenClawPluginDefinition;","entrypoint":"core","exportName":"OpenClawPluginDefinition","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1776,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginService = OpenClawPluginService;","entrypoint":"core","exportName":"OpenClawPluginService","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1743,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginServiceContext = OpenClawPluginServiceContext;","entrypoint":"core","exportName":"OpenClawPluginServiceContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1735,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginToolContext = OpenClawPluginToolContext;","entrypoint":"core","exportName":"OpenClawPluginToolContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":115,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginToolFactory = OpenClawPluginToolFactory;","entrypoint":"core","exportName":"OpenClawPluginToolFactory","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":140,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type PluginCommandContext = PluginCommandContext;","entrypoint":"core","exportName":"PluginCommandContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1542,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type PluginLogger = PluginLogger;","entrypoint":"core","exportName":"PluginLogger","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":71,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type PluginRuntime = PluginRuntime;","entrypoint":"core","exportName":"PluginRuntime","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":54,"sourcePath":"src/plugins/runtime/types.ts"} -{"declaration":"export type ProviderAugmentModelCatalogContext = ProviderAugmentModelCatalogContext;","entrypoint":"core","exportName":"ProviderAugmentModelCatalogContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":831,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthContext = ProviderAuthContext;","entrypoint":"core","exportName":"ProviderAuthContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":179,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthDoctorHintContext = ProviderAuthDoctorHintContext;","entrypoint":"core","exportName":"ProviderAuthDoctorHintContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":518,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthMethod = ProviderAuthMethod;","entrypoint":"core","exportName":"ProviderAuthMethod","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":258,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthMethodNonInteractiveContext = ProviderAuthMethodNonInteractiveContext;","entrypoint":"core","exportName":"ProviderAuthMethodNonInteractiveContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":242,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthResult = ProviderAuthResult;","entrypoint":"core","exportName":"ProviderAuthResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":164,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderBuildMissingAuthMessageContext = ProviderBuildMissingAuthMessageContext;","entrypoint":"core","exportName":"ProviderBuildMissingAuthMessageContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":743,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderBuildUnknownModelHintContext = ProviderBuildUnknownModelHintContext;","entrypoint":"core","exportName":"ProviderBuildUnknownModelHintContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":759,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderBuiltInModelSuppressionContext = ProviderBuiltInModelSuppressionContext;","entrypoint":"core","exportName":"ProviderBuiltInModelSuppressionContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":775,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderBuiltInModelSuppressionResult = ProviderBuiltInModelSuppressionResult;","entrypoint":"core","exportName":"ProviderBuiltInModelSuppressionResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":784,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderCacheTtlEligibilityContext = ProviderCacheTtlEligibilityContext;","entrypoint":"core","exportName":"ProviderCacheTtlEligibilityContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":730,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderCatalogContext = ProviderCatalogContext;","entrypoint":"core","exportName":"ProviderCatalogContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":279,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderCatalogResult = ProviderCatalogResult;","entrypoint":"core","exportName":"ProviderCatalogResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":302,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderDefaultThinkingPolicyContext = ProviderDefaultThinkingPolicyContext;","entrypoint":"core","exportName":"ProviderDefaultThinkingPolicyContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":808,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderDiscoveryContext = ProviderCatalogContext;","entrypoint":"core","exportName":"ProviderDiscoveryContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":847,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderFetchUsageSnapshotContext = ProviderFetchUsageSnapshotContext;","entrypoint":"core","exportName":"ProviderFetchUsageSnapshotContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":499,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderModernModelPolicyContext = ProviderModernModelPolicyContext;","entrypoint":"core","exportName":"ProviderModernModelPolicyContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":818,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderNormalizeResolvedModelContext = ProviderNormalizeResolvedModelContext;","entrypoint":"core","exportName":"ProviderNormalizeResolvedModelContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":363,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderNormalizeToolSchemasContext = ProviderNormalizeToolSchemasContext;","entrypoint":"core","exportName":"ProviderNormalizeToolSchemasContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":640,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderPreparedRuntimeAuth = ProviderPreparedRuntimeAuth;","entrypoint":"core","exportName":"ProviderPreparedRuntimeAuth","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":445,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderPrepareDynamicModelContext = ProviderResolveDynamicModelContext;","entrypoint":"core","exportName":"ProviderPrepareDynamicModelContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":354,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderPrepareExtraParamsContext = ProviderPrepareExtraParamsContext;","entrypoint":"core","exportName":"ProviderPrepareExtraParamsContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":532,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderPrepareRuntimeAuthContext = ProviderPrepareRuntimeAuthContext;","entrypoint":"core","exportName":"ProviderPrepareRuntimeAuthContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":424,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReasoningOutputMode = ProviderReasoningOutputMode;","entrypoint":"core","exportName":"ProviderReasoningOutputMode","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":546,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReasoningOutputModeContext = ProviderReplayPolicyContext;","entrypoint":"core","exportName":"ProviderReasoningOutputModeContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":656,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReplayPolicy = ProviderReplayPolicy;","entrypoint":"core","exportName":"ProviderReplayPolicy","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":565,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReplayPolicyContext = ProviderReplayPolicyContext;","entrypoint":"core","exportName":"ProviderReplayPolicyContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":588,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReplaySessionEntry = ProviderReplaySessionEntry;","entrypoint":"core","exportName":"ProviderReplaySessionEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":599,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReplaySessionState = ProviderReplaySessionState;","entrypoint":"core","exportName":"ProviderReplaySessionState","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":604,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderResolvedUsageAuth = ProviderResolvedUsageAuth;","entrypoint":"core","exportName":"ProviderResolvedUsageAuth","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":486,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderResolveDynamicModelContext = ProviderResolveDynamicModelContext;","entrypoint":"core","exportName":"ProviderResolveDynamicModelContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":337,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderResolveUsageAuthContext = ProviderResolveUsageAuthContext;","entrypoint":"core","exportName":"ProviderResolveUsageAuthContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":467,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderRuntimeModel = ProviderRuntimeModel;","entrypoint":"core","exportName":"ProviderRuntimeModel","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":320,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderSanitizeReplayHistoryContext = ProviderSanitizeReplayHistoryContext;","entrypoint":"core","exportName":"ProviderSanitizeReplayHistoryContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":615,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderThinkingPolicyContext = ProviderThinkingPolicyContext;","entrypoint":"core","exportName":"ProviderThinkingPolicyContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":796,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderToolSchemaDiagnostic = ProviderToolSchemaDiagnostic;","entrypoint":"core","exportName":"ProviderToolSchemaDiagnostic","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":644,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAugmentModelCatalogContext = ProviderAugmentModelCatalogContext;","entrypoint":"core","exportName":"ProviderAugmentModelCatalogContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":827,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthContext = ProviderAuthContext;","entrypoint":"core","exportName":"ProviderAuthContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":175,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthDoctorHintContext = ProviderAuthDoctorHintContext;","entrypoint":"core","exportName":"ProviderAuthDoctorHintContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":514,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthMethod = ProviderAuthMethod;","entrypoint":"core","exportName":"ProviderAuthMethod","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":254,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthMethodNonInteractiveContext = ProviderAuthMethodNonInteractiveContext;","entrypoint":"core","exportName":"ProviderAuthMethodNonInteractiveContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":238,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthResult = ProviderAuthResult;","entrypoint":"core","exportName":"ProviderAuthResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":160,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderBuildMissingAuthMessageContext = ProviderBuildMissingAuthMessageContext;","entrypoint":"core","exportName":"ProviderBuildMissingAuthMessageContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":739,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderBuildUnknownModelHintContext = ProviderBuildUnknownModelHintContext;","entrypoint":"core","exportName":"ProviderBuildUnknownModelHintContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":755,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderBuiltInModelSuppressionContext = ProviderBuiltInModelSuppressionContext;","entrypoint":"core","exportName":"ProviderBuiltInModelSuppressionContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":771,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderBuiltInModelSuppressionResult = ProviderBuiltInModelSuppressionResult;","entrypoint":"core","exportName":"ProviderBuiltInModelSuppressionResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":780,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderCacheTtlEligibilityContext = ProviderCacheTtlEligibilityContext;","entrypoint":"core","exportName":"ProviderCacheTtlEligibilityContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":726,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderCatalogContext = ProviderCatalogContext;","entrypoint":"core","exportName":"ProviderCatalogContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":275,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderCatalogResult = ProviderCatalogResult;","entrypoint":"core","exportName":"ProviderCatalogResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":298,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderDefaultThinkingPolicyContext = ProviderDefaultThinkingPolicyContext;","entrypoint":"core","exportName":"ProviderDefaultThinkingPolicyContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":804,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderDiscoveryContext = ProviderCatalogContext;","entrypoint":"core","exportName":"ProviderDiscoveryContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":843,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderFetchUsageSnapshotContext = ProviderFetchUsageSnapshotContext;","entrypoint":"core","exportName":"ProviderFetchUsageSnapshotContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":495,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderModernModelPolicyContext = ProviderModernModelPolicyContext;","entrypoint":"core","exportName":"ProviderModernModelPolicyContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":814,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderNormalizeResolvedModelContext = ProviderNormalizeResolvedModelContext;","entrypoint":"core","exportName":"ProviderNormalizeResolvedModelContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":359,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderNormalizeToolSchemasContext = ProviderNormalizeToolSchemasContext;","entrypoint":"core","exportName":"ProviderNormalizeToolSchemasContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":636,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderPreparedRuntimeAuth = ProviderPreparedRuntimeAuth;","entrypoint":"core","exportName":"ProviderPreparedRuntimeAuth","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":441,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderPrepareDynamicModelContext = ProviderResolveDynamicModelContext;","entrypoint":"core","exportName":"ProviderPrepareDynamicModelContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":350,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderPrepareExtraParamsContext = ProviderPrepareExtraParamsContext;","entrypoint":"core","exportName":"ProviderPrepareExtraParamsContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":528,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderPrepareRuntimeAuthContext = ProviderPrepareRuntimeAuthContext;","entrypoint":"core","exportName":"ProviderPrepareRuntimeAuthContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":420,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReasoningOutputMode = ProviderReasoningOutputMode;","entrypoint":"core","exportName":"ProviderReasoningOutputMode","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":542,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReasoningOutputModeContext = ProviderReplayPolicyContext;","entrypoint":"core","exportName":"ProviderReasoningOutputModeContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":652,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReplayPolicy = ProviderReplayPolicy;","entrypoint":"core","exportName":"ProviderReplayPolicy","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":561,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReplayPolicyContext = ProviderReplayPolicyContext;","entrypoint":"core","exportName":"ProviderReplayPolicyContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":584,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReplaySessionEntry = ProviderReplaySessionEntry;","entrypoint":"core","exportName":"ProviderReplaySessionEntry","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":595,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReplaySessionState = ProviderReplaySessionState;","entrypoint":"core","exportName":"ProviderReplaySessionState","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":600,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderResolvedUsageAuth = ProviderResolvedUsageAuth;","entrypoint":"core","exportName":"ProviderResolvedUsageAuth","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":482,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderResolveDynamicModelContext = ProviderResolveDynamicModelContext;","entrypoint":"core","exportName":"ProviderResolveDynamicModelContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":333,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderResolveUsageAuthContext = ProviderResolveUsageAuthContext;","entrypoint":"core","exportName":"ProviderResolveUsageAuthContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":463,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderRuntimeModel = ProviderRuntimeModel;","entrypoint":"core","exportName":"ProviderRuntimeModel","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":316,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderSanitizeReplayHistoryContext = ProviderSanitizeReplayHistoryContext;","entrypoint":"core","exportName":"ProviderSanitizeReplayHistoryContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":611,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderThinkingPolicyContext = ProviderThinkingPolicyContext;","entrypoint":"core","exportName":"ProviderThinkingPolicyContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":792,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderToolSchemaDiagnostic = ProviderToolSchemaDiagnostic;","entrypoint":"core","exportName":"ProviderToolSchemaDiagnostic","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":640,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type ProviderUsageSnapshot = ProviderUsageSnapshot;","entrypoint":"core","exportName":"ProviderUsageSnapshot","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":7,"sourcePath":"src/infra/provider-usage.types.ts"} -{"declaration":"export type ProviderValidateReplayTurnsContext = ProviderValidateReplayTurnsContext;","entrypoint":"core","exportName":"ProviderValidateReplayTurnsContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":628,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderWrapStreamFnContext = ProviderWrapStreamFnContext;","entrypoint":"core","exportName":"ProviderWrapStreamFnContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":681,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderValidateReplayTurnsContext = ProviderValidateReplayTurnsContext;","entrypoint":"core","exportName":"ProviderValidateReplayTurnsContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":624,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderWrapStreamFnContext = ProviderWrapStreamFnContext;","entrypoint":"core","exportName":"ProviderWrapStreamFnContext","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":677,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type RoutePeer = RoutePeer;","entrypoint":"core","exportName":"RoutePeer","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":21,"sourcePath":"src/routing/resolve-route.ts"} {"declaration":"export type RoutePeerKind = ChatType;","entrypoint":"core","exportName":"RoutePeerKind","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":19,"sourcePath":"src/routing/resolve-route.ts"} {"declaration":"export type SecretFileReadOptions = SecretFileReadOptions;","entrypoint":"core","exportName":"SecretFileReadOptions","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":7,"sourcePath":"src/infra/secret-file.ts"} {"declaration":"export type SecretFileReadResult = SecretFileReadResult;","entrypoint":"core","exportName":"SecretFileReadResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":12,"sourcePath":"src/infra/secret-file.ts"} -{"declaration":"export type SpeechProviderPlugin = SpeechProviderPlugin;","entrypoint":"core","exportName":"SpeechProviderPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1506,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type SpeechProviderPlugin = SpeechProviderPlugin;","entrypoint":"core","exportName":"SpeechProviderPlugin","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1502,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type TailscaleStatusCommandResult = TailscaleStatusCommandResult;","entrypoint":"core","exportName":"TailscaleStatusCommandResult","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":4,"sourcePath":"src/shared/tailscale-status.ts"} {"declaration":"export type TailscaleStatusCommandRunner = TailscaleStatusCommandRunner;","entrypoint":"core","exportName":"TailscaleStatusCommandRunner","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":9,"sourcePath":"src/shared/tailscale-status.ts"} {"declaration":"export type UsageProviderId = UsageProviderId;","entrypoint":"core","exportName":"UsageProviderId","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":20,"sourcePath":"src/infra/provider-usage.types.ts"} {"declaration":"export type UsageWindow = UsageWindow;","entrypoint":"core","exportName":"UsageWindow","importSpecifier":"openclaw/plugin-sdk/core","kind":"type","recordType":"export","sourceLine":1,"sourcePath":"src/infra/provider-usage.types.ts"} {"declaration":"export class KeyedAsyncQueue","entrypoint":"core","exportName":"KeyedAsyncQueue","importSpecifier":"openclaw/plugin-sdk/core","kind":"class","recordType":"export","sourceLine":34,"sourcePath":"src/plugin-sdk/keyed-async-queue.ts"} {"category":"core","entrypoint":"plugin-entry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","recordType":"module","sourceLine":1,"sourcePath":"src/plugin-sdk/plugin-entry.ts"} -{"declaration":"export function definePluginEntry({ id, name, description, kind, configSchema, register, }: DefinePluginEntryOptions): DefinedPluginEntry;","entrypoint":"plugin-entry","exportName":"definePluginEntry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"function","recordType":"export","sourceLine":159,"sourcePath":"src/plugin-sdk/plugin-entry.ts"} +{"declaration":"export function definePluginEntry({ id, name, description, kind, configSchema, register, }: DefinePluginEntryOptions): DefinedPluginEntry;","entrypoint":"plugin-entry","exportName":"definePluginEntry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"function","recordType":"export","sourceLine":157,"sourcePath":"src/plugin-sdk/plugin-entry.ts"} {"declaration":"export function emptyPluginConfigSchema(): OpenClawPluginConfigSchema;","entrypoint":"plugin-entry","exportName":"emptyPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"function","recordType":"export","sourceLine":108,"sourcePath":"src/plugins/config-schema.ts"} {"declaration":"export type AnyAgentTool = AnyAgentTool;","entrypoint":"plugin-entry","exportName":"AnyAgentTool","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":9,"sourcePath":"src/agents/tools/common.ts"} -{"declaration":"export type MediaUnderstandingProviderPlugin = MediaUnderstandingProvider;","entrypoint":"plugin-entry","exportName":"MediaUnderstandingProviderPlugin","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1531,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type MediaUnderstandingProviderPlugin = MediaUnderstandingProvider;","entrypoint":"plugin-entry","exportName":"MediaUnderstandingProviderPlugin","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1527,"sourcePath":"src/plugins/types.ts"} {"declaration":"export type OpenClawConfig = OpenClawConfig;","entrypoint":"plugin-entry","exportName":"OpenClawConfig","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":32,"sourcePath":"src/config/types.openclaw.ts"} -{"declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"plugin-entry","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1943,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginCommandDefinition = OpenClawPluginCommandDefinition;","entrypoint":"plugin-entry","exportName":"OpenClawPluginCommandDefinition","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1654,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"plugin-entry","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":104,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginDefinition = OpenClawPluginDefinition;","entrypoint":"plugin-entry","exportName":"OpenClawPluginDefinition","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1925,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginService = OpenClawPluginService;","entrypoint":"plugin-entry","exportName":"OpenClawPluginService","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1892,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginServiceContext = OpenClawPluginServiceContext;","entrypoint":"plugin-entry","exportName":"OpenClawPluginServiceContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1884,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginToolContext = OpenClawPluginToolContext;","entrypoint":"plugin-entry","exportName":"OpenClawPluginToolContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":119,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type OpenClawPluginToolFactory = OpenClawPluginToolFactory;","entrypoint":"plugin-entry","exportName":"OpenClawPluginToolFactory","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":144,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type PluginCommandContext = PluginCommandContext;","entrypoint":"plugin-entry","exportName":"PluginCommandContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1546,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type PluginInteractiveTelegramHandlerContext = PluginInteractiveTelegramHandlerContext;","entrypoint":"plugin-entry","exportName":"PluginInteractiveTelegramHandlerContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1690,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type PluginLogger = PluginLogger;","entrypoint":"plugin-entry","exportName":"PluginLogger","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":75,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAugmentModelCatalogContext = ProviderAugmentModelCatalogContext;","entrypoint":"plugin-entry","exportName":"ProviderAugmentModelCatalogContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":831,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthContext = ProviderAuthContext;","entrypoint":"plugin-entry","exportName":"ProviderAuthContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":179,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthDoctorHintContext = ProviderAuthDoctorHintContext;","entrypoint":"plugin-entry","exportName":"ProviderAuthDoctorHintContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":518,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthMethod = ProviderAuthMethod;","entrypoint":"plugin-entry","exportName":"ProviderAuthMethod","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":258,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthMethodNonInteractiveContext = ProviderAuthMethodNonInteractiveContext;","entrypoint":"plugin-entry","exportName":"ProviderAuthMethodNonInteractiveContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":242,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderAuthResult = ProviderAuthResult;","entrypoint":"plugin-entry","exportName":"ProviderAuthResult","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":164,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderBuildMissingAuthMessageContext = ProviderBuildMissingAuthMessageContext;","entrypoint":"plugin-entry","exportName":"ProviderBuildMissingAuthMessageContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":743,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderBuildUnknownModelHintContext = ProviderBuildUnknownModelHintContext;","entrypoint":"plugin-entry","exportName":"ProviderBuildUnknownModelHintContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":759,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderBuiltInModelSuppressionContext = ProviderBuiltInModelSuppressionContext;","entrypoint":"plugin-entry","exportName":"ProviderBuiltInModelSuppressionContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":775,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderBuiltInModelSuppressionResult = ProviderBuiltInModelSuppressionResult;","entrypoint":"plugin-entry","exportName":"ProviderBuiltInModelSuppressionResult","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":784,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderCacheTtlEligibilityContext = ProviderCacheTtlEligibilityContext;","entrypoint":"plugin-entry","exportName":"ProviderCacheTtlEligibilityContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":730,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderCatalogContext = ProviderCatalogContext;","entrypoint":"plugin-entry","exportName":"ProviderCatalogContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":279,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderCatalogResult = ProviderCatalogResult;","entrypoint":"plugin-entry","exportName":"ProviderCatalogResult","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":302,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderDefaultThinkingPolicyContext = ProviderDefaultThinkingPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderDefaultThinkingPolicyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":808,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderDeferSyntheticProfileAuthContext = ProviderDeferSyntheticProfileAuthContext;","entrypoint":"plugin-entry","exportName":"ProviderDeferSyntheticProfileAuthContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":945,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderDiscoveryContext = ProviderCatalogContext;","entrypoint":"plugin-entry","exportName":"ProviderDiscoveryContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":847,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderFetchUsageSnapshotContext = ProviderFetchUsageSnapshotContext;","entrypoint":"plugin-entry","exportName":"ProviderFetchUsageSnapshotContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":499,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderModernModelPolicyContext = ProviderModernModelPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderModernModelPolicyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":818,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderNormalizeConfigContext = ProviderNormalizeConfigContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeConfigContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":389,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderNormalizeModelIdContext = ProviderNormalizeModelIdContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeModelIdContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":378,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderNormalizeResolvedModelContext = ProviderNormalizeResolvedModelContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeResolvedModelContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":363,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderNormalizeToolSchemasContext = ProviderNormalizeToolSchemasContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeToolSchemasContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":640,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderNormalizeTransportContext = ProviderNormalizeTransportContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeTransportContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":401,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderPreparedRuntimeAuth = ProviderPreparedRuntimeAuth;","entrypoint":"plugin-entry","exportName":"ProviderPreparedRuntimeAuth","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":445,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderPrepareDynamicModelContext = ProviderResolveDynamicModelContext;","entrypoint":"plugin-entry","exportName":"ProviderPrepareDynamicModelContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":354,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderPrepareExtraParamsContext = ProviderPrepareExtraParamsContext;","entrypoint":"plugin-entry","exportName":"ProviderPrepareExtraParamsContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":532,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderPrepareRuntimeAuthContext = ProviderPrepareRuntimeAuthContext;","entrypoint":"plugin-entry","exportName":"ProviderPrepareRuntimeAuthContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":424,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReasoningOutputMode = ProviderReasoningOutputMode;","entrypoint":"plugin-entry","exportName":"ProviderReasoningOutputMode","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":546,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReasoningOutputModeContext = ProviderReplayPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderReasoningOutputModeContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":656,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReplayPolicy = ProviderReplayPolicy;","entrypoint":"plugin-entry","exportName":"ProviderReplayPolicy","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":565,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReplayPolicyContext = ProviderReplayPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderReplayPolicyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":588,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReplaySessionEntry = ProviderReplaySessionEntry;","entrypoint":"plugin-entry","exportName":"ProviderReplaySessionEntry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":599,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderReplaySessionState = ProviderReplaySessionState;","entrypoint":"plugin-entry","exportName":"ProviderReplaySessionState","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":604,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderResolveConfigApiKeyContext = ProviderResolveConfigApiKeyContext;","entrypoint":"plugin-entry","exportName":"ProviderResolveConfigApiKeyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":413,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderResolvedUsageAuth = ProviderResolvedUsageAuth;","entrypoint":"plugin-entry","exportName":"ProviderResolvedUsageAuth","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":486,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderResolveDynamicModelContext = ProviderResolveDynamicModelContext;","entrypoint":"plugin-entry","exportName":"ProviderResolveDynamicModelContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":337,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderResolveUsageAuthContext = ProviderResolveUsageAuthContext;","entrypoint":"plugin-entry","exportName":"ProviderResolveUsageAuthContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":467,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderRuntimeModel = ProviderRuntimeModel;","entrypoint":"plugin-entry","exportName":"ProviderRuntimeModel","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":320,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderSanitizeReplayHistoryContext = ProviderSanitizeReplayHistoryContext;","entrypoint":"plugin-entry","exportName":"ProviderSanitizeReplayHistoryContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":615,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderThinkingPolicyContext = ProviderThinkingPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderThinkingPolicyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":796,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderToolSchemaDiagnostic = ProviderToolSchemaDiagnostic;","entrypoint":"plugin-entry","exportName":"ProviderToolSchemaDiagnostic","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":644,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderValidateReplayTurnsContext = ProviderValidateReplayTurnsContext;","entrypoint":"plugin-entry","exportName":"ProviderValidateReplayTurnsContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":628,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type ProviderWrapStreamFnContext = ProviderWrapStreamFnContext;","entrypoint":"plugin-entry","exportName":"ProviderWrapStreamFnContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":681,"sourcePath":"src/plugins/types.ts"} -{"declaration":"export type SpeechProviderPlugin = SpeechProviderPlugin;","entrypoint":"plugin-entry","exportName":"SpeechProviderPlugin","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1506,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginApi = OpenClawPluginApi;","entrypoint":"plugin-entry","exportName":"OpenClawPluginApi","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1794,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginCommandDefinition = OpenClawPluginCommandDefinition;","entrypoint":"plugin-entry","exportName":"OpenClawPluginCommandDefinition","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1650,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginConfigSchema = OpenClawPluginConfigSchema;","entrypoint":"plugin-entry","exportName":"OpenClawPluginConfigSchema","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":100,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginDefinition = OpenClawPluginDefinition;","entrypoint":"plugin-entry","exportName":"OpenClawPluginDefinition","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1776,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginService = OpenClawPluginService;","entrypoint":"plugin-entry","exportName":"OpenClawPluginService","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1743,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginServiceContext = OpenClawPluginServiceContext;","entrypoint":"plugin-entry","exportName":"OpenClawPluginServiceContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1735,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginToolContext = OpenClawPluginToolContext;","entrypoint":"plugin-entry","exportName":"OpenClawPluginToolContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":115,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type OpenClawPluginToolFactory = OpenClawPluginToolFactory;","entrypoint":"plugin-entry","exportName":"OpenClawPluginToolFactory","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":140,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type PluginCommandContext = PluginCommandContext;","entrypoint":"plugin-entry","exportName":"PluginCommandContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1542,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type PluginLogger = PluginLogger;","entrypoint":"plugin-entry","exportName":"PluginLogger","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":71,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAugmentModelCatalogContext = ProviderAugmentModelCatalogContext;","entrypoint":"plugin-entry","exportName":"ProviderAugmentModelCatalogContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":827,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthContext = ProviderAuthContext;","entrypoint":"plugin-entry","exportName":"ProviderAuthContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":175,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthDoctorHintContext = ProviderAuthDoctorHintContext;","entrypoint":"plugin-entry","exportName":"ProviderAuthDoctorHintContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":514,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthMethod = ProviderAuthMethod;","entrypoint":"plugin-entry","exportName":"ProviderAuthMethod","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":254,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthMethodNonInteractiveContext = ProviderAuthMethodNonInteractiveContext;","entrypoint":"plugin-entry","exportName":"ProviderAuthMethodNonInteractiveContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":238,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderAuthResult = ProviderAuthResult;","entrypoint":"plugin-entry","exportName":"ProviderAuthResult","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":160,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderBuildMissingAuthMessageContext = ProviderBuildMissingAuthMessageContext;","entrypoint":"plugin-entry","exportName":"ProviderBuildMissingAuthMessageContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":739,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderBuildUnknownModelHintContext = ProviderBuildUnknownModelHintContext;","entrypoint":"plugin-entry","exportName":"ProviderBuildUnknownModelHintContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":755,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderBuiltInModelSuppressionContext = ProviderBuiltInModelSuppressionContext;","entrypoint":"plugin-entry","exportName":"ProviderBuiltInModelSuppressionContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":771,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderBuiltInModelSuppressionResult = ProviderBuiltInModelSuppressionResult;","entrypoint":"plugin-entry","exportName":"ProviderBuiltInModelSuppressionResult","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":780,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderCacheTtlEligibilityContext = ProviderCacheTtlEligibilityContext;","entrypoint":"plugin-entry","exportName":"ProviderCacheTtlEligibilityContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":726,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderCatalogContext = ProviderCatalogContext;","entrypoint":"plugin-entry","exportName":"ProviderCatalogContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":275,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderCatalogResult = ProviderCatalogResult;","entrypoint":"plugin-entry","exportName":"ProviderCatalogResult","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":298,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderDefaultThinkingPolicyContext = ProviderDefaultThinkingPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderDefaultThinkingPolicyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":804,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderDeferSyntheticProfileAuthContext = ProviderDeferSyntheticProfileAuthContext;","entrypoint":"plugin-entry","exportName":"ProviderDeferSyntheticProfileAuthContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":941,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderDiscoveryContext = ProviderCatalogContext;","entrypoint":"plugin-entry","exportName":"ProviderDiscoveryContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":843,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderFetchUsageSnapshotContext = ProviderFetchUsageSnapshotContext;","entrypoint":"plugin-entry","exportName":"ProviderFetchUsageSnapshotContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":495,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderModernModelPolicyContext = ProviderModernModelPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderModernModelPolicyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":814,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderNormalizeConfigContext = ProviderNormalizeConfigContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeConfigContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":385,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderNormalizeModelIdContext = ProviderNormalizeModelIdContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeModelIdContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":374,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderNormalizeResolvedModelContext = ProviderNormalizeResolvedModelContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeResolvedModelContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":359,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderNormalizeToolSchemasContext = ProviderNormalizeToolSchemasContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeToolSchemasContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":636,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderNormalizeTransportContext = ProviderNormalizeTransportContext;","entrypoint":"plugin-entry","exportName":"ProviderNormalizeTransportContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":397,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderPreparedRuntimeAuth = ProviderPreparedRuntimeAuth;","entrypoint":"plugin-entry","exportName":"ProviderPreparedRuntimeAuth","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":441,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderPrepareDynamicModelContext = ProviderResolveDynamicModelContext;","entrypoint":"plugin-entry","exportName":"ProviderPrepareDynamicModelContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":350,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderPrepareExtraParamsContext = ProviderPrepareExtraParamsContext;","entrypoint":"plugin-entry","exportName":"ProviderPrepareExtraParamsContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":528,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderPrepareRuntimeAuthContext = ProviderPrepareRuntimeAuthContext;","entrypoint":"plugin-entry","exportName":"ProviderPrepareRuntimeAuthContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":420,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReasoningOutputMode = ProviderReasoningOutputMode;","entrypoint":"plugin-entry","exportName":"ProviderReasoningOutputMode","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":542,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReasoningOutputModeContext = ProviderReplayPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderReasoningOutputModeContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":652,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReplayPolicy = ProviderReplayPolicy;","entrypoint":"plugin-entry","exportName":"ProviderReplayPolicy","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":561,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReplayPolicyContext = ProviderReplayPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderReplayPolicyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":584,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReplaySessionEntry = ProviderReplaySessionEntry;","entrypoint":"plugin-entry","exportName":"ProviderReplaySessionEntry","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":595,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderReplaySessionState = ProviderReplaySessionState;","entrypoint":"plugin-entry","exportName":"ProviderReplaySessionState","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":600,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderResolveConfigApiKeyContext = ProviderResolveConfigApiKeyContext;","entrypoint":"plugin-entry","exportName":"ProviderResolveConfigApiKeyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":409,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderResolvedUsageAuth = ProviderResolvedUsageAuth;","entrypoint":"plugin-entry","exportName":"ProviderResolvedUsageAuth","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":482,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderResolveDynamicModelContext = ProviderResolveDynamicModelContext;","entrypoint":"plugin-entry","exportName":"ProviderResolveDynamicModelContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":333,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderResolveUsageAuthContext = ProviderResolveUsageAuthContext;","entrypoint":"plugin-entry","exportName":"ProviderResolveUsageAuthContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":463,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderRuntimeModel = ProviderRuntimeModel;","entrypoint":"plugin-entry","exportName":"ProviderRuntimeModel","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":316,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderSanitizeReplayHistoryContext = ProviderSanitizeReplayHistoryContext;","entrypoint":"plugin-entry","exportName":"ProviderSanitizeReplayHistoryContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":611,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderThinkingPolicyContext = ProviderThinkingPolicyContext;","entrypoint":"plugin-entry","exportName":"ProviderThinkingPolicyContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":792,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderToolSchemaDiagnostic = ProviderToolSchemaDiagnostic;","entrypoint":"plugin-entry","exportName":"ProviderToolSchemaDiagnostic","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":640,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderValidateReplayTurnsContext = ProviderValidateReplayTurnsContext;","entrypoint":"plugin-entry","exportName":"ProviderValidateReplayTurnsContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":624,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type ProviderWrapStreamFnContext = ProviderWrapStreamFnContext;","entrypoint":"plugin-entry","exportName":"ProviderWrapStreamFnContext","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":677,"sourcePath":"src/plugins/types.ts"} +{"declaration":"export type SpeechProviderPlugin = SpeechProviderPlugin;","entrypoint":"plugin-entry","exportName":"SpeechProviderPlugin","importSpecifier":"openclaw/plugin-sdk/plugin-entry","kind":"type","recordType":"export","sourceLine":1502,"sourcePath":"src/plugins/types.ts"} {"category":"provider","entrypoint":"provider-onboard","importSpecifier":"openclaw/plugin-sdk/provider-onboard","recordType":"module","sourceLine":1,"sourcePath":"src/plugin-sdk/provider-onboard.ts"} {"declaration":"export function applyAgentDefaultModelPrimary(cfg: OpenClawConfig, primary: string): OpenClawConfig;","entrypoint":"provider-onboard","exportName":"applyAgentDefaultModelPrimary","importSpecifier":"openclaw/plugin-sdk/provider-onboard","kind":"function","recordType":"export","sourceLine":271,"sourcePath":"src/plugin-sdk/provider-onboard.ts"} {"declaration":"export function applyOnboardAuthAgentModelsAndProviders(cfg: OpenClawConfig, params: { agentModels: Record; providers: Record; }): OpenClawConfig;","entrypoint":"provider-onboard","exportName":"applyOnboardAuthAgentModelsAndProviders","importSpecifier":"openclaw/plugin-sdk/provider-onboard","kind":"function","recordType":"export","sourceLine":248,"sourcePath":"src/plugin-sdk/provider-onboard.ts"} @@ -729,7 +731,7 @@ {"declaration":"export const __testing: { resetAcpSessionManagerForTests(): void; setAcpSessionManagerForTests(manager: unknown): void; };","entrypoint":"testing","exportName":"acpManagerTesting","importSpecifier":"openclaw/plugin-sdk/testing","kind":"const","recordType":"export","sourceLine":25,"sourcePath":"src/acp/control-plane/manager.ts"} {"declaration":"export const handleAcpCommand: CommandHandler;","entrypoint":"testing","exportName":"handleAcpCommand","importSpecifier":"openclaw/plugin-sdk/testing","kind":"const","recordType":"export","sourceLine":75,"sourcePath":"src/auto-reply/reply/commands-acp.ts"} {"declaration":"export type ChannelAccountSnapshot = ChannelAccountSnapshot;","entrypoint":"testing","exportName":"ChannelAccountSnapshot","importSpecifier":"openclaw/plugin-sdk/testing","kind":"type","recordType":"export","sourceLine":147,"sourcePath":"src/channels/plugins/types.core.ts"} -{"declaration":"export type ChannelGatewayContext = ChannelGatewayContext;","entrypoint":"testing","exportName":"ChannelGatewayContext","importSpecifier":"openclaw/plugin-sdk/testing","kind":"type","recordType":"export","sourceLine":272,"sourcePath":"src/channels/plugins/types.adapters.ts"} +{"declaration":"export type ChannelGatewayContext = ChannelGatewayContext;","entrypoint":"testing","exportName":"ChannelGatewayContext","importSpecifier":"openclaw/plugin-sdk/testing","kind":"type","recordType":"export","sourceLine":285,"sourcePath":"src/channels/plugins/types.adapters.ts"} {"declaration":"export type CliMockOutputRuntime = CliMockOutputRuntime;","entrypoint":"testing","exportName":"CliMockOutputRuntime","importSpecifier":"openclaw/plugin-sdk/testing","kind":"type","recordType":"export","sourceLine":5,"sourcePath":"src/cli/test-runtime-capture.ts"} {"declaration":"export type CliRuntimeCapture = CliRuntimeCapture;","entrypoint":"testing","exportName":"CliRuntimeCapture","importSpecifier":"openclaw/plugin-sdk/testing","kind":"type","recordType":"export","sourceLine":13,"sourcePath":"src/cli/test-runtime-capture.ts"} {"declaration":"export type FetchMock = FetchMock;","entrypoint":"testing","exportName":"FetchMock","importSpecifier":"openclaw/plugin-sdk/testing","kind":"type","recordType":"export","sourceLine":1,"sourcePath":"src/test-utils/fetch-mock.ts"} diff --git a/extensions/discord/api.ts b/extensions/discord/api.ts index 234aafc646f..5f5f2a593ae 100644 --- a/extensions/discord/api.ts +++ b/extensions/discord/api.ts @@ -12,6 +12,7 @@ export * from "./src/probe.js"; export * from "./src/session-key-normalization.js"; export * from "./src/status-issues.js"; export * from "./src/targets.js"; +export * from "./src/security-audit.js"; export { resolveDiscordRuntimeGroupPolicy } from "./src/runtime-group-policy.js"; export { DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS, diff --git a/extensions/discord/src/security-audit.ts b/extensions/discord/src/security-audit.ts new file mode 100644 index 00000000000..124fafb585d --- /dev/null +++ b/extensions/discord/src/security-audit.ts @@ -0,0 +1,235 @@ +import { + isDangerousNameMatchingEnabled, + resolveNativeCommandsEnabled, + resolveNativeSkillsEnabled, +} from "openclaw/plugin-sdk/config-runtime"; +import { readChannelAllowFromStore } from "openclaw/plugin-sdk/conversation-runtime"; +import type { ResolvedDiscordAccount } from "./accounts.js"; +import type { OpenClawConfig } from "./runtime-api.js"; + +function normalizeAllowFromList(list: Array | undefined | null): string[] { + if (!Array.isArray(list)) { + return []; + } + return list.map((value) => String(value).trim()).filter(Boolean); +} + +function coerceNativeSetting(value: unknown): boolean | "auto" | undefined { + if (value === true || value === false || value === "auto") { + return value; + } + return undefined; +} + +function isDiscordMutableAllowEntry(raw: string): boolean { + const text = raw.trim(); + if (!text || text === "*") { + return false; + } + + const maybeMentionId = text.replace(/^<@!?/, "").replace(/>$/, ""); + if (/^\d+$/.test(maybeMentionId)) { + return false; + } + + for (const prefix of ["discord:", "user:", "pk:"]) { + if (!text.startsWith(prefix)) { + continue; + } + return text.slice(prefix.length).trim().length === 0; + } + + return true; +} + +function addDiscordNameBasedEntries(params: { + target: Set; + values: unknown; + source: string; +}) { + if (!Array.isArray(params.values)) { + return; + } + for (const value of params.values) { + if (!isDiscordMutableAllowEntry(String(value))) { + continue; + } + const text = String(value).trim(); + if (!text) { + continue; + } + params.target.add(`${params.source}:${text}`); + } +} + +export async function collectDiscordSecurityAuditFindings(params: { + cfg: OpenClawConfig; + accountId?: string | null; + account: ResolvedDiscordAccount; + orderedAccountIds: string[]; + hasExplicitAccountPath: boolean; +}) { + const findings: Array<{ + checkId: string; + severity: "info" | "warn" | "critical"; + title: string; + detail: string; + remediation?: string; + }> = []; + const discordCfg = params.account.config ?? {}; + const accountId = params.accountId?.trim() || params.account.accountId || "default"; + const dangerousNameMatchingEnabled = isDangerousNameMatchingEnabled(discordCfg); + const storeAllowFrom = await readChannelAllowFromStore("discord", process.env, accountId).catch( + () => [], + ); + const discordNameBasedAllowEntries = new Set(); + const discordPathPrefix = + params.orderedAccountIds.length > 1 || params.hasExplicitAccountPath + ? `channels.discord.accounts.${accountId}` + : "channels.discord"; + + addDiscordNameBasedEntries({ + target: discordNameBasedAllowEntries, + values: discordCfg.allowFrom, + source: `${discordPathPrefix}.allowFrom`, + }); + addDiscordNameBasedEntries({ + target: discordNameBasedAllowEntries, + values: (discordCfg.dm as { allowFrom?: unknown } | undefined)?.allowFrom, + source: `${discordPathPrefix}.dm.allowFrom`, + }); + addDiscordNameBasedEntries({ + target: discordNameBasedAllowEntries, + values: storeAllowFrom, + source: "~/.openclaw/credentials/discord-allowFrom.json", + }); + + const guildEntries = (discordCfg.guilds as Record | undefined) ?? {}; + for (const [guildKey, guildValue] of Object.entries(guildEntries)) { + if (!guildValue || typeof guildValue !== "object") { + continue; + } + const guild = guildValue as Record; + addDiscordNameBasedEntries({ + target: discordNameBasedAllowEntries, + values: guild.users, + source: `${discordPathPrefix}.guilds.${guildKey}.users`, + }); + const channels = guild.channels; + if (!channels || typeof channels !== "object") { + continue; + } + for (const [channelKey, channelValue] of Object.entries(channels as Record)) { + if (!channelValue || typeof channelValue !== "object") { + continue; + } + const channel = channelValue as Record; + addDiscordNameBasedEntries({ + target: discordNameBasedAllowEntries, + values: channel.users, + source: `${discordPathPrefix}.guilds.${guildKey}.channels.${channelKey}.users`, + }); + } + } + + if (discordNameBasedAllowEntries.size > 0) { + const examples = Array.from(discordNameBasedAllowEntries).slice(0, 5); + const more = + discordNameBasedAllowEntries.size > examples.length + ? ` (+${discordNameBasedAllowEntries.size - examples.length} more)` + : ""; + findings.push({ + checkId: "channels.discord.allowFrom.name_based_entries", + severity: dangerousNameMatchingEnabled ? "info" : "warn", + title: dangerousNameMatchingEnabled + ? "Discord allowlist uses break-glass name/tag matching" + : "Discord allowlist contains name or tag entries", + detail: dangerousNameMatchingEnabled + ? "Discord name/tag allowlist matching is explicitly enabled via dangerouslyAllowNameMatching. This mutable-identity mode is operator-selected break-glass behavior and out-of-scope for vulnerability reports by itself. " + + `Found: ${examples.join(", ")}${more}.` + : "Discord name/tag allowlist matching uses normalized slugs and can collide across users. " + + `Found: ${examples.join(", ")}${more}.`, + remediation: dangerousNameMatchingEnabled + ? "Prefer stable Discord IDs (or <@id>/user:/pk:), then disable dangerouslyAllowNameMatching." + : "Prefer stable Discord IDs (or <@id>/user:/pk:) in channels.discord.allowFrom and channels.discord.guilds.*.users, or explicitly opt in with dangerouslyAllowNameMatching=true if you accept the risk.", + }); + } + + const nativeEnabled = resolveNativeCommandsEnabled({ + providerId: "discord", + providerSetting: coerceNativeSetting( + (discordCfg.commands as { native?: unknown } | undefined)?.native, + ), + globalSetting: params.cfg.commands?.native, + }); + const nativeSkillsEnabled = resolveNativeSkillsEnabled({ + providerId: "discord", + providerSetting: coerceNativeSetting( + (discordCfg.commands as { nativeSkills?: unknown } | undefined)?.nativeSkills, + ), + globalSetting: params.cfg.commands?.nativeSkills, + }); + if (!nativeEnabled && !nativeSkillsEnabled) { + return findings; + } + + const defaultGroupPolicy = params.cfg.channels?.defaults?.groupPolicy; + const groupPolicy = + (discordCfg.groupPolicy as string | undefined) ?? defaultGroupPolicy ?? "allowlist"; + const guildsConfigured = Object.keys(guildEntries).length > 0; + const hasAnyUserAllowlist = Object.values(guildEntries).some((guild) => { + if (!guild || typeof guild !== "object") { + return false; + } + const record = guild as Record; + if (Array.isArray(record.users) && record.users.length > 0) { + return true; + } + const channels = record.channels; + if (!channels || typeof channels !== "object") { + return false; + } + return Object.values(channels as Record).some((channel) => { + if (!channel || typeof channel !== "object") { + return false; + } + const channelRecord = channel as Record; + return Array.isArray(channelRecord.users) && channelRecord.users.length > 0; + }); + }); + const dmAllowFromRaw = (discordCfg.dm as { allowFrom?: unknown } | undefined)?.allowFrom; + const dmAllowFrom = Array.isArray(dmAllowFromRaw) ? dmAllowFromRaw : []; + const ownerAllowFromConfigured = + normalizeAllowFromList([...dmAllowFrom, ...storeAllowFrom]).length > 0; + const useAccessGroups = params.cfg.commands?.useAccessGroups !== false; + + if (!useAccessGroups && groupPolicy !== "disabled" && guildsConfigured && !hasAnyUserAllowlist) { + findings.push({ + checkId: "channels.discord.commands.native.unrestricted", + severity: "critical", + title: "Discord slash commands are unrestricted", + detail: + "commands.useAccessGroups=false disables sender allowlists for Discord slash commands unless a per-guild/channel users allowlist is configured; with no users allowlist, any user in allowed guild channels can invoke /… commands.", + remediation: + "Set commands.useAccessGroups=true (recommended), or configure channels.discord.guilds..users (or channels.discord.guilds..channels..users).", + }); + } else if ( + useAccessGroups && + groupPolicy !== "disabled" && + guildsConfigured && + !ownerAllowFromConfigured && + !hasAnyUserAllowlist + ) { + findings.push({ + checkId: "channels.discord.commands.native.no_allowlists", + severity: "warn", + title: "Discord slash commands have no allowlists", + detail: + "Discord slash commands are enabled, but neither an owner allowFrom list nor any per-guild/channel users allowlist is configured; /… commands will be rejected for everyone.", + remediation: + "Add your user id to channels.discord.allowFrom (or approve yourself via pairing), or configure channels.discord.guilds..users.", + }); + } + + return findings; +} diff --git a/extensions/signal/src/outbound-adapter.ts b/extensions/signal/src/outbound-adapter.ts index 5e4d24c38b7..b30a5943439 100644 --- a/extensions/signal/src/outbound-adapter.ts +++ b/extensions/signal/src/outbound-adapter.ts @@ -8,6 +8,7 @@ import { resolveMarkdownTableMode } from "openclaw/plugin-sdk/config-runtime"; import { createScopedChannelMediaMaxBytesResolver } from "openclaw/plugin-sdk/media-runtime"; import { resolveOutboundSendDep, + sanitizeForPlainText, type OutboundSendDeps, } from "openclaw/plugin-sdk/outbound-runtime"; import { resolveTextChunkLimit } from "openclaw/plugin-sdk/reply-runtime"; @@ -34,6 +35,7 @@ export const signalOutbound: ChannelOutboundAdapter = { chunker: (text, _limit) => text.split(/\n{2,}/).flatMap((chunk) => (chunk ? [chunk] : [])), chunkerMode: "text", textChunkLimit: 4000, + sanitizeText: ({ text }) => sanitizeForPlainText(text), sendFormattedText: async ({ cfg, to, text, accountId, deps, abortSignal }) => { const send = resolveSignalSender(deps); const maxBytes = resolveSignalMaxBytes({ diff --git a/extensions/slack/api.ts b/extensions/slack/api.ts index 9c995c289f1..67e4d430c7d 100644 --- a/extensions/slack/api.ts +++ b/extensions/slack/api.ts @@ -13,6 +13,7 @@ export * from "./src/message-actions.js"; export * from "./src/group-policy.js"; export * from "./src/monitor/allow-list.js"; export * from "./src/probe.js"; +export * from "./src/security-audit.js"; export * from "./src/sent-thread-cache.js"; export * from "./src/targets.js"; export * from "./src/threading-tool-context.js"; diff --git a/extensions/slack/src/security-audit.ts b/extensions/slack/src/security-audit.ts new file mode 100644 index 00000000000..7a1df1c4521 --- /dev/null +++ b/extensions/slack/src/security-audit.ts @@ -0,0 +1,105 @@ +import { + resolveNativeCommandsEnabled, + resolveNativeSkillsEnabled, +} from "openclaw/plugin-sdk/config-runtime"; +import { readChannelAllowFromStore } from "openclaw/plugin-sdk/conversation-runtime"; +import type { ResolvedSlackAccount } from "./accounts.js"; +import type { OpenClawConfig } from "./runtime-api.js"; + +function normalizeAllowFromList(list: Array | undefined | null): string[] { + if (!Array.isArray(list)) { + return []; + } + return list.map((value) => String(value).trim()).filter(Boolean); +} + +function coerceNativeSetting(value: unknown): boolean | "auto" | undefined { + if (value === true || value === false || value === "auto") { + return value; + } + return undefined; +} + +export async function collectSlackSecurityAuditFindings(params: { + cfg: OpenClawConfig; + accountId?: string | null; + account: ResolvedSlackAccount; +}) { + const findings: Array<{ + checkId: string; + severity: "info" | "warn" | "critical"; + title: string; + detail: string; + remediation?: string; + }> = []; + const slackCfg = params.account.config ?? {}; + const accountId = params.accountId?.trim() || params.account.accountId || "default"; + const nativeEnabled = resolveNativeCommandsEnabled({ + providerId: "slack", + providerSetting: coerceNativeSetting( + (slackCfg.commands as { native?: unknown } | undefined)?.native, + ), + globalSetting: params.cfg.commands?.native, + }); + const nativeSkillsEnabled = resolveNativeSkillsEnabled({ + providerId: "slack", + providerSetting: coerceNativeSetting( + (slackCfg.commands as { nativeSkills?: unknown } | undefined)?.nativeSkills, + ), + globalSetting: params.cfg.commands?.nativeSkills, + }); + const slashCommandEnabled = + nativeEnabled || + nativeSkillsEnabled || + (slackCfg.slashCommand as { enabled?: unknown } | undefined)?.enabled === true; + if (!slashCommandEnabled) { + return findings; + } + + const useAccessGroups = params.cfg.commands?.useAccessGroups !== false; + if (!useAccessGroups) { + findings.push({ + checkId: "channels.slack.commands.slash.useAccessGroups_off", + severity: "critical", + title: "Slack slash commands bypass access groups", + detail: + "Slack slash/native commands are enabled while commands.useAccessGroups=false; this can allow unrestricted /… command execution from channels/users you didn't explicitly authorize.", + remediation: "Set commands.useAccessGroups=true (recommended).", + }); + return findings; + } + + const allowFromRaw = slackCfg.allowFrom; + const legacyAllowFromRaw = (params.account as { dm?: { allowFrom?: unknown } }).dm?.allowFrom; + const allowFrom = Array.isArray(allowFromRaw) + ? allowFromRaw + : Array.isArray(legacyAllowFromRaw) + ? legacyAllowFromRaw + : []; + const storeAllowFrom = await readChannelAllowFromStore("slack", process.env, accountId).catch( + () => [], + ); + const ownerAllowFromConfigured = + normalizeAllowFromList([...allowFrom, ...storeAllowFrom]).length > 0; + const channels = (slackCfg.channels as Record | undefined) ?? {}; + const hasAnyChannelUsersAllowlist = Object.values(channels).some((value) => { + if (!value || typeof value !== "object") { + return false; + } + const channel = value as Record; + return Array.isArray(channel.users) && channel.users.length > 0; + }); + if (!ownerAllowFromConfigured && !hasAnyChannelUsersAllowlist) { + findings.push({ + checkId: "channels.slack.commands.slash.no_allowlists", + severity: "warn", + title: "Slack slash commands have no allowlists", + detail: + "Slack slash/native commands are enabled, but neither an owner allowFrom list nor any channels..users allowlist is configured; /… commands will be rejected for everyone.", + remediation: + "Approve yourself via pairing (recommended), or set channels.slack.allowFrom and/or channels.slack.channels..users.", + }); + } + + return findings; +} diff --git a/extensions/synology-chat/api.ts b/extensions/synology-chat/api.ts new file mode 100644 index 00000000000..ff9159142ab --- /dev/null +++ b/extensions/synology-chat/api.ts @@ -0,0 +1 @@ +export * from "./src/security-audit.js"; diff --git a/extensions/synology-chat/src/security-audit.ts b/extensions/synology-chat/src/security-audit.ts new file mode 100644 index 00000000000..d1293ed26ad --- /dev/null +++ b/extensions/synology-chat/src/security-audit.ts @@ -0,0 +1,28 @@ +import type { ResolvedSynologyChatAccount } from "./types.js"; + +export function collectSynologyChatSecurityAuditFindings(params: { + accountId?: string | null; + account: ResolvedSynologyChatAccount; + orderedAccountIds: string[]; + hasExplicitAccountPath: boolean; +}) { + if (!params.account.dangerouslyAllowNameMatching) { + return []; + } + const accountId = params.accountId?.trim() || params.account.accountId || "default"; + const accountNote = + params.orderedAccountIds.length > 1 || params.hasExplicitAccountPath + ? ` (account: ${accountId})` + : ""; + return [ + { + checkId: "channels.synology-chat.reply.dangerous_name_matching_enabled", + severity: "info" as const, + title: `Synology Chat dangerous name matching is enabled${accountNote}`, + detail: + "dangerouslyAllowNameMatching=true re-enables mutable username/nickname matching for reply delivery. This is a break-glass compatibility mode, not a hardened default.", + remediation: + "Prefer stable numeric Synology Chat user IDs for reply delivery, then disable dangerouslyAllowNameMatching.", + }, + ]; +} diff --git a/extensions/telegram/api.ts b/extensions/telegram/api.ts index e08c23ff52a..996a1c6161a 100644 --- a/extensions/telegram/api.ts +++ b/extensions/telegram/api.ts @@ -15,6 +15,7 @@ export * from "./src/outbound-adapter.js"; export * from "./src/outbound-params.js"; export * from "./src/probe.js"; export * from "./src/reaction-level.js"; +export * from "./src/security-audit.js"; export * from "./src/sticker-cache.js"; export * from "./src/status-issues.js"; export * from "./src/targets.js"; diff --git a/extensions/telegram/src/security-audit.ts b/extensions/telegram/src/security-audit.ts new file mode 100644 index 00000000000..be87bcc6774 --- /dev/null +++ b/extensions/telegram/src/security-audit.ts @@ -0,0 +1,163 @@ +import { resolveNativeSkillsEnabled } from "openclaw/plugin-sdk/config-runtime"; +import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime"; +import { readChannelAllowFromStore } from "openclaw/plugin-sdk/conversation-runtime"; +import type { ResolvedTelegramAccount } from "./accounts.js"; +import { isNumericTelegramUserId, normalizeTelegramAllowFromEntry } from "./allow-from.js"; + +function collectInvalidTelegramAllowFromEntries(params: { entries: unknown; target: Set }) { + if (!Array.isArray(params.entries)) { + return; + } + for (const entry of params.entries) { + const normalized = normalizeTelegramAllowFromEntry(entry); + if (!normalized || normalized === "*") { + continue; + } + if (!isNumericTelegramUserId(normalized)) { + params.target.add(normalized); + } + } +} + +export async function collectTelegramSecurityAuditFindings(params: { + cfg: OpenClawConfig; + accountId?: string | null; + account: ResolvedTelegramAccount; +}) { + const findings: Array<{ + checkId: string; + severity: "info" | "warn" | "critical"; + title: string; + detail: string; + remediation?: string; + }> = []; + if (params.cfg.commands?.text === false) { + return findings; + } + + const telegramCfg = params.account.config ?? {}; + const accountId = params.accountId?.trim() || params.account.accountId || "default"; + const defaultGroupPolicy = params.cfg.channels?.defaults?.groupPolicy; + const groupPolicy = + (telegramCfg.groupPolicy as string | undefined) ?? defaultGroupPolicy ?? "allowlist"; + const groups = telegramCfg.groups as Record | undefined; + const groupsConfigured = Boolean(groups) && Object.keys(groups ?? {}).length > 0; + const groupAccessPossible = + groupPolicy === "open" || (groupPolicy === "allowlist" && groupsConfigured); + if (!groupAccessPossible) { + return findings; + } + + const storeAllowFrom = await readChannelAllowFromStore("telegram", process.env, accountId).catch( + () => [], + ); + const storeHasWildcard = storeAllowFrom.some((value) => String(value).trim() === "*"); + const invalidTelegramAllowFromEntries = new Set(); + collectInvalidTelegramAllowFromEntries({ + entries: storeAllowFrom, + target: invalidTelegramAllowFromEntries, + }); + const groupAllowFrom = Array.isArray(telegramCfg.groupAllowFrom) + ? telegramCfg.groupAllowFrom + : []; + const groupAllowFromHasWildcard = groupAllowFrom.some((value) => String(value).trim() === "*"); + collectInvalidTelegramAllowFromEntries({ + entries: groupAllowFrom, + target: invalidTelegramAllowFromEntries, + }); + collectInvalidTelegramAllowFromEntries({ + entries: Array.isArray(telegramCfg.allowFrom) ? telegramCfg.allowFrom : [], + target: invalidTelegramAllowFromEntries, + }); + + let anyGroupOverride = false; + if (groups) { + for (const value of Object.values(groups)) { + if (!value || typeof value !== "object") { + continue; + } + const group = value as Record; + const allowFrom = Array.isArray(group.allowFrom) ? group.allowFrom : []; + if (allowFrom.length > 0) { + anyGroupOverride = true; + collectInvalidTelegramAllowFromEntries({ + entries: allowFrom, + target: invalidTelegramAllowFromEntries, + }); + } + const topics = group.topics; + if (!topics || typeof topics !== "object") { + continue; + } + for (const topicValue of Object.values(topics as Record)) { + if (!topicValue || typeof topicValue !== "object") { + continue; + } + const topic = topicValue as Record; + const topicAllow = Array.isArray(topic.allowFrom) ? topic.allowFrom : []; + if (topicAllow.length > 0) { + anyGroupOverride = true; + } + collectInvalidTelegramAllowFromEntries({ + entries: topicAllow, + target: invalidTelegramAllowFromEntries, + }); + } + } + } + + const hasAnySenderAllowlist = + storeAllowFrom.length > 0 || groupAllowFrom.length > 0 || anyGroupOverride; + + if (invalidTelegramAllowFromEntries.size > 0) { + const examples = Array.from(invalidTelegramAllowFromEntries).slice(0, 5); + const more = + invalidTelegramAllowFromEntries.size > examples.length + ? ` (+${invalidTelegramAllowFromEntries.size - examples.length} more)` + : ""; + findings.push({ + checkId: "channels.telegram.allowFrom.invalid_entries", + severity: "warn", + title: "Telegram allowlist contains non-numeric entries", + detail: + "Telegram sender authorization requires numeric Telegram user IDs. " + + `Found non-numeric allowFrom entries: ${examples.join(", ")}${more}.`, + remediation: + "Replace @username entries with numeric Telegram user IDs (use setup to resolve), then re-run the audit.", + }); + } + + if (storeHasWildcard || groupAllowFromHasWildcard) { + findings.push({ + checkId: "channels.telegram.groups.allowFrom.wildcard", + severity: "critical", + title: "Telegram group allowlist contains wildcard", + detail: + 'Telegram group sender allowlist contains "*", which allows any group member to run /… commands and control directives.', + remediation: + 'Remove "*" from channels.telegram.groupAllowFrom and pairing store; prefer explicit numeric Telegram user IDs.', + }); + return findings; + } + + if (!hasAnySenderAllowlist) { + const skillsEnabled = resolveNativeSkillsEnabled({ + providerId: "telegram", + providerSetting: (telegramCfg.commands as { nativeSkills?: unknown } | undefined) + ?.nativeSkills as boolean | "auto" | undefined, + globalSetting: params.cfg.commands?.nativeSkills, + }); + findings.push({ + checkId: "channels.telegram.groups.allowFrom.missing", + severity: "critical", + title: "Telegram group commands have no sender allowlist", + detail: + `Telegram group access is enabled but no sender allowlist is configured; this allows any group member to invoke /… commands` + + (skillsEnabled ? " (including skill commands)." : "."), + remediation: + "Approve yourself via pairing (recommended), or set channels.telegram.groupAllowFrom (or per-group groups..allowFrom).", + }); + } + + return findings; +} diff --git a/extensions/zalouser/api.ts b/extensions/zalouser/api.ts index 8f7fe4d268b..231e6e030b7 100644 --- a/extensions/zalouser/api.ts +++ b/extensions/zalouser/api.ts @@ -1,2 +1,3 @@ export * from "./src/setup-core.js"; export * from "./src/setup-surface.js"; +export * from "./src/security-audit.js"; diff --git a/extensions/zalouser/src/security-audit.ts b/extensions/zalouser/src/security-audit.ts new file mode 100644 index 00000000000..18212e2e1ab --- /dev/null +++ b/extensions/zalouser/src/security-audit.ts @@ -0,0 +1,71 @@ +import { isDangerousNameMatchingEnabled } from "../runtime-api.js"; +import type { ResolvedZalouserAccount } from "./accounts.js"; + +function isZalouserMutableGroupEntry(raw: string): boolean { + const text = raw.trim(); + if (!text || text === "*") { + return false; + } + const normalized = text + .replace(/^(zalouser|zlu):/i, "") + .replace(/^group:/i, "") + .trim(); + if (!normalized) { + return false; + } + if (/^\d+$/.test(normalized)) { + return false; + } + return !/^g-\S+$/i.test(normalized); +} + +export function collectZalouserSecurityAuditFindings(params: { + accountId?: string | null; + account: ResolvedZalouserAccount; + orderedAccountIds: string[]; + hasExplicitAccountPath: boolean; +}) { + const zalouserCfg = params.account.config ?? {}; + const accountId = params.accountId?.trim() || params.account.accountId || "default"; + const dangerousNameMatchingEnabled = isDangerousNameMatchingEnabled(zalouserCfg); + const zalouserPathPrefix = + params.orderedAccountIds.length > 1 || params.hasExplicitAccountPath + ? `channels.zalouser.accounts.${accountId}` + : "channels.zalouser"; + const mutableGroupEntries = new Set(); + const groups = zalouserCfg.groups; + if (groups && typeof groups === "object" && !Array.isArray(groups)) { + for (const key of Object.keys(groups as Record)) { + if (!isZalouserMutableGroupEntry(key)) { + continue; + } + mutableGroupEntries.add(`${zalouserPathPrefix}.groups:${key}`); + } + } + if (mutableGroupEntries.size === 0) { + return []; + } + const examples = Array.from(mutableGroupEntries).slice(0, 5); + const more = + mutableGroupEntries.size > examples.length + ? ` (+${mutableGroupEntries.size - examples.length} more)` + : ""; + const severity: "info" | "warn" = dangerousNameMatchingEnabled ? "info" : "warn"; + return [ + { + checkId: "channels.zalouser.groups.mutable_entries", + severity, + title: dangerousNameMatchingEnabled + ? "Zalouser group routing uses break-glass name matching" + : "Zalouser group routing contains mutable group entries", + detail: dangerousNameMatchingEnabled + ? "Zalouser group-name routing is explicitly enabled via dangerouslyAllowNameMatching. This mutable-identity mode is operator-selected break-glass behavior and out-of-scope for vulnerability reports by itself. " + + `Found: ${examples.join(", ")}${more}.` + : "Zalouser group auth is ID-only by default, so unresolved group-name or slug entries are ignored for auth and can drift from the intended trusted group. " + + `Found: ${examples.join(", ")}${more}.`, + remediation: dangerousNameMatchingEnabled + ? "Prefer stable Zalo group IDs (for example group: or provider-native g- ids), then disable dangerouslyAllowNameMatching." + : "Prefer stable Zalo group IDs in channels.zalouser.groups, or explicitly opt in with dangerouslyAllowNameMatching=true if you accept mutable group-name matching.", + }, + ]; +} diff --git a/src/agents/tools/cron-tool.test.ts b/src/agents/tools/cron-tool.test.ts index 243e59586f6..879333ce6c2 100644 --- a/src/agents/tools/cron-tool.test.ts +++ b/src/agents/tools/cron-tool.test.ts @@ -4,9 +4,13 @@ const { callGatewayMock } = vi.hoisted(() => ({ callGatewayMock: vi.fn(), })); -vi.mock("../agent-scope.js", () => ({ - resolveSessionAgentId: () => "agent-123", -})); +vi.mock("../agent-scope.js", async () => { + const actual = await vi.importActual("../agent-scope.js"); + return { + ...actual, + resolveSessionAgentId: () => "agent-123", + }; +}); import { createCronTool } from "./cron-tool.js"; diff --git a/src/channels/plugins/outbound/direct-text-media.ts b/src/channels/plugins/outbound/direct-text-media.ts index 64392671ea9..ced09844289 100644 --- a/src/channels/plugins/outbound/direct-text-media.ts +++ b/src/channels/plugins/outbound/direct-text-media.ts @@ -1,3 +1,4 @@ +import { sanitizeForPlainText } from "openclaw/plugin-sdk/outbound-runtime"; import { resolvePayloadMediaUrls, sendPayloadMediaSequence, @@ -112,6 +113,7 @@ export function createDirectTextMediaOutbound< chunker: chunkText, chunkerMode: "text", textChunkLimit: 4000, + sanitizeText: ({ text }) => sanitizeForPlainText(text), sendPayload: async (ctx) => await sendTextMediaPayload({ channel: params.channel, ctx, adapter: outbound }), sendText: async ({ cfg, to, text, accountId, deps, replyToId }) => { diff --git a/src/channels/plugins/types.adapters.ts b/src/channels/plugins/types.adapters.ts index 743cf0aa068..430a0f883d8 100644 --- a/src/channels/plugins/types.adapters.ts +++ b/src/channels/plugins/types.adapters.ts @@ -178,7 +178,10 @@ export type ChannelOutboundAdapter = { chunker?: ((text: string, limit: number) => string[]) | null; chunkerMode?: "text" | "markdown"; textChunkLimit?: number; + sanitizeText?: (params: { text: string; payload: ReplyPayload }) => string; pollMaxOptions?: number; + supportsPollDurationSeconds?: boolean; + supportsAnonymousPolls?: boolean; normalizePayload?: (params: { payload: ReplyPayload }) => ReplyPayload | null; shouldSkipPlainTextSanitization?: (params: { payload: ReplyPayload }) => boolean; resolveEffectiveTextChunkLimit?: (params: { @@ -198,6 +201,15 @@ export type ChannelOutboundAdapter = { payload: ReplyPayload; hint?: ChannelOutboundPayloadHint; }) => Promise | void; + shouldTreatRoutedTextAsVisible?: (params: { + kind: "tool" | "block" | "final"; + text?: string; + }) => boolean; + targetsMatchForReplySuppression?: (params: { + originTarget: string; + targetKey: string; + targetThreadId?: string; + }) => boolean; resolveTarget?: (params: { cfg?: OpenClawConfig; to?: string; @@ -217,6 +229,7 @@ export type ChannelOutboundAdapter = { export type ChannelStatusAdapter = { defaultRuntime?: ChannelAccountSnapshot; + skipStaleSocketHealthCheck?: boolean; buildChannelSummary?: (params: { account: ResolvedAccount; cfg: OpenClawConfig; @@ -497,6 +510,84 @@ export type ChannelElevatedAdapter = { export type ChannelCommandAdapter = { enforceOwnerForCommands?: boolean; skipWhenConfigEmpty?: boolean; + nativeCommandsAutoEnabled?: boolean; + nativeSkillsAutoEnabled?: boolean; + preferSenderE164ForCommands?: boolean; + resolveNativeCommandName?: (params: { + commandKey: string; + defaultName: string; + }) => string | undefined; + buildCommandsListChannelData?: (params: { + currentPage: number; + totalPages: number; + agentId?: string; + }) => ReplyPayload["channelData"] | null; + buildModelsProviderChannelData?: (params: { + providers: Array<{ id: string; count: number }>; + }) => ReplyPayload["channelData"] | null; + buildModelsListChannelData?: (params: { + provider: string; + models: readonly string[]; + currentModel?: string; + currentPage: number; + totalPages: number; + pageSize?: number; + modelNames?: ReadonlyMap; + }) => ReplyPayload["channelData"] | null; + buildModelBrowseChannelData?: () => ReplyPayload["channelData"] | null; +}; + +export type ChannelDoctorConfigMutation = { + config: OpenClawConfig; + changes: string[]; + warnings?: string[]; +}; + +export type ChannelDoctorSequenceResult = { + changeNotes: string[]; + warningNotes: string[]; +}; + +export type ChannelDoctorEmptyAllowlistAccountContext = { + account: Record; + channelName: string; + dmPolicy?: string; + effectiveAllowFrom?: Array; + parent?: Record; + prefix: string; +}; + +export type ChannelDoctorAdapter = { + dmAllowFromMode?: "topOnly" | "topOrNested" | "nestedOnly"; + groupModel?: "sender" | "route" | "hybrid"; + groupAllowFromFallbackToAllowFrom?: boolean; + warnOnEmptyGroupSenderAllowlist?: boolean; + normalizeCompatibilityConfig?: (params: { cfg: OpenClawConfig }) => ChannelDoctorConfigMutation; + collectPreviewWarnings?: (params: { + cfg: OpenClawConfig; + doctorFixCommand: string; + }) => string[] | Promise; + collectMutableAllowlistWarnings?: (params: { + cfg: OpenClawConfig; + }) => string[] | Promise; + repairConfig?: (params: { + cfg: OpenClawConfig; + doctorFixCommand: string; + }) => ChannelDoctorConfigMutation | Promise; + runConfigSequence?: (params: { + cfg: OpenClawConfig; + env: NodeJS.ProcessEnv; + shouldRepair: boolean; + }) => ChannelDoctorSequenceResult | Promise; + cleanStaleConfig?: (params: { + cfg: OpenClawConfig; + }) => ChannelDoctorConfigMutation | Promise; + collectEmptyAllowlistExtraWarnings?: ( + params: ChannelDoctorEmptyAllowlistAccountContext, + ) => string[]; + shouldSkipDefaultEmptyGroupAllowlistWarning?: ( + params: ChannelDoctorEmptyAllowlistAccountContext, + ) => boolean; }; export type ChannelLifecycleAdapter = { @@ -511,6 +602,16 @@ export type ChannelLifecycleAdapter = { accountId: string; runtime: RuntimeEnv; }) => Promise | void; + runStartupMaintenance?: (params: { + cfg: OpenClawConfig; + env?: NodeJS.ProcessEnv; + log: { + info?: (message: string) => void; + warn?: (message: string) => void; + }; + trigger?: string; + logPrefix?: string; + }) => Promise | void; }; export type ChannelApprovalDeliveryAdapter = { @@ -694,6 +795,7 @@ export type ChannelCommandConversationContext = { }; export type ChannelConfiguredBindingProvider = { + selfParentConversationByDefault?: boolean; compileConfiguredBinding: (params: { binding: ConfiguredBindingRule; conversationId: string; @@ -711,6 +813,45 @@ export type ChannelConfiguredBindingProvider = { export type ChannelConversationBindingSupport = { supportsCurrentConversationBinding?: boolean; + /** + * Preferred placement when a command is started from a top-level conversation + * without an existing native thread id. + * + * - `current`: bind/spawn in the current conversation + * - `child`: create a child thread/conversation first + */ + defaultTopLevelPlacement?: "current" | "child"; + resolveConversationRef?: (params: { + accountId?: string | null; + conversationId: string; + parentConversationId?: string; + threadId?: string | number | null; + }) => { + conversationId: string; + parentConversationId?: string; + } | null; + buildBoundReplyChannelData?: (params: { + operation: "acp-spawn"; + placement: "current" | "child"; + conversation: { + channel: string; + accountId?: string | null; + conversationId: string; + parentConversationId?: string; + }; + }) => ReplyPayload["channelData"] | null | Promise; + shouldStripThreadFromAnnounceOrigin?: (params: { + requester: { + channel?: string; + to?: string; + threadId?: string | number; + }; + entry: { + channel?: string; + to?: string; + threadId?: string | number; + }; + }) => boolean; setIdleTimeoutBySessionKey?: (params: { targetSessionKey: string; accountId?: string | null; @@ -745,4 +886,27 @@ export type ChannelSecurityAdapter = { ctx: ChannelSecurityContext, ) => ChannelSecurityDmPolicy | null; collectWarnings?: (ctx: ChannelSecurityContext) => Promise | string[]; + collectAuditFindings?: ( + ctx: ChannelSecurityContext & { + sourceConfig: OpenClawConfig; + orderedAccountIds: string[]; + hasExplicitAccountPath: boolean; + }, + ) => + | Promise< + Array<{ + checkId: string; + severity: "info" | "warn" | "critical"; + title: string; + detail: string; + remediation?: string; + }> + > + | Array<{ + checkId: string; + severity: "info" | "warn" | "critical"; + title: string; + detail: string; + remediation?: string; + }>; }; diff --git a/src/channels/plugins/types.core.ts b/src/channels/plugins/types.core.ts index 3cc48eeace9..7b20614c979 100644 --- a/src/channels/plugins/types.core.ts +++ b/src/channels/plugins/types.core.ts @@ -401,6 +401,20 @@ export type ChannelMessagingAdapter = { sessionKey: string; ctx: MsgContext; }) => string | undefined; + resolveInboundConversation?: (params: { + from?: string; + to?: string; + conversationId?: string; + threadId?: string | number; + isGroup: boolean; + }) => { + conversationId?: string; + parentConversationId?: string; + } | null; + resolveDeliveryTarget?: (params: { conversationId: string; parentConversationId?: string }) => { + to?: string; + threadId?: string; + } | null; /** * Canonical plugin-owned session conversation grammar. * Use this when the provider encodes thread or scoped-conversation semantics @@ -500,6 +514,12 @@ export type ChannelAgentPromptAdapter = { cfg: OpenClawConfig; accountId?: string | null; }) => string[] | undefined; + inboundFormattingHints?: (params: { accountId?: string | null }) => + | { + text_markup: string; + rules: string[]; + } + | undefined; reactionGuidance?: (params: { cfg: OpenClawConfig; accountId?: string | null; @@ -567,6 +587,13 @@ export type ChannelMessageActionAdapter = { params: ChannelMessageActionDiscoveryContext, ) => ChannelMessageToolDiscovery | null | undefined; supportsAction?: (params: { action: ChannelMessageActionName }) => boolean; + resolveCliActionRequest?: (params: { + action: ChannelMessageActionName; + args: Record; + }) => { + action: ChannelMessageActionName; + args: Record; + }; requiresTrustedRequesterSender?: (params: { action: ChannelMessageActionName; toolContext?: ChannelThreadingToolContext; diff --git a/src/channels/plugins/types.plugin.ts b/src/channels/plugins/types.plugin.ts index 5ee5f1d8ea5..886b6f60423 100644 --- a/src/channels/plugins/types.plugin.ts +++ b/src/channels/plugins/types.plugin.ts @@ -7,6 +7,7 @@ import type { ChannelCommandAdapter, ChannelConfigAdapter, ChannelConversationBindingSupport, + ChannelDoctorAdapter, ChannelDirectoryAdapter, ChannelResolverAdapter, ChannelElevatedAdapter, @@ -107,6 +108,7 @@ export type ChannelPlugin([`send${pascal}`]); + if (pascal.startsWith("I") && pascal.length > 1) { + keys.add(`sendI${pascal.slice(1)}`); + } + if (pascal.startsWith("Ms") && pascal.length > 2) { + keys.add(`sendMS${pascal.slice(2)}`); + } + return [...keys]; +} /** * Pass CLI send sources through as-is — both CliOutboundSendSource and @@ -31,17 +48,26 @@ const CHANNEL_TO_LEGACY_DEP_KEY = { export function createOutboundSendDepsFromCliSource(deps: CliOutboundSendSource): OutboundSendDeps { const outbound: OutboundSendDeps = { ...deps }; - for (const [legacySourceKey, channelId] of Object.entries(LEGACY_SOURCE_TO_CHANNEL)) { + for (const legacySourceKey of Object.keys(deps)) { + const channelId = resolveChannelIdFromLegacySourceKey(legacySourceKey); + if (!channelId) { + continue; + } const sourceValue = deps[legacySourceKey]; if (sourceValue !== undefined && outbound[channelId] === undefined) { outbound[channelId] = sourceValue; } } - for (const [channelId, legacyDepKey] of Object.entries(CHANNEL_TO_LEGACY_DEP_KEY)) { + for (const channelId of Object.keys(outbound)) { const sourceValue = outbound[channelId]; - if (sourceValue !== undefined && outbound[legacyDepKey] === undefined) { - outbound[legacyDepKey] = sourceValue; + if (sourceValue === undefined) { + continue; + } + for (const legacyDepKey of resolveLegacyDepKeysForChannel(channelId)) { + if (outbound[legacyDepKey] === undefined) { + outbound[legacyDepKey] = sourceValue; + } } } diff --git a/src/cli/send-runtime/discord.ts b/src/cli/send-runtime/discord.ts index 4452dc61e95..103b678927f 100644 --- a/src/cli/send-runtime/discord.ts +++ b/src/cli/send-runtime/discord.ts @@ -1,7 +1,6 @@ -import { createPluginBoundaryRuntimeSend } from "./plugin-boundary-send.js"; +import { createChannelOutboundRuntimeSend } from "./channel-outbound-send.js"; -export const runtimeSend = createPluginBoundaryRuntimeSend({ - pluginId: "discord", - exportName: "sendMessageDiscord", - missingLabel: "Discord plugin runtime", +export const runtimeSend = createChannelOutboundRuntimeSend({ + channelId: "discord", + unavailableMessage: "Discord outbound adapter is unavailable.", }); diff --git a/src/cli/send-runtime/plugin-boundary-send.ts b/src/cli/send-runtime/plugin-boundary-send.ts deleted file mode 100644 index 8cd5fbc0b25..00000000000 --- a/src/cli/send-runtime/plugin-boundary-send.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { createCachedPluginBoundaryModuleLoader } from "../../plugins/runtime/runtime-plugin-boundary.js"; - -type RuntimeSendModule = Record; - -export type RuntimeSend = { - sendMessage: (...args: unknown[]) => Promise; -}; - -function resolveRuntimeExport( - module: RuntimeSendModule | null, - pluginId: string, - exportName: string, -): (...args: unknown[]) => Promise { - const candidate = module?.[exportName]; - if (typeof candidate !== "function") { - throw new Error(`${pluginId} plugin runtime is unavailable: missing export '${exportName}'`); - } - return candidate as (...args: unknown[]) => Promise; -} - -export function createPluginBoundaryRuntimeSend(params: { - pluginId: string; - exportName: string; - missingLabel: string; -}): RuntimeSend { - const loadRuntimeModuleSync = createCachedPluginBoundaryModuleLoader({ - pluginId: params.pluginId, - entryBaseName: "runtime-api", - required: true, - missingLabel: params.missingLabel, - }); - - return { - sendMessage: (...args) => - resolveRuntimeExport(loadRuntimeModuleSync(), params.pluginId, params.exportName)(...args), - }; -} diff --git a/src/cli/send-runtime/signal.ts b/src/cli/send-runtime/signal.ts index 4e20c47d8e6..c47ed80c134 100644 --- a/src/cli/send-runtime/signal.ts +++ b/src/cli/send-runtime/signal.ts @@ -1,7 +1,6 @@ -import { createPluginBoundaryRuntimeSend } from "./plugin-boundary-send.js"; +import { createChannelOutboundRuntimeSend } from "./channel-outbound-send.js"; -export const runtimeSend = createPluginBoundaryRuntimeSend({ - pluginId: "signal", - exportName: "sendMessageSignal", - missingLabel: "Signal plugin runtime", +export const runtimeSend = createChannelOutboundRuntimeSend({ + channelId: "signal", + unavailableMessage: "Signal outbound adapter is unavailable.", }); diff --git a/src/cli/send-runtime/slack.ts b/src/cli/send-runtime/slack.ts index fd531f2493c..2e3f592d1a8 100644 --- a/src/cli/send-runtime/slack.ts +++ b/src/cli/send-runtime/slack.ts @@ -1,7 +1,6 @@ -import { createPluginBoundaryRuntimeSend } from "./plugin-boundary-send.js"; +import { createChannelOutboundRuntimeSend } from "./channel-outbound-send.js"; -export const runtimeSend = createPluginBoundaryRuntimeSend({ - pluginId: "slack", - exportName: "sendMessageSlack", - missingLabel: "Slack plugin runtime", +export const runtimeSend = createChannelOutboundRuntimeSend({ + channelId: "slack", + unavailableMessage: "Slack outbound adapter is unavailable.", }); diff --git a/src/cli/send-runtime/telegram.ts b/src/cli/send-runtime/telegram.ts index b64ccde99f3..dd02555ff74 100644 --- a/src/cli/send-runtime/telegram.ts +++ b/src/cli/send-runtime/telegram.ts @@ -1,39 +1,6 @@ -import { loadChannelOutboundAdapter } from "../../channels/plugins/outbound/load.js"; -import { loadConfig } from "../../config/config.js"; +import { createChannelOutboundRuntimeSend } from "./channel-outbound-send.js"; -type TelegramRuntimeSendOpts = { - cfg?: ReturnType; - mediaUrl?: string; - mediaLocalRoots?: readonly string[]; - accountId?: string; - messageThreadId?: string | number; - replyToMessageId?: string | number; - silent?: boolean; - forceDocument?: boolean; - gatewayClientScopes?: readonly string[]; -}; - -export const runtimeSend = { - sendMessage: async (to: string, text: string, opts: TelegramRuntimeSendOpts = {}) => { - const outbound = await loadChannelOutboundAdapter("telegram"); - if (!outbound?.sendText) { - throw new Error("Telegram outbound adapter is unavailable."); - } - return await outbound.sendText({ - cfg: opts.cfg ?? loadConfig(), - to, - text, - mediaUrl: opts.mediaUrl, - mediaLocalRoots: opts.mediaLocalRoots, - accountId: opts.accountId, - threadId: opts.messageThreadId, - replyToId: - opts.replyToMessageId == null - ? undefined - : String(opts.replyToMessageId).trim() || undefined, - silent: opts.silent, - forceDocument: opts.forceDocument, - gatewayClientScopes: opts.gatewayClientScopes, - }); - }, -}; +export const runtimeSend = createChannelOutboundRuntimeSend({ + channelId: "telegram", + unavailableMessage: "Telegram outbound adapter is unavailable.", +}); diff --git a/src/cli/send-runtime/whatsapp.ts b/src/cli/send-runtime/whatsapp.ts index 6c27be2de69..a050fc81824 100644 --- a/src/cli/send-runtime/whatsapp.ts +++ b/src/cli/send-runtime/whatsapp.ts @@ -1,7 +1,6 @@ -import { createPluginBoundaryRuntimeSend } from "./plugin-boundary-send.js"; +import { createChannelOutboundRuntimeSend } from "./channel-outbound-send.js"; -export const runtimeSend = createPluginBoundaryRuntimeSend({ - pluginId: "whatsapp", - exportName: "sendMessageWhatsApp", - missingLabel: "WhatsApp plugin runtime", +export const runtimeSend = createChannelOutboundRuntimeSend({ + channelId: "whatsapp", + unavailableMessage: "WhatsApp outbound adapter is unavailable.", }); diff --git a/src/infra/outbound/current-conversation-bindings.test.ts b/src/infra/outbound/current-conversation-bindings.test.ts index 08e79fc66c2..e5da34d75c9 100644 --- a/src/infra/outbound/current-conversation-bindings.test.ts +++ b/src/infra/outbound/current-conversation-bindings.test.ts @@ -76,7 +76,7 @@ describe("generic current-conversation bindings", () => { ).toBeNull(); }); - it("keeps Slack current-conversation binding support when the runtime registry is empty", () => { + it("requires an active channel plugin registration", () => { setActivePluginRegistry(createTestRegistry([])); expect( @@ -84,12 +84,7 @@ describe("generic current-conversation bindings", () => { channel: "slack", accountId: "default", }), - ).toEqual({ - adapterAvailable: true, - bindSupported: true, - unbindSupported: true, - placements: ["current"], - }); + ).toBeNull(); }); it("reloads persisted bindings after the in-memory cache is cleared", async () => { diff --git a/src/infra/outbound/current-conversation-bindings.ts b/src/infra/outbound/current-conversation-bindings.ts index ee8f72094aa..3708cba2d8f 100644 --- a/src/infra/outbound/current-conversation-bindings.ts +++ b/src/infra/outbound/current-conversation-bindings.ts @@ -22,7 +22,6 @@ type PersistedCurrentConversationBindingsFile = { const CURRENT_BINDINGS_FILE_VERSION = 1; const CURRENT_BINDINGS_ID_PREFIX = "generic:"; -const FALLBACK_CURRENT_CONVERSATION_BINDING_CHANNELS = new Set(["slack"]); let bindingsLoaded = false; let persistPromise: Promise = Promise.resolve(); @@ -136,10 +135,7 @@ function resolveChannelSupportsCurrentConversationBinding(channel: string): bool if (plugin?.conversationBindings?.supportsCurrentConversationBinding === true) { return true; } - // Slack live/gateway tests intentionally skip channel startup, so there is no - // active runtime plugin snapshot even though the generic current-conversation - // path is still expected to work. - return FALLBACK_CURRENT_CONVERSATION_BINDING_CHANNELS.has(normalized); + return false; } export function getGenericCurrentConversationBindingCapabilities(params: { diff --git a/src/infra/outbound/deliver.test-helpers.ts b/src/infra/outbound/deliver.test-helpers.ts index 5760d8c1be2..09228101587 100644 --- a/src/infra/outbound/deliver.test-helpers.ts +++ b/src/infra/outbound/deliver.test-helpers.ts @@ -1,6 +1,9 @@ import { vi } from "vitest"; import type { OpenClawConfig } from "../../config/config.js"; -import { setActivePluginRegistry } from "../../plugins/runtime.js"; +import { + releasePinnedPluginChannelRegistry, + setActivePluginRegistry, +} from "../../plugins/runtime.js"; import { createOutboundTestPlugin, createTestRegistry } from "../../test-utils/channel-plugins.js"; import { createIMessageTestPlugin } from "../../test-utils/imessage-test-plugin.js"; import { createInternalHookEventPayload } from "../../test-utils/internal-hook-event-payload.js"; @@ -174,6 +177,7 @@ export const defaultRegistry = createTestRegistry([ export const emptyRegistry = createTestRegistry([]); export function resetDeliverTestState() { + releasePinnedPluginChannelRegistry(); setActivePluginRegistry(defaultRegistry); deliverMocks.hooks.runner.hasHooks = () => false; deliverMocks.hooks.runner.runMessageSent = async () => {}; @@ -190,6 +194,7 @@ export function resetDeliverTestState() { } export function clearDeliverTestRegistry() { + releasePinnedPluginChannelRegistry(); setActivePluginRegistry(emptyRegistry); } diff --git a/src/infra/outbound/deliver.test.ts b/src/infra/outbound/deliver.test.ts index 7582c91a268..454af46eff6 100644 --- a/src/infra/outbound/deliver.test.ts +++ b/src/infra/outbound/deliver.test.ts @@ -4,7 +4,10 @@ import type { OpenClawConfig } from "../../config/config.js"; import { createHookRunner } from "../../plugins/hooks.js"; import { addTestHook } from "../../plugins/hooks.test-helpers.js"; import { createEmptyPluginRegistry } from "../../plugins/registry.js"; -import { setActivePluginRegistry } from "../../plugins/runtime.js"; +import { + releasePinnedPluginChannelRegistry, + setActivePluginRegistry, +} from "../../plugins/runtime.js"; import type { PluginHookRegistration } from "../../plugins/types.js"; import { createOutboundTestPlugin, createTestRegistry } from "../../test-utils/channel-plugins.js"; import { createIMessageTestPlugin } from "../../test-utils/imessage-test-plugin.js"; @@ -189,6 +192,7 @@ describe("deliverOutboundPayloads", () => { }); beforeEach(() => { + releasePinnedPluginChannelRegistry(); setActivePluginRegistry(defaultRegistry); mocks.appendAssistantMessageToSessionTranscript.mockClear(); hookMocks.runner.hasHooks.mockClear(); @@ -210,6 +214,7 @@ describe("deliverOutboundPayloads", () => { }); afterEach(() => { + releasePinnedPluginChannelRegistry(); setActivePluginRegistry(emptyRegistry); }); it("chunks direct adapter text and preserves delivery overrides across sends", async () => { diff --git a/src/infra/outbound/deliver.ts b/src/infra/outbound/deliver.ts index 8d4d9683cb0..069cdd4b18f 100644 --- a/src/infra/outbound/deliver.ts +++ b/src/infra/outbound/deliver.ts @@ -35,7 +35,6 @@ import type { OutboundIdentity } from "./identity.js"; import type { DeliveryMirror } from "./mirror.js"; import type { NormalizedOutboundPayload } from "./payloads.js"; import { normalizeReplyPayloadsForDelivery } from "./payloads.js"; -import { isPlainTextSurface, sanitizeForPlainText } from "./sanitize-text.js"; import { resolveOutboundSendDep, type OutboundSendDeps } from "./send-deps.js"; import type { OutboundSessionContext } from "./session-context.js"; import type { OutboundChannel } from "./targets.js"; @@ -84,6 +83,7 @@ type ChannelHandler = { chunkerMode?: "text" | "markdown"; textChunkLimit?: number; supportsMedia: boolean; + sanitizeText?: (payload: ReplyPayload) => string; normalizePayload?: (payload: ReplyPayload) => ReplyPayload | null; shouldSkipPlainTextSanitization?: (payload: ReplyPayload) => boolean; resolveEffectiveTextChunkLimit?: (fallbackLimit?: number) => number | undefined; @@ -192,6 +192,9 @@ function createPluginHandler( chunkerMode, textChunkLimit: outbound.textChunkLimit, supportsMedia: Boolean(sendMedia), + sanitizeText: outbound.sanitizeText + ? (payload) => outbound.sanitizeText!({ text: payload.text ?? "", payload }) + : undefined, normalizePayload: outbound.normalizePayload ? (payload) => outbound.normalizePayload!({ payload }) : undefined, @@ -335,20 +338,16 @@ function normalizeEmptyPayloadForDelivery(payload: ReplyPayload): ReplyPayload | function normalizePayloadsForChannelDelivery( payloads: ReplyPayload[], - channel: Exclude, handler: ChannelHandler, ): ReplyPayload[] { const normalizedPayloads: ReplyPayload[] = []; for (const payload of normalizeReplyPayloadsForDelivery(payloads)) { let sanitizedPayload = payload; - // Strip HTML tags for plain-text surfaces (WhatsApp, Signal, etc.) - // Models occasionally produce
, , etc. that render as literal text. - // See https://github.com/openclaw/openclaw/issues/31884 - if (isPlainTextSurface(channel) && sanitizedPayload.text) { + if (handler.sanitizeText && sanitizedPayload.text) { if (!handler.shouldSkipPlainTextSanitization?.(sanitizedPayload)) { sanitizedPayload = { ...sanitizedPayload, - text: sanitizeForPlainText(sanitizedPayload.text), + text: handler.sanitizeText(sanitizedPayload), }; } } @@ -650,7 +649,7 @@ async function deliverOutboundPayloadsCore( results.push(await handler.sendText(chunk, overrides)); } }; - const normalizedPayloads = normalizePayloadsForChannelDelivery(payloads, channel, handler); + const normalizedPayloads = normalizePayloadsForChannelDelivery(payloads, handler); const hookRunner = getGlobalHookRunner(); const sessionKeyForInternalHooks = params.mirror?.sessionKey ?? params.session?.key; const mirrorIsGroup = params.mirror?.isGroup; diff --git a/src/infra/outbound/delivery-queue-recovery.ts b/src/infra/outbound/delivery-queue-recovery.ts index 26057f03e58..76ccc403ffb 100644 --- a/src/infra/outbound/delivery-queue-recovery.ts +++ b/src/infra/outbound/delivery-queue-recovery.ts @@ -49,7 +49,7 @@ const PERMANENT_ERROR_PATTERNS: readonly RegExp[] = [ /chat_id is empty/i, /recipient is not a valid/i, /outbound not configured for channel/i, - /ambiguous discord recipient/i, + /ambiguous .* recipient/i, /User .* not in room/i, ]; diff --git a/src/infra/outbound/message-action-runner.ts b/src/infra/outbound/message-action-runner.ts index 1bd09942f93..d6018acf5fd 100644 --- a/src/infra/outbound/message-action-runner.ts +++ b/src/infra/outbound/message-action-runner.ts @@ -369,7 +369,7 @@ async function handleBroadcastAction( } return { kind: "broadcast", - channel: targetChannels[0] ?? "discord", + channel: targetChannels[0] ?? channelHint?.trim().toLowerCase() ?? "unknown", action: "broadcast", handledBy: input.dryRun ? "dry-run" : "core", payload: { results }, diff --git a/src/infra/outbound/sanitize-text.test.ts b/src/infra/outbound/sanitize-text.test.ts index b22b45df271..f43ae615246 100644 --- a/src/infra/outbound/sanitize-text.test.ts +++ b/src/infra/outbound/sanitize-text.test.ts @@ -1,27 +1,5 @@ import { describe, expect, it } from "vitest"; -import { isPlainTextSurface, sanitizeForPlainText } from "./sanitize-text.js"; - -// --------------------------------------------------------------------------- -// isPlainTextSurface -// --------------------------------------------------------------------------- - -describe("isPlainTextSurface", () => { - it.each(["whatsapp", "signal", "sms", "irc", "telegram", "imessage", "googlechat"])( - "returns true for %s", - (channel) => { - expect(isPlainTextSurface(channel)).toBe(true); - }, - ); - - it.each(["discord", "slack", "web", "matrix"])("returns false for %s", (channel) => { - expect(isPlainTextSurface(channel)).toBe(false); - }); - - it("is case-insensitive", () => { - expect(isPlainTextSurface("WhatsApp")).toBe(true); - expect(isPlainTextSurface("SIGNAL")).toBe(true); - }); -}); +import { sanitizeForPlainText } from "./sanitize-text.js"; // --------------------------------------------------------------------------- // sanitizeForPlainText diff --git a/src/infra/outbound/sanitize-text.ts b/src/infra/outbound/sanitize-text.ts index 84adfda3a83..36b0bd3e254 100644 --- a/src/infra/outbound/sanitize-text.ts +++ b/src/infra/outbound/sanitize-text.ts @@ -11,22 +11,6 @@ * @see https://github.com/openclaw/openclaw/issues/18558 */ -/** Channels where HTML tags should be converted/stripped. */ -const PLAIN_TEXT_SURFACES = new Set([ - "whatsapp", - "signal", - "sms", - "irc", - "telegram", - "imessage", - "googlechat", -]); - -/** Returns `true` when the channel cannot render raw HTML. */ -export function isPlainTextSurface(channelId: string): boolean { - return PLAIN_TEXT_SURFACES.has(channelId.toLowerCase()); -} - /** * Convert common HTML tags to their plain-text/lightweight-markup equivalents * and strip anything that remains. diff --git a/src/infra/outbound/send-deps.ts b/src/infra/outbound/send-deps.ts index be2a5d43cb2..19a53190f7a 100644 --- a/src/infra/outbound/send-deps.ts +++ b/src/infra/outbound/send-deps.ts @@ -1,41 +1,42 @@ -type LegacyOutboundSendDeps = { - sendWhatsApp?: unknown; - sendTelegram?: unknown; - sendDiscord?: unknown; - sendSlack?: unknown; - sendSignal?: unknown; - sendIMessage?: unknown; - sendMatrix?: unknown; - sendMSTeams?: unknown; -}; - /** * Dynamic bag of per-channel send functions, keyed by channel ID. * Each outbound adapter resolves its own function from this record and * falls back to a direct import when the key is absent. */ -export type OutboundSendDeps = LegacyOutboundSendDeps & { [channelId: string]: unknown }; +export type OutboundSendDeps = { [channelId: string]: unknown }; -const LEGACY_SEND_DEP_KEYS = { - whatsapp: "sendWhatsApp", - telegram: "sendTelegram", - discord: "sendDiscord", - slack: "sendSlack", - signal: "sendSignal", - imessage: "sendIMessage", - matrix: "sendMatrix", - msteams: "sendMSTeams", -} as const satisfies Record; +function resolveLegacyDepKeysForChannel(channelId: string): string[] { + const compact = channelId.replace(/[^a-z0-9]+/gi, ""); + if (!compact) { + return []; + } + const pascal = compact.charAt(0).toUpperCase() + compact.slice(1); + const keys = new Set([`send${pascal}`]); + if (compact === "whatsapp") { + keys.add("sendWhatsApp"); + } + if (pascal.startsWith("I") && pascal.length > 1) { + keys.add(`sendI${pascal.slice(1)}`); + } + if (pascal.startsWith("Ms") && pascal.length > 2) { + keys.add(`sendMS${pascal.slice(2)}`); + } + return [...keys]; +} export function resolveOutboundSendDep( deps: OutboundSendDeps | null | undefined, - channelId: keyof typeof LEGACY_SEND_DEP_KEYS, + channelId: string, ): T | undefined { const dynamic = deps?.[channelId]; if (dynamic !== undefined) { return dynamic as T; } - const legacyKey = LEGACY_SEND_DEP_KEYS[channelId]; - const legacy = deps?.[legacyKey]; - return legacy as T | undefined; + for (const legacyKey of resolveLegacyDepKeysForChannel(channelId)) { + const legacy = deps?.[legacyKey]; + if (legacy !== undefined) { + return legacy as T; + } + } + return undefined; } diff --git a/src/plugin-sdk/channel-contract.ts b/src/plugin-sdk/channel-contract.ts index 8753aa4331c..0c117ee83de 100644 --- a/src/plugin-sdk/channel-contract.ts +++ b/src/plugin-sdk/channel-contract.ts @@ -14,9 +14,16 @@ export type { ChannelMessageActionName, ChannelMessageToolDiscovery, ChannelMessageToolSchemaContribution, + ChannelStructuredComponents, ChannelStatusIssue, ChannelThreadingContext, ChannelThreadingToolContext, } from "../channels/plugins/types.js"; -export type { ChannelDirectoryAdapter } from "../channels/plugins/types.adapters.js"; +export type { + ChannelDirectoryAdapter, + ChannelDoctorAdapter, + ChannelDoctorConfigMutation, + ChannelDoctorEmptyAllowlistAccountContext, + ChannelDoctorSequenceResult, +} from "../channels/plugins/types.adapters.js"; diff --git a/src/plugin-sdk/command-auth.ts b/src/plugin-sdk/command-auth.ts index a20d2709382..5648c87ca85 100644 --- a/src/plugin-sdk/command-auth.ts +++ b/src/plugin-sdk/command-auth.ts @@ -71,7 +71,6 @@ export { resolveSkillCommandInvocation, } from "../auto-reply/skill-commands.js"; export type { SkillCommandSpec } from "../agents/skills.js"; -export { buildCommandsPaginationKeyboard } from "../auto-reply/reply/commands-info.js"; export { buildModelsProviderData, formatModelsAvailableHeader, diff --git a/src/plugin-sdk/config-runtime.ts b/src/plugin-sdk/config-runtime.ts index cc69aac095b..891f880c729 100644 --- a/src/plugin-sdk/config-runtime.ts +++ b/src/plugin-sdk/config-runtime.ts @@ -41,6 +41,8 @@ export { resolveTelegramCustomCommands, } from "../config/telegram-custom-commands.js"; export { + formatSlackStreamingBooleanMigrationMessage, + formatSlackStreamModeMigrationMessage, mapStreamingModeToSlackLegacyDraftStreamMode, resolveDiscordPreviewStreamMode, resolveSlackNativeStreaming, diff --git a/src/plugin-sdk/conversation-runtime.ts b/src/plugin-sdk/conversation-runtime.ts index 2fc8c87bf9d..5658036e285 100644 --- a/src/plugin-sdk/conversation-runtime.ts +++ b/src/plugin-sdk/conversation-runtime.ts @@ -42,8 +42,6 @@ export { resolveThreadBindingThreadName, } from "../channels/thread-bindings-messages.js"; export { - DISCORD_THREAD_BINDING_CHANNEL, - MATRIX_THREAD_BINDING_CHANNEL, formatThreadBindingDisabledError, resolveThreadBindingEffectiveExpiresAt, resolveThreadBindingIdleTimeoutMs, diff --git a/src/plugin-sdk/core.ts b/src/plugin-sdk/core.ts index fc2c0b07f2b..16b944916f2 100644 --- a/src/plugin-sdk/core.ts +++ b/src/plugin-sdk/core.ts @@ -34,7 +34,6 @@ export type { OpenClawPluginService, OpenClawPluginServiceContext, PluginCommandContext, - PluginInteractiveTelegramHandlerContext, PluginLogger, ProviderAuthContext, ProviderAuthDoctorHintContext, @@ -247,6 +246,8 @@ type CreateChannelPluginBaseOptions = { meta?: Partial["meta"]>>; setupWizard?: NonNullable["setupWizard"]>; capabilities?: ChannelPlugin["capabilities"]; + commands?: ChannelPlugin["commands"]; + doctor?: ChannelPlugin["doctor"]; agentPrompt?: ChannelPlugin["agentPrompt"]; streaming?: ChannelPlugin["streaming"]; reload?: ChannelPlugin["reload"]; @@ -267,6 +268,8 @@ type CreatedChannelPluginBase = Pick< ChannelPlugin, | "setupWizard" | "capabilities" + | "commands" + | "doctor" | "agentPrompt" | "streaming" | "reload" @@ -357,6 +360,7 @@ type ChatChannelSecurityOptions string; }; collectWarnings?: ChannelSecurityAdapter["collectWarnings"]; + collectAuditFindings?: ChannelSecurityAdapter["collectAuditFindings"]; }; type ChatChannelPairingOptions = { @@ -464,6 +468,9 @@ function resolveChatChannelSecurity( }, ...(params.setupWizard ? { setupWizard: params.setupWizard } : {}), ...(params.capabilities ? { capabilities: params.capabilities } : {}), + ...(params.commands ? { commands: params.commands } : {}), + ...(params.doctor ? { doctor: params.doctor } : {}), ...(params.agentPrompt ? { agentPrompt: params.agentPrompt } : {}), ...(params.streaming ? { streaming: params.streaming } : {}), ...(params.reload ? { reload: params.reload } : {}), diff --git a/src/plugin-sdk/infra-runtime.ts b/src/plugin-sdk/infra-runtime.ts index a4c38c1317e..950fa0af1e0 100644 --- a/src/plugin-sdk/infra-runtime.ts +++ b/src/plugin-sdk/infra-runtime.ts @@ -33,6 +33,7 @@ export * from "../infra/net/proxy-fetch.js"; export * from "../infra/net/undici-global-dispatcher.js"; export * from "../infra/net/ssrf.js"; export * from "../infra/outbound/identity.js"; +export * from "../infra/outbound/sanitize-text.js"; export * from "../infra/parse-finite-number.js"; export * from "../infra/outbound/send-deps.js"; export * from "../infra/retry.js"; diff --git a/src/plugin-sdk/matrix-runtime-heavy.ts b/src/plugin-sdk/matrix-runtime-heavy.ts index cc153f83e4b..65ac24c8578 100644 --- a/src/plugin-sdk/matrix-runtime-heavy.ts +++ b/src/plugin-sdk/matrix-runtime-heavy.ts @@ -3,5 +3,17 @@ export { ensureConfiguredAcpBindingReady } from "../acp/persistent-bindings.lifecycle.js"; export { resolveConfiguredAcpBindingRecord } from "../acp/persistent-bindings.resolve.js"; -export { maybeCreateMatrixMigrationSnapshot } from "../infra/matrix-migration-snapshot.js"; +export { + autoPrepareLegacyMatrixCrypto, + detectLegacyMatrixCrypto, +} from "../infra/matrix-legacy-crypto.js"; +export { + autoMigrateLegacyMatrixState, + detectLegacyMatrixState, +} from "../infra/matrix-legacy-state.js"; +export { + hasActionableMatrixMigration, + hasPendingMatrixMigration, + maybeCreateMatrixMigrationSnapshot, +} from "../infra/matrix-migration-snapshot.js"; export { dispatchReplyFromConfigWithSettledDispatcher } from "./inbound-reply-dispatch.js"; diff --git a/src/plugin-sdk/outbound-runtime.ts b/src/plugin-sdk/outbound-runtime.ts index ec6cc4becb3..1440c5da544 100644 --- a/src/plugin-sdk/outbound-runtime.ts +++ b/src/plugin-sdk/outbound-runtime.ts @@ -1,3 +1,4 @@ export { createRuntimeOutboundDelegates } from "../channels/plugins/runtime-forwarders.js"; export { resolveOutboundSendDep, type OutboundSendDeps } from "../infra/outbound/send-deps.js"; export { resolveAgentOutboundIdentity, type OutboundIdentity } from "../infra/outbound/identity.js"; +export { sanitizeForPlainText } from "../infra/outbound/sanitize-text.js"; diff --git a/src/plugin-sdk/plugin-entry.ts b/src/plugin-sdk/plugin-entry.ts index c0bf8ee9d27..bd5d7ad0843 100644 --- a/src/plugin-sdk/plugin-entry.ts +++ b/src/plugin-sdk/plugin-entry.ts @@ -11,7 +11,6 @@ import type { OpenClawPluginServiceContext, OpenClawPluginToolContext, OpenClawPluginToolFactory, - PluginInteractiveTelegramHandlerContext, PluginLogger, ProviderAugmentModelCatalogContext, ProviderAuthContext, @@ -117,7 +116,6 @@ export type { OpenClawPluginCommandDefinition, OpenClawPluginDefinition, PluginLogger, - PluginInteractiveTelegramHandlerContext, }; export type { OpenClawConfig }; diff --git a/src/plugin-sdk/plugin-runtime.ts b/src/plugin-sdk/plugin-runtime.ts index 224f15456ec..ee64e796fb6 100644 --- a/src/plugin-sdk/plugin-runtime.ts +++ b/src/plugin-sdk/plugin-runtime.ts @@ -4,6 +4,7 @@ export * from "../plugins/commands.js"; export * from "../plugins/hook-runner-global.js"; export * from "../plugins/http-path.js"; export * from "../plugins/http-registry.js"; +export * from "../plugins/interactive-binding-helpers.js"; export * from "../plugins/interactive.js"; export * from "../plugins/lazy-service-module.js"; export * from "../plugins/types.js"; diff --git a/src/plugin-sdk/reply-runtime.ts b/src/plugin-sdk/reply-runtime.ts index 284239e3c5b..a820257e9d3 100644 --- a/src/plugin-sdk/reply-runtime.ts +++ b/src/plugin-sdk/reply-runtime.ts @@ -52,8 +52,5 @@ export type { export { createReplyReferencePlanner } from "../auto-reply/reply/reply-reference.js"; export type { GetReplyOptions, ReplyPayload } from "../auto-reply/types.js"; export type { FinalizedMsgContext, MsgContext } from "../auto-reply/templating.js"; -export { - resolveAutoTopicLabelConfig, - generateTopicLabel, -} from "../auto-reply/reply/auto-topic-label.js"; -export type { AutoTopicLabelParams } from "../auto-reply/reply/auto-topic-label.js"; +export { generateConversationLabel } from "../auto-reply/reply/conversation-label-generator.js"; +export type { ConversationLabelParams } from "../auto-reply/reply/conversation-label-generator.js"; diff --git a/src/plugin-sdk/runtime.ts b/src/plugin-sdk/runtime.ts index 2406eb76785..40dec0edbac 100644 --- a/src/plugin-sdk/runtime.ts +++ b/src/plugin-sdk/runtime.ts @@ -2,6 +2,8 @@ import { format } from "node:util"; import type { OutputRuntimeEnv, RuntimeEnv } from "../runtime.js"; export type { OutputRuntimeEnv, RuntimeEnv } from "../runtime.js"; export { createNonExitingRuntime, defaultRuntime } from "../runtime.js"; +export { resolveCommandSecretRefsViaGateway } from "../cli/command-secret-gateway.js"; +export { getChannelsCommandSecretTargetIds } from "../cli/command-secret-targets.js"; export { danger, info, @@ -17,7 +19,18 @@ export { } from "../globals.js"; export * from "../logging.js"; export { waitForAbortSignal } from "../infra/abort-signal.js"; +export { + detectPluginInstallPathIssue, + formatPluginInstallPathIssue, +} from "../infra/plugin-install-path-warnings.js"; +export { collectProviderDangerousNameMatchingScopes } from "../config/dangerous-name-matching.js"; export { registerUnhandledRejectionHandler } from "../infra/unhandled-rejections.js"; +export { removePluginFromConfig } from "../plugins/uninstall.js"; +export { + isDiscordMutableAllowEntry, + isSlackMutableAllowEntry, + isZalouserMutableGroupEntry, +} from "../security/mutable-allowlist-detectors.js"; /** Minimal logger contract accepted by runtime-adapter helpers. */ type LoggerLike = { diff --git a/src/plugins/bundled-capability-metadata.ts b/src/plugins/bundled-capability-metadata.ts index 364433056b6..ebde71de3a9 100644 --- a/src/plugins/bundled-capability-metadata.ts +++ b/src/plugins/bundled-capability-metadata.ts @@ -1,7 +1,4 @@ -import fs from "node:fs"; -import path from "node:path"; -import { resolveOpenClawPackageRootSync } from "../infra/openclaw-root.js"; -import { listBundledPluginManifestSnapshots } from "./bundled-manifest-snapshots.js"; +import { listBundledPluginMetadata } from "./bundled-plugin-metadata.js"; export type BundledPluginContractSnapshot = { pluginId: string; @@ -15,27 +12,6 @@ export type BundledPluginContractSnapshot = { toolNames: string[]; }; -function resolveBundledManifestSnapshotDir(): string | undefined { - const packageRoot = resolveOpenClawPackageRootSync({ moduleUrl: import.meta.url }); - if (!packageRoot) { - return undefined; - } - for (const candidate of [ - path.join(packageRoot, "extensions"), - path.join(packageRoot, "dist", "extensions"), - path.join(packageRoot, "dist-runtime", "extensions"), - ]) { - if (fs.existsSync(candidate)) { - return candidate; - } - } - return undefined; -} - -const BUNDLED_PLUGIN_MANIFEST_SNAPSHOTS = listBundledPluginManifestSnapshots({ - bundledDir: resolveBundledManifestSnapshotDir(), -}); - function uniqueStrings(values: readonly string[] | undefined): string[] { const result: string[] = []; const seen = new Set(); @@ -50,8 +26,13 @@ function uniqueStrings(values: readonly string[] | undefined): string[] { return result; } +const BUNDLED_PLUGIN_METADATA_FOR_CAPABILITIES = listBundledPluginMetadata({ + includeChannelConfigs: false, + includeSyntheticChannelConfigs: false, +}); + export const BUNDLED_PLUGIN_CONTRACT_SNAPSHOTS: readonly BundledPluginContractSnapshot[] = - BUNDLED_PLUGIN_MANIFEST_SNAPSHOTS.map(({ manifest }) => ({ + BUNDLED_PLUGIN_METADATA_FOR_CAPABILITIES.map(({ manifest }) => ({ pluginId: manifest.id, cliBackendIds: uniqueStrings(manifest.cliBackends), providerIds: uniqueStrings(manifest.providers), @@ -130,7 +111,7 @@ export const BUNDLED_PROVIDER_PLUGIN_ID_ALIASES = Object.fromEntries( ) as Readonly>; export const BUNDLED_LEGACY_PLUGIN_ID_ALIASES = Object.fromEntries( - BUNDLED_PLUGIN_MANIFEST_SNAPSHOTS.flatMap(({ manifest }) => + BUNDLED_PLUGIN_METADATA_FOR_CAPABILITIES.flatMap(({ manifest }) => (manifest.legacyPluginIds ?? []).map( (legacyPluginId) => [legacyPluginId, manifest.id] as const, ), @@ -138,7 +119,7 @@ export const BUNDLED_LEGACY_PLUGIN_ID_ALIASES = Object.fromEntries( ) as Readonly>; export const BUNDLED_AUTO_ENABLE_PROVIDER_PLUGIN_IDS = Object.fromEntries( - BUNDLED_PLUGIN_MANIFEST_SNAPSHOTS.flatMap(({ manifest }) => + BUNDLED_PLUGIN_METADATA_FOR_CAPABILITIES.flatMap(({ manifest }) => (manifest.autoEnableWhenConfiguredProviders ?? []).map((providerId) => [ providerId, manifest.id, diff --git a/src/plugins/contracts/plugin-sdk-subpaths.test.ts b/src/plugins/contracts/plugin-sdk-subpaths.test.ts index 02d3276d8b7..51a66ffd602 100644 --- a/src/plugins/contracts/plugin-sdk-subpaths.test.ts +++ b/src/plugins/contracts/plugin-sdk-subpaths.test.ts @@ -432,8 +432,6 @@ describe("plugin-sdk subpath exports", () => { "resolveThreadBindingThreadName", "resolveThreadBindingsEnabled", "formatThreadBindingDisabledError", - "DISCORD_THREAD_BINDING_CHANNEL", - "MATRIX_THREAD_BINDING_CHANNEL", "resolveControlCommandGate", "resolveCommandAuthorizedFromAuthorizers", "resolveDualTextControlCommandGate", @@ -621,8 +619,6 @@ describe("plugin-sdk subpath exports", () => { ]); expectSourceMentions("conversation-runtime", [ - "DISCORD_THREAD_BINDING_CHANNEL", - "MATRIX_THREAD_BINDING_CHANNEL", "formatThreadBindingDisabledError", "resolveThreadBindingFarewellText", "resolveThreadBindingConversationIdFromBindingId", diff --git a/src/plugins/runtime/runtime-discord-typing.test.ts b/src/plugins/runtime/runtime-discord-typing.test.ts deleted file mode 100644 index 627039fc60f..00000000000 --- a/src/plugins/runtime/runtime-discord-typing.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { afterEach, describe, expect, it, vi } from "vitest"; -import { - createDiscordTypingLease, - type CreateDiscordTypingLeaseParams, -} from "./runtime-discord-typing.js"; - -describe("createDiscordTypingLease", () => { - afterEach(() => { - vi.useRealTimers(); - }); - - it("uses the Discord default interval and forwards pulse params", async () => { - vi.useFakeTimers(); - const pulse: CreateDiscordTypingLeaseParams["pulse"] = vi.fn(async () => undefined); - const cfg = { channels: { discord: { token: "x" } } }; - - const lease = await createDiscordTypingLease({ - channelId: "123", - accountId: "work", - cfg, - intervalMs: Number.NaN, - pulse, - }); - - expect(pulse).toHaveBeenCalledTimes(1); - expect(pulse).toHaveBeenCalledWith({ - channelId: "123", - accountId: "work", - cfg, - }); - - await vi.advanceTimersByTimeAsync(7_999); - expect(pulse).toHaveBeenCalledTimes(1); - await vi.advanceTimersByTimeAsync(1); - expect(pulse).toHaveBeenCalledTimes(2); - - lease.stop(); - }); -}); diff --git a/src/plugins/runtime/runtime-discord-typing.ts b/src/plugins/runtime/runtime-discord-typing.ts deleted file mode 100644 index 3c6d22fa042..00000000000 --- a/src/plugins/runtime/runtime-discord-typing.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { createTypingLease } from "./typing-lease.js"; - -export type CreateDiscordTypingLeaseParams = { - channelId: string; - accountId?: string; - cfg?: ReturnType; - intervalMs?: number; - pulse: (params: { - channelId: string; - accountId?: string; - cfg?: ReturnType; - }) => Promise; -}; - -const DEFAULT_DISCORD_TYPING_INTERVAL_MS = 8_000; - -export async function createDiscordTypingLease(params: CreateDiscordTypingLeaseParams): Promise<{ - refresh: () => Promise; - stop: () => void; -}> { - return await createTypingLease({ - defaultIntervalMs: DEFAULT_DISCORD_TYPING_INTERVAL_MS, - errorLabel: "discord", - intervalMs: params.intervalMs, - pulse: params.pulse, - pulseArgs: { - channelId: params.channelId, - accountId: params.accountId, - cfg: params.cfg, - }, - }); -} diff --git a/src/plugins/runtime/runtime-plugin-boundary.ts b/src/plugins/runtime/runtime-plugin-boundary.ts index d49cadeae13..3540c1e6a93 100644 --- a/src/plugins/runtime/runtime-plugin-boundary.ts +++ b/src/plugins/runtime/runtime-plugin-boundary.ts @@ -53,6 +53,46 @@ export function resolvePluginRuntimeRecord( }; } +export function resolvePluginRuntimeRecordByEntryBaseNames( + entryBaseNames: string[], + onMissing?: () => never, +): PluginRuntimeRecord | null { + const manifestRegistry = loadPluginManifestRegistry({ + config: readPluginBoundaryConfigSafely(), + cache: true, + }); + const matches = manifestRegistry.plugins.filter((plugin) => { + if (!plugin?.source) { + return false; + } + const record = { + rootDir: plugin.rootDir, + source: plugin.source, + }; + return entryBaseNames.every( + (entryBaseName) => resolvePluginRuntimeModulePath(record, entryBaseName) !== null, + ); + }); + if (matches.length === 0) { + if (onMissing) { + onMissing(); + } + return null; + } + if (matches.length > 1) { + const pluginIds = matches.map((plugin) => plugin.id).join(", "); + throw new Error( + `plugin runtime boundary is ambiguous for entries [${entryBaseNames.join(", ")}]: ${pluginIds}`, + ); + } + const record = matches[0]; + return { + ...(record.origin ? { origin: record.origin } : {}), + rootDir: record.rootDir, + source: record.source, + }; +} + export function resolvePluginRuntimeModulePath( record: Pick, entryBaseName: string, diff --git a/src/plugins/runtime/runtime-web-channel-plugin.ts b/src/plugins/runtime/runtime-web-channel-plugin.ts index c3f6f0e3647..9017dff0bc6 100644 --- a/src/plugins/runtime/runtime-web-channel-plugin.ts +++ b/src/plugins/runtime/runtime-web-channel-plugin.ts @@ -1,26 +1,108 @@ +import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import { createJiti } from "jiti"; -type WebChannelHeavyRuntimeModule = typeof import("@openclaw/whatsapp/runtime-api.js"); -type WebChannelLightRuntimeModule = typeof import("@openclaw/whatsapp/light-runtime-api.js"); +import type { ChannelAgentTool } from "../../channels/plugins/types.core.js"; +import type { OpenClawConfig } from "../../config/config.js"; import { getDefaultLocalRoots as getDefaultLocalRootsImpl, loadWebMedia as loadWebMediaImpl, loadWebMediaRaw as loadWebMediaRawImpl, optimizeImageToJpeg as optimizeImageToJpegImpl, } from "../../media/web-media.js"; +import type { PollInput } from "../../polls.js"; import { loadPluginBoundaryModuleWithJiti, + resolvePluginRuntimeRecordByEntryBaseNames, resolvePluginRuntimeModulePath, - resolvePluginRuntimeRecord, } from "./runtime-plugin-boundary.js"; -const WEB_CHANNEL_PLUGIN_ID = "whatsapp"; - type WebChannelPluginRecord = { - origin: string; + origin?: string; rootDir?: string; source: string; }; +type WebChannelLightRuntimeModule = { + getActiveWebListener: (accountId?: string | null) => unknown; + getWebAuthAgeMs: (authDir?: string) => number | null; + logWebSelfId: (authDir?: string, runtime?: unknown, includeChannelPrefix?: boolean) => void; + logoutWeb: (params: { + authDir?: string; + isLegacyAuthDir?: boolean; + runtime?: unknown; + }) => Promise; + readWebSelfId: (authDir?: string) => { + e164: string | null; + jid: string | null; + lid: string | null; + }; + webAuthExists: (authDir?: string) => Promise; + createWhatsAppLoginTool: () => ChannelAgentTool; + formatError: (error: unknown) => string; + getStatusCode: (error: unknown) => number | undefined; + pickWebChannel: (pref: string, authDir?: string) => Promise; + WA_WEB_AUTH_DIR: string; +}; + +type WebChannelHeavyRuntimeModule = { + loginWeb: ( + verbose: boolean, + waitForConnection?: (sock: unknown) => Promise, + runtime?: unknown, + accountId?: string, + ) => Promise; + sendMessageWhatsApp: ( + to: string, + body: string, + options: { + verbose: boolean; + cfg?: OpenClawConfig; + mediaUrl?: string; + mediaAccess?: { + localRoots?: readonly string[]; + readFile?: (filePath: string) => Promise; + }; + mediaLocalRoots?: readonly string[]; + mediaReadFile?: (filePath: string) => Promise; + gifPlayback?: boolean; + accountId?: string; + }, + ) => Promise<{ messageId: string; toJid: string }>; + sendPollWhatsApp: ( + to: string, + poll: PollInput, + options: { verbose: boolean; accountId?: string; cfg?: OpenClawConfig }, + ) => Promise<{ messageId: string; toJid: string }>; + sendReactionWhatsApp: ( + chatJid: string, + messageId: string, + emoji: string, + options: { + verbose: boolean; + fromMe?: boolean; + participant?: string; + accountId?: string; + }, + ) => Promise; + createWaSocket: ( + printQr: boolean, + verbose: boolean, + opts?: { authDir?: string; onQr?: (qr: string) => void }, + ) => Promise; + handleWhatsAppAction: ( + params: Record, + cfg: OpenClawConfig, + ) => Promise>; + monitorWebChannel: (...args: unknown[]) => Promise; + monitorWebInbox: (...args: unknown[]) => Promise; + runWebHeartbeatOnce: (...args: unknown[]) => Promise; + startWebLoginWithQr: (...args: unknown[]) => Promise; + waitForWaConnection: (sock: unknown) => Promise; + waitForWebLogin: (...args: unknown[]) => Promise; + extractMediaPlaceholder: (...args: unknown[]) => unknown; + extractText: (...args: unknown[]) => unknown; + resolveHeartbeatRecipients: (...args: unknown[]) => unknown; +}; + let cachedHeavyModulePath: string | null = null; let cachedHeavyModule: WebChannelHeavyRuntimeModule | null = null; let cachedLightModulePath: string | null = null; @@ -29,9 +111,9 @@ let cachedLightModule: WebChannelLightRuntimeModule | null = null; const jitiLoaders = new Map>(); function resolveWebChannelPluginRecord(): WebChannelPluginRecord { - return resolvePluginRuntimeRecord(WEB_CHANNEL_PLUGIN_ID, () => { + return resolvePluginRuntimeRecordByEntryBaseNames(["light-runtime-api", "runtime-api"], () => { throw new Error( - `web channel plugin runtime is unavailable: missing plugin '${WEB_CHANNEL_PLUGIN_ID}'`, + "web channel plugin runtime is unavailable: missing plugin that provides light-runtime-api and runtime-api", ); }) as WebChannelPluginRecord; } @@ -41,14 +123,10 @@ function resolveWebChannelRuntimeModulePath( entryBaseName: "light-runtime-api" | "runtime-api", ): string { const modulePath = resolvePluginRuntimeModulePath(record, entryBaseName, () => { - throw new Error( - `web channel plugin runtime is unavailable: missing ${entryBaseName} for plugin '${WEB_CHANNEL_PLUGIN_ID}'`, - ); + throw new Error(`web channel plugin runtime is unavailable: missing ${entryBaseName}`); }); if (!modulePath) { - throw new Error( - `web channel plugin runtime is unavailable: missing ${entryBaseName} for plugin '${WEB_CHANNEL_PLUGIN_ID}'`, - ); + throw new Error(`web channel plugin runtime is unavailable: missing ${entryBaseName}`); } return modulePath; } diff --git a/src/security/audit-channel.ts b/src/security/audit-channel.ts index a9bf414f622..3e6ce088533 100644 --- a/src/security/audit-channel.ts +++ b/src/security/audit-channel.ts @@ -7,97 +7,12 @@ import type { listChannelPlugins } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; import { inspectReadOnlyChannelAccount } from "../channels/read-only-account-inspect.js"; import { formatCliCommand } from "../cli/command-format.js"; -import { resolveNativeCommandsEnabled, resolveNativeSkillsEnabled } from "../config/commands.js"; import type { OpenClawConfig } from "../config/config.js"; import { isDangerousNameMatchingEnabled } from "../config/dangerous-name-matching.js"; import { formatErrorMessage } from "../infra/errors.js"; -import { createLazyRuntimeSurface } from "../shared/lazy-runtime.js"; -import { normalizeStringEntries } from "../shared/string-normalization.js"; import type { SecurityAuditFinding, SecurityAuditSeverity } from "./audit.js"; import { resolveDmAllowState } from "./dm-policy-shared.js"; -const loadAuditChannelDiscordRuntimeModule = createLazyRuntimeSurface( - () => import("./audit-channel.discord.runtime.js"), - ({ auditChannelDiscordRuntime }) => auditChannelDiscordRuntime, -); - -const loadAuditChannelAllowFromRuntimeModule = createLazyRuntimeSurface( - () => import("./audit-channel.allow-from.runtime.js"), - ({ auditChannelAllowFromRuntime }) => auditChannelAllowFromRuntime, -); - -const loadAuditChannelTelegramRuntimeModule = createLazyRuntimeSurface( - () => import("./audit-channel.telegram.runtime.js"), - ({ auditChannelTelegramRuntime }) => auditChannelTelegramRuntime, -); - -const loadAuditChannelZalouserRuntimeModule = createLazyRuntimeSurface( - () => import("./audit-channel.zalouser.runtime.js"), - ({ auditChannelZalouserRuntime }) => auditChannelZalouserRuntime, -); - -function normalizeAllowFromList(list: Array | undefined | null): string[] { - return normalizeStringEntries(Array.isArray(list) ? list : undefined); -} - -function addDiscordNameBasedEntries(params: { - target: Set; - values: unknown; - source: string; - isDiscordMutableAllowEntry: (value: string) => boolean; -}): void { - if (!Array.isArray(params.values)) { - return; - } - for (const value of params.values) { - if (!params.isDiscordMutableAllowEntry(String(value))) { - continue; - } - const text = String(value).trim(); - if (!text) { - continue; - } - params.target.add(`${params.source}:${text}`); - } -} - -function addZalouserMutableGroupEntries(params: { - target: Set; - groups: unknown; - source: string; - isZalouserMutableGroupEntry: (value: string) => boolean; -}): void { - if (!params.groups || typeof params.groups !== "object" || Array.isArray(params.groups)) { - return; - } - for (const key of Object.keys(params.groups as Record)) { - if (!params.isZalouserMutableGroupEntry(key)) { - continue; - } - params.target.add(`${params.source}:${key}`); - } -} - -async function collectInvalidTelegramAllowFromEntries(params: { - entries: unknown; - target: Set; -}): Promise { - if (!Array.isArray(params.entries)) { - return; - } - const { isNumericTelegramUserId, normalizeTelegramAllowFromEntry } = - await loadAuditChannelTelegramRuntimeModule(); - for (const entry of params.entries) { - const normalized = normalizeTelegramAllowFromEntry(entry); - if (!normalized || normalized === "*") { - continue; - } - if (!isNumericTelegramUserId(normalized)) { - params.target.add(normalized); - } - } -} - function classifyChannelWarningSeverity(message: string): SecurityAuditSeverity { const s = message.toLowerCase(); if ( @@ -277,19 +192,6 @@ export async function collectChannelSecurityFindings(params: { return { account, enabled, configured, diagnostics }; }; - const coerceNativeSetting = (value: unknown): boolean | "auto" | undefined => { - if (value === true) { - return true; - } - if (value === false) { - return false; - } - if (value === "auto") { - return "auto"; - } - return undefined; - }; - const warnDmPolicy = async (input: { label: string; provider: ChannelId; @@ -411,318 +313,6 @@ export async function collectChannelSecurityFindings(params: { }); } - if ( - plugin.id === "synology-chat" && - (account as { dangerouslyAllowNameMatching?: unknown } | null) - ?.dangerouslyAllowNameMatching === true - ) { - const accountNote = formatChannelAccountNote({ - orderedAccountIds, - hasExplicitAccountPath, - accountId, - }); - findings.push({ - checkId: "channels.synology-chat.reply.dangerous_name_matching_enabled", - severity: "info", - title: `Synology Chat dangerous name matching is enabled${accountNote}`, - detail: - "dangerouslyAllowNameMatching=true re-enables mutable username/nickname matching for reply delivery. This is a break-glass compatibility mode, not a hardened default.", - remediation: - "Prefer stable numeric Synology Chat user IDs for reply delivery, then disable dangerouslyAllowNameMatching.", - }); - } - - if (plugin.id === "discord") { - const { isDiscordMutableAllowEntry } = await loadAuditChannelDiscordRuntimeModule(); - const { readChannelAllowFromStore } = await loadAuditChannelAllowFromRuntimeModule(); - const discordCfg = - (account as { config?: Record } | null)?.config ?? - ({} as Record); - const dangerousNameMatchingEnabled = isDangerousNameMatchingEnabled(discordCfg); - const storeAllowFrom = await readChannelAllowFromStore( - "discord", - process.env, - accountId, - ).catch(() => []); - const discordNameBasedAllowEntries = new Set(); - const discordPathPrefix = - orderedAccountIds.length > 1 || hasExplicitAccountPath - ? `channels.discord.accounts.${accountId}` - : "channels.discord"; - addDiscordNameBasedEntries({ - target: discordNameBasedAllowEntries, - values: discordCfg.allowFrom, - source: `${discordPathPrefix}.allowFrom`, - isDiscordMutableAllowEntry, - }); - addDiscordNameBasedEntries({ - target: discordNameBasedAllowEntries, - values: (discordCfg.dm as { allowFrom?: unknown } | undefined)?.allowFrom, - source: `${discordPathPrefix}.dm.allowFrom`, - isDiscordMutableAllowEntry, - }); - addDiscordNameBasedEntries({ - target: discordNameBasedAllowEntries, - values: storeAllowFrom, - source: "~/.openclaw/credentials/discord-allowFrom.json", - isDiscordMutableAllowEntry, - }); - const discordGuildEntries = - (discordCfg.guilds as Record | undefined) ?? {}; - for (const [guildKey, guildValue] of Object.entries(discordGuildEntries)) { - if (!guildValue || typeof guildValue !== "object") { - continue; - } - const guild = guildValue as Record; - addDiscordNameBasedEntries({ - target: discordNameBasedAllowEntries, - values: guild.users, - source: `${discordPathPrefix}.guilds.${guildKey}.users`, - isDiscordMutableAllowEntry, - }); - const channels = guild.channels; - if (!channels || typeof channels !== "object") { - continue; - } - for (const [channelKey, channelValue] of Object.entries( - channels as Record, - )) { - if (!channelValue || typeof channelValue !== "object") { - continue; - } - const channel = channelValue as Record; - addDiscordNameBasedEntries({ - target: discordNameBasedAllowEntries, - values: channel.users, - source: `${discordPathPrefix}.guilds.${guildKey}.channels.${channelKey}.users`, - isDiscordMutableAllowEntry, - }); - } - } - if (discordNameBasedAllowEntries.size > 0) { - const examples = Array.from(discordNameBasedAllowEntries).slice(0, 5); - const more = - discordNameBasedAllowEntries.size > examples.length - ? ` (+${discordNameBasedAllowEntries.size - examples.length} more)` - : ""; - findings.push({ - checkId: "channels.discord.allowFrom.name_based_entries", - severity: dangerousNameMatchingEnabled ? "info" : "warn", - title: dangerousNameMatchingEnabled - ? "Discord allowlist uses break-glass name/tag matching" - : "Discord allowlist contains name or tag entries", - detail: dangerousNameMatchingEnabled - ? "Discord name/tag allowlist matching is explicitly enabled via dangerouslyAllowNameMatching. This mutable-identity mode is operator-selected break-glass behavior and out-of-scope for vulnerability reports by itself. " + - `Found: ${examples.join(", ")}${more}.` - : "Discord name/tag allowlist matching uses normalized slugs and can collide across users. " + - `Found: ${examples.join(", ")}${more}.`, - remediation: dangerousNameMatchingEnabled - ? "Prefer stable Discord IDs (or <@id>/user:/pk:), then disable dangerouslyAllowNameMatching." - : "Prefer stable Discord IDs (or <@id>/user:/pk:) in channels.discord.allowFrom and channels.discord.guilds.*.users, or explicitly opt in with dangerouslyAllowNameMatching=true if you accept the risk.", - }); - } - const nativeEnabled = resolveNativeCommandsEnabled({ - providerId: "discord", - providerSetting: coerceNativeSetting( - (discordCfg.commands as { native?: unknown } | undefined)?.native, - ), - globalSetting: params.cfg.commands?.native, - }); - const nativeSkillsEnabled = resolveNativeSkillsEnabled({ - providerId: "discord", - providerSetting: coerceNativeSetting( - (discordCfg.commands as { nativeSkills?: unknown } | undefined)?.nativeSkills, - ), - globalSetting: params.cfg.commands?.nativeSkills, - }); - const slashEnabled = nativeEnabled || nativeSkillsEnabled; - if (slashEnabled) { - const defaultGroupPolicy = params.cfg.channels?.defaults?.groupPolicy; - const groupPolicy = - (discordCfg.groupPolicy as string | undefined) ?? defaultGroupPolicy ?? "allowlist"; - const guildEntries = discordGuildEntries; - const guildsConfigured = Object.keys(guildEntries).length > 0; - const hasAnyUserAllowlist = Object.values(guildEntries).some((guild) => { - if (!guild || typeof guild !== "object") { - return false; - } - const g = guild as Record; - if (Array.isArray(g.users) && g.users.length > 0) { - return true; - } - const channels = g.channels; - if (!channels || typeof channels !== "object") { - return false; - } - return Object.values(channels as Record).some((channel) => { - if (!channel || typeof channel !== "object") { - return false; - } - const c = channel as Record; - return Array.isArray(c.users) && c.users.length > 0; - }); - }); - const dmAllowFromRaw = (discordCfg.dm as { allowFrom?: unknown } | undefined)?.allowFrom; - const dmAllowFrom = Array.isArray(dmAllowFromRaw) ? dmAllowFromRaw : []; - const ownerAllowFromConfigured = - normalizeAllowFromList([...dmAllowFrom, ...storeAllowFrom]).length > 0; - - const useAccessGroups = params.cfg.commands?.useAccessGroups !== false; - if ( - !useAccessGroups && - groupPolicy !== "disabled" && - guildsConfigured && - !hasAnyUserAllowlist - ) { - findings.push({ - checkId: "channels.discord.commands.native.unrestricted", - severity: "critical", - title: "Discord slash commands are unrestricted", - detail: - "commands.useAccessGroups=false disables sender allowlists for Discord slash commands unless a per-guild/channel users allowlist is configured; with no users allowlist, any user in allowed guild channels can invoke /… commands.", - remediation: - "Set commands.useAccessGroups=true (recommended), or configure channels.discord.guilds..users (or channels.discord.guilds..channels..users).", - }); - } else if ( - useAccessGroups && - groupPolicy !== "disabled" && - guildsConfigured && - !ownerAllowFromConfigured && - !hasAnyUserAllowlist - ) { - findings.push({ - checkId: "channels.discord.commands.native.no_allowlists", - severity: "warn", - title: "Discord slash commands have no allowlists", - detail: - "Discord slash commands are enabled, but neither an owner allowFrom list nor any per-guild/channel users allowlist is configured; /… commands will be rejected for everyone.", - remediation: - "Add your user id to channels.discord.allowFrom (or approve yourself via pairing), or configure channels.discord.guilds..users.", - }); - } - } - } - - if (plugin.id === "zalouser") { - const { isZalouserMutableGroupEntry } = await loadAuditChannelZalouserRuntimeModule(); - const zalouserCfg = - (account as { config?: Record } | null)?.config ?? - ({} as Record); - const dangerousNameMatchingEnabled = isDangerousNameMatchingEnabled(zalouserCfg); - const zalouserPathPrefix = - orderedAccountIds.length > 1 || hasExplicitAccountPath - ? `channels.zalouser.accounts.${accountId}` - : "channels.zalouser"; - const mutableGroupEntries = new Set(); - addZalouserMutableGroupEntries({ - target: mutableGroupEntries, - groups: zalouserCfg.groups, - source: `${zalouserPathPrefix}.groups`, - isZalouserMutableGroupEntry, - }); - if (mutableGroupEntries.size > 0) { - const examples = Array.from(mutableGroupEntries).slice(0, 5); - const more = - mutableGroupEntries.size > examples.length - ? ` (+${mutableGroupEntries.size - examples.length} more)` - : ""; - findings.push({ - checkId: "channels.zalouser.groups.mutable_entries", - severity: dangerousNameMatchingEnabled ? "info" : "warn", - title: dangerousNameMatchingEnabled - ? "Zalouser group routing uses break-glass name matching" - : "Zalouser group routing contains mutable group entries", - detail: dangerousNameMatchingEnabled - ? "Zalouser group-name routing is explicitly enabled via dangerouslyAllowNameMatching. This mutable-identity mode is operator-selected break-glass behavior and out-of-scope for vulnerability reports by itself. " + - `Found: ${examples.join(", ")}${more}.` - : "Zalouser group auth is ID-only by default, so unresolved group-name or slug entries are ignored for auth and can drift from the intended trusted group. " + - `Found: ${examples.join(", ")}${more}.`, - remediation: dangerousNameMatchingEnabled - ? "Prefer stable Zalo group IDs (for example group: or provider-native g- ids), then disable dangerouslyAllowNameMatching." - : "Prefer stable Zalo group IDs in channels.zalouser.groups, or explicitly opt in with dangerouslyAllowNameMatching=true if you accept mutable group-name matching.", - }); - } - } - - if (plugin.id === "slack") { - const { readChannelAllowFromStore } = await loadAuditChannelAllowFromRuntimeModule(); - const slackCfg = - (account as { config?: Record; dm?: Record } | null) - ?.config ?? ({} as Record); - const nativeEnabled = resolveNativeCommandsEnabled({ - providerId: "slack", - providerSetting: coerceNativeSetting( - (slackCfg.commands as { native?: unknown } | undefined)?.native, - ), - globalSetting: params.cfg.commands?.native, - }); - const nativeSkillsEnabled = resolveNativeSkillsEnabled({ - providerId: "slack", - providerSetting: coerceNativeSetting( - (slackCfg.commands as { nativeSkills?: unknown } | undefined)?.nativeSkills, - ), - globalSetting: params.cfg.commands?.nativeSkills, - }); - const slashCommandEnabled = - nativeEnabled || - nativeSkillsEnabled || - (slackCfg.slashCommand as { enabled?: unknown } | undefined)?.enabled === true; - if (slashCommandEnabled) { - const useAccessGroups = params.cfg.commands?.useAccessGroups !== false; - if (!useAccessGroups) { - findings.push({ - checkId: "channels.slack.commands.slash.useAccessGroups_off", - severity: "critical", - title: "Slack slash commands bypass access groups", - detail: - "Slack slash/native commands are enabled while commands.useAccessGroups=false; this can allow unrestricted /… command execution from channels/users you didn't explicitly authorize.", - remediation: "Set commands.useAccessGroups=true (recommended).", - }); - } else { - const allowFromRaw = ( - account as - | { config?: { allowFrom?: unknown }; dm?: { allowFrom?: unknown } } - | null - | undefined - )?.config?.allowFrom; - const legacyAllowFromRaw = ( - account as { dm?: { allowFrom?: unknown } } | null | undefined - )?.dm?.allowFrom; - const allowFrom = Array.isArray(allowFromRaw) - ? allowFromRaw - : Array.isArray(legacyAllowFromRaw) - ? legacyAllowFromRaw - : []; - const storeAllowFrom = await readChannelAllowFromStore( - "slack", - process.env, - accountId, - ).catch(() => []); - const ownerAllowFromConfigured = - normalizeAllowFromList([...allowFrom, ...storeAllowFrom]).length > 0; - const channels = (slackCfg.channels as Record | undefined) ?? {}; - const hasAnyChannelUsersAllowlist = Object.values(channels).some((value) => { - if (!value || typeof value !== "object") { - return false; - } - const channel = value as Record; - return Array.isArray(channel.users) && channel.users.length > 0; - }); - if (!ownerAllowFromConfigured && !hasAnyChannelUsersAllowlist) { - findings.push({ - checkId: "channels.slack.commands.slash.no_allowlists", - severity: "warn", - title: "Slack slash commands have no allowlists", - detail: - "Slack slash/native commands are enabled, but neither an owner allowFrom list nor any channels..users allowlist is configured; /… commands will be rejected for everyone.", - remediation: - "Approve yourself via pairing (recommended), or set channels.slack.allowFrom and/or channels.slack.channels..users.", - }); - } - } - } - } - const dmPolicy = plugin.security.resolveDmPolicy?.({ cfg: params.cfg, accountId, @@ -760,145 +350,19 @@ export async function collectChannelSecurityFindings(params: { }); } } - - if (plugin.id !== "telegram") { - continue; - } - - const allowTextCommands = params.cfg.commands?.text !== false; - if (!allowTextCommands) { - continue; - } - - const telegramCfg = - (account as { config?: Record } | null)?.config ?? - ({} as Record); - const defaultGroupPolicy = params.cfg.channels?.defaults?.groupPolicy; - const groupPolicy = - (telegramCfg.groupPolicy as string | undefined) ?? defaultGroupPolicy ?? "allowlist"; - const groups = telegramCfg.groups as Record | undefined; - const groupsConfigured = Boolean(groups) && Object.keys(groups ?? {}).length > 0; - const groupAccessPossible = - groupPolicy === "open" || (groupPolicy === "allowlist" && groupsConfigured); - if (!groupAccessPossible) { - continue; - } - - const { readChannelAllowFromStore } = await loadAuditChannelAllowFromRuntimeModule(); - const storeAllowFrom = await readChannelAllowFromStore( - "telegram", - process.env, - accountId, - ).catch(() => []); - const storeHasWildcard = storeAllowFrom.some((value) => String(value).trim() === "*"); - const invalidTelegramAllowFromEntries = new Set(); - await collectInvalidTelegramAllowFromEntries({ - entries: storeAllowFrom, - target: invalidTelegramAllowFromEntries, - }); - const groupAllowFrom = Array.isArray(telegramCfg.groupAllowFrom) - ? telegramCfg.groupAllowFrom - : []; - const groupAllowFromHasWildcard = groupAllowFrom.some((v) => String(v).trim() === "*"); - await collectInvalidTelegramAllowFromEntries({ - entries: groupAllowFrom, - target: invalidTelegramAllowFromEntries, - }); - const dmAllowFrom = Array.isArray(telegramCfg.allowFrom) ? telegramCfg.allowFrom : []; - await collectInvalidTelegramAllowFromEntries({ - entries: dmAllowFrom, - target: invalidTelegramAllowFromEntries, - }); - let anyGroupOverride = false; - if (groups) { - for (const value of Object.values(groups)) { - if (!value || typeof value !== "object") { - continue; - } - const group = value as Record; - const allowFrom = Array.isArray(group.allowFrom) ? group.allowFrom : []; - if (allowFrom.length > 0) { - anyGroupOverride = true; - await collectInvalidTelegramAllowFromEntries({ - entries: allowFrom, - target: invalidTelegramAllowFromEntries, - }); - } - const topics = group.topics; - if (!topics || typeof topics !== "object") { - continue; - } - for (const topicValue of Object.values(topics as Record)) { - if (!topicValue || typeof topicValue !== "object") { - continue; - } - const topic = topicValue as Record; - const topicAllow = Array.isArray(topic.allowFrom) ? topic.allowFrom : []; - if (topicAllow.length > 0) { - anyGroupOverride = true; - } - await collectInvalidTelegramAllowFromEntries({ - entries: topicAllow, - target: invalidTelegramAllowFromEntries, - }); - } + if (plugin.security.collectAuditFindings) { + const auditFindings = await plugin.security.collectAuditFindings({ + cfg: params.cfg, + sourceConfig, + accountId, + account, + orderedAccountIds, + hasExplicitAccountPath, + }); + for (const finding of auditFindings ?? []) { + findings.push(finding); } } - - const hasAnySenderAllowlist = - storeAllowFrom.length > 0 || groupAllowFrom.length > 0 || anyGroupOverride; - - if (invalidTelegramAllowFromEntries.size > 0) { - const examples = Array.from(invalidTelegramAllowFromEntries).slice(0, 5); - const more = - invalidTelegramAllowFromEntries.size > examples.length - ? ` (+${invalidTelegramAllowFromEntries.size - examples.length} more)` - : ""; - findings.push({ - checkId: "channels.telegram.allowFrom.invalid_entries", - severity: "warn", - title: "Telegram allowlist contains non-numeric entries", - detail: - "Telegram sender authorization requires numeric Telegram user IDs. " + - `Found non-numeric allowFrom entries: ${examples.join(", ")}${more}.`, - remediation: - "Replace @username entries with numeric Telegram user IDs (use setup to resolve), then re-run the audit.", - }); - } - - if (storeHasWildcard || groupAllowFromHasWildcard) { - findings.push({ - checkId: "channels.telegram.groups.allowFrom.wildcard", - severity: "critical", - title: "Telegram group allowlist contains wildcard", - detail: - 'Telegram group sender allowlist contains "*", which allows any group member to run /… commands and control directives.', - remediation: - 'Remove "*" from channels.telegram.groupAllowFrom and pairing store; prefer explicit numeric Telegram user IDs.', - }); - continue; - } - - if (!hasAnySenderAllowlist) { - const providerSetting = (telegramCfg.commands as { nativeSkills?: unknown } | undefined) - // oxlint-disable-next-line typescript/no-explicit-any - ?.nativeSkills as any; - const skillsEnabled = resolveNativeSkillsEnabled({ - providerId: "telegram", - providerSetting, - globalSetting: params.cfg.commands?.nativeSkills, - }); - findings.push({ - checkId: "channels.telegram.groups.allowFrom.missing", - severity: "critical", - title: "Telegram group commands have no sender allowlist", - detail: - `Telegram group access is enabled but no sender allowlist is configured; this allows any group member to invoke /… commands` + - (skillsEnabled ? " (including skill commands)." : "."), - remediation: - "Approve yourself via pairing (recommended), or set channels.telegram.groupAllowFrom (or per-group groups..allowFrom).", - }); - } } } diff --git a/src/security/audit-extra.async.ts b/src/security/audit-extra.async.ts index 1b81411d4e1..97a0944a06a 100644 --- a/src/security/audit-extra.async.ts +++ b/src/security/audit-extra.async.ts @@ -15,13 +15,14 @@ import { resolveSkillSource } from "../agents/skills/source.js"; import { isToolAllowedByPolicies } from "../agents/tool-policy-match.js"; import { resolveToolProfilePolicy } from "../agents/tool-policy.js"; import { listAgentWorkspaceDirs } from "../agents/workspace-dirs.js"; +import { listChannelPlugins } from "../channels/plugins/index.js"; +import { inspectReadOnlyChannelAccount } from "../channels/read-only-account-inspect.js"; import { formatCliCommand } from "../cli/command-format.js"; import { MANIFEST_KEY } from "../compat/legacy-names.js"; import { resolveNativeSkillsEnabled } from "../config/commands.js"; import type { OpenClawConfig, ConfigFileSnapshot } from "../config/config.js"; import { collectIncludePathsRecursive } from "../config/includes-scan.js"; import { resolveOAuthDir } from "../config/paths.js"; -import { hasConfiguredSecretInput } from "../config/types.secrets.js"; import type { AgentToolsConfig } from "../config/types.tools.js"; import { normalizePluginsConfig } from "../plugins/config-state.js"; import { normalizeAgentId } from "../routing/session-key.js"; @@ -118,6 +119,85 @@ function formatCodeSafetyDetails(findings: SkillScanFinding[], rootDir: string): .join("\n"); } +function readChannelCommandSetting( + cfg: OpenClawConfig, + channelId: string, + key: "native" | "nativeSkills", +): unknown { + const channelCfg = cfg.channels?.[channelId as keyof NonNullable]; + if (!channelCfg || typeof channelCfg !== "object" || Array.isArray(channelCfg)) { + return undefined; + } + const commands = (channelCfg as { commands?: unknown }).commands; + if (!commands || typeof commands !== "object" || Array.isArray(commands)) { + return undefined; + } + return (commands as Record)[key]; +} + +async function isChannelPluginConfigured( + cfg: OpenClawConfig, + plugin: ReturnType[number], +): Promise { + const accountIds = plugin.config.listAccountIds(cfg); + const candidates = accountIds.length > 0 ? accountIds : [undefined]; + for (const accountId of candidates) { + const inspected = + plugin.config.inspectAccount?.(cfg, accountId) ?? + (await inspectReadOnlyChannelAccount({ + channelId: plugin.id, + cfg, + accountId, + })); + const inspectedRecord = + inspected && typeof inspected === "object" && !Array.isArray(inspected) + ? (inspected as Record) + : null; + let resolvedAccount: unknown = inspected; + if (!resolvedAccount) { + try { + resolvedAccount = plugin.config.resolveAccount(cfg, accountId); + } catch { + resolvedAccount = null; + } + } + let enabled = + typeof inspectedRecord?.enabled === "boolean" + ? inspectedRecord.enabled + : resolvedAccount != null; + if ( + typeof inspectedRecord?.enabled !== "boolean" && + resolvedAccount != null && + plugin.config.isEnabled + ) { + try { + enabled = plugin.config.isEnabled(resolvedAccount, cfg); + } catch { + enabled = false; + } + } + let configured = + typeof inspectedRecord?.configured === "boolean" + ? inspectedRecord.configured + : resolvedAccount != null; + if ( + typeof inspectedRecord?.configured !== "boolean" && + resolvedAccount != null && + plugin.config.isConfigured + ) { + try { + configured = await plugin.config.isConfigured(resolvedAccount, cfg); + } catch { + configured = false; + } + } + if (enabled && configured) { + return true; + } + } + return false; +} + async function listInstalledPluginDirs(params: { stateDir: string; onReadError?: (error: unknown) => void; @@ -544,75 +624,29 @@ export async function collectPluginsTrustFindings(params: { const allow = params.cfg.plugins?.allow; const allowConfigured = Array.isArray(allow) && allow.length > 0; if (!allowConfigured) { - const hasString = (value: unknown) => typeof value === "string" && value.trim().length > 0; - const hasSecretInput = (value: unknown) => - hasConfiguredSecretInput(value, params.cfg.secrets?.defaults); - const hasAccountStringKey = (account: unknown, key: string) => - Boolean( - account && - typeof account === "object" && - hasString((account as Record)[key]), - ); - const hasAccountSecretInputKey = (account: unknown, key: string) => - Boolean( - account && - typeof account === "object" && - hasSecretInput((account as Record)[key]), - ); - - const discordConfigured = - hasSecretInput(params.cfg.channels?.discord?.token) || - Boolean( - params.cfg.channels?.discord?.accounts && - Object.values(params.cfg.channels.discord.accounts).some((a) => - hasAccountSecretInputKey(a, "token"), - ), - ) || - hasString(process.env.DISCORD_BOT_TOKEN); - - const telegramConfigured = - hasSecretInput(params.cfg.channels?.telegram?.botToken) || - hasString(params.cfg.channels?.telegram?.tokenFile) || - Boolean( - params.cfg.channels?.telegram?.accounts && - Object.values(params.cfg.channels.telegram.accounts).some( - (a) => hasAccountSecretInputKey(a, "botToken") || hasAccountStringKey(a, "tokenFile"), - ), - ) || - hasString(process.env.TELEGRAM_BOT_TOKEN); - - const slackConfigured = - hasSecretInput(params.cfg.channels?.slack?.botToken) || - hasSecretInput(params.cfg.channels?.slack?.appToken) || - Boolean( - params.cfg.channels?.slack?.accounts && - Object.values(params.cfg.channels.slack.accounts).some( - (a) => - hasAccountSecretInputKey(a, "botToken") || hasAccountSecretInputKey(a, "appToken"), - ), - ) || - hasString(process.env.SLACK_BOT_TOKEN) || - hasString(process.env.SLACK_APP_TOKEN); - - const skillCommandsLikelyExposed = - (discordConfigured && - resolveNativeSkillsEnabled({ - providerId: "discord", - providerSetting: params.cfg.channels?.discord?.commands?.nativeSkills, - globalSetting: params.cfg.commands?.nativeSkills, - })) || - (telegramConfigured && - resolveNativeSkillsEnabled({ - providerId: "telegram", - providerSetting: params.cfg.channels?.telegram?.commands?.nativeSkills, - globalSetting: params.cfg.commands?.nativeSkills, - })) || - (slackConfigured && - resolveNativeSkillsEnabled({ - providerId: "slack", - providerSetting: params.cfg.channels?.slack?.commands?.nativeSkills, - globalSetting: params.cfg.commands?.nativeSkills, - })); + const skillCommandsLikelyExposed = ( + await Promise.all( + listChannelPlugins().map(async (plugin) => { + if ( + plugin.capabilities.nativeCommands !== true && + plugin.commands?.nativeSkillsAutoEnabled !== true + ) { + return false; + } + if (!(await isChannelPluginConfigured(params.cfg, plugin))) { + return false; + } + return resolveNativeSkillsEnabled({ + providerId: plugin.id, + providerSetting: readChannelCommandSetting(params.cfg, plugin.id, "nativeSkills") as + | "auto" + | boolean + | undefined, + globalSetting: params.cfg.commands?.nativeSkills, + }); + }), + ) + ).some(Boolean); findings.push({ checkId: "plugins.extensions_no_allowlist", diff --git a/src/security/audit.test.ts b/src/security/audit.test.ts index 52e64eb17f2..45a66056594 100644 --- a/src/security/audit.test.ts +++ b/src/security/audit.test.ts @@ -2,9 +2,16 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; +import { collectDiscordSecurityAuditFindings } from "../../extensions/discord/api.js"; +import { collectSlackSecurityAuditFindings } from "../../extensions/slack/api.js"; +import { collectSynologyChatSecurityAuditFindings } from "../../extensions/synology-chat/api.js"; +import { collectTelegramSecurityAuditFindings } from "../../extensions/telegram/api.js"; +import { collectZalouserSecurityAuditFindings } from "../../extensions/zalouser/api.js"; import type { ChannelPlugin } from "../channels/plugins/types.js"; import type { OpenClawConfig } from "../config/config.js"; import { saveExecApprovals } from "../infra/exec-approvals.js"; +import { createEmptyPluginRegistry } from "../plugins/registry-empty.js"; +import { getActivePluginRegistry, setActivePluginRegistry } from "../plugins/runtime.js"; import { createPathResolutionEnv, withEnvAsync } from "../test-utils/env.js"; import type { SecurityAuditOptions, SecurityAuditReport } from "./audit.js"; import { runSecurityAudit } from "./audit.js"; @@ -39,7 +46,47 @@ function stubChannelPlugin(params: { listAccountIds?: (cfg: OpenClawConfig) => string[]; isConfigured?: (account: unknown, cfg: OpenClawConfig) => boolean; isEnabled?: (account: unknown, cfg: OpenClawConfig) => boolean; + collectAuditFindings?: NonNullable["collectAuditFindings"]; + commands?: ChannelPlugin["commands"]; }): ChannelPlugin { + const channelConfigured = (cfg: OpenClawConfig) => + Boolean((cfg.channels as Record | undefined)?.[params.id]); + const defaultCollectAuditFindings = + params.collectAuditFindings ?? + (params.id === "discord" + ? (collectDiscordSecurityAuditFindings as NonNullable< + ChannelPlugin["security"] + >["collectAuditFindings"]) + : params.id === "slack" + ? (collectSlackSecurityAuditFindings as NonNullable< + ChannelPlugin["security"] + >["collectAuditFindings"]) + : params.id === "synology-chat" + ? (collectSynologyChatSecurityAuditFindings as NonNullable< + ChannelPlugin["security"] + >["collectAuditFindings"]) + : params.id === "telegram" + ? (collectTelegramSecurityAuditFindings as NonNullable< + ChannelPlugin["security"] + >["collectAuditFindings"]) + : params.id === "zalouser" + ? (collectZalouserSecurityAuditFindings as NonNullable< + ChannelPlugin["security"] + >["collectAuditFindings"]) + : undefined); + const defaultCommands = + params.commands ?? + (params.id === "discord" || params.id === "telegram" + ? { + nativeCommandsAutoEnabled: true, + nativeSkillsAutoEnabled: true, + } + : params.id === "slack" + ? { + nativeCommandsAutoEnabled: false, + nativeSkillsAutoEnabled: false, + } + : undefined); return { id: params.id, meta: { @@ -52,7 +99,12 @@ function stubChannelPlugin(params: { capabilities: { chatTypes: ["direct", "group"], }, - security: {}, + ...(defaultCommands ? { commands: defaultCommands } : {}), + security: defaultCollectAuditFindings + ? { + collectAuditFindings: defaultCollectAuditFindings, + } + : {}, config: { listAccountIds: params.listAccountIds ?? @@ -78,14 +130,14 @@ function stubChannelPlugin(params: { const config = account?.config ?? {}; return { accountId: resolvedAccountId, - enabled: params.isEnabled?.(account, cfg) ?? true, - configured: params.isConfigured?.(account, cfg) ?? true, + enabled: params.isEnabled?.(account, cfg) ?? channelConfigured(cfg), + configured: params.isConfigured?.(account, cfg) ?? channelConfigured(cfg), config, }; }), resolveAccount: (cfg, accountId) => params.resolveAccount(cfg, accountId), - isEnabled: (account, cfg) => params.isEnabled?.(account, cfg) ?? true, - isConfigured: (account, cfg) => params.isConfigured?.(account, cfg) ?? true, + isEnabled: (account, cfg) => params.isEnabled?.(account, cfg) ?? channelConfigured(cfg), + isConfigured: (account, cfg) => params.isConfigured?.(account, cfg) ?? channelConfigured(cfg), }, }; } @@ -180,6 +232,14 @@ const synologyChatPlugin = stubChannelPlugin({ }, }); +const BASE_AUDIT_CHANNEL_PLUGINS = [ + discordPlugin, + slackPlugin, + telegramPlugin, + zalouserPlugin, + synologyChatPlugin, +] satisfies ChannelPlugin[]; + function successfulProbeResult(url: string) { return { ok: true, @@ -202,12 +262,14 @@ async function audit( saveExecApprovals({ version: 1, agents: {} }); } const { preserveExecApprovals: _preserveExecApprovals, ...options } = extra ?? {}; - return runSecurityAudit({ - config: cfg, - includeFilesystem: false, - includeChannelSecurity: false, - ...options, - }); + return withActiveAuditChannelPlugins(options.plugins ?? BASE_AUDIT_CHANNEL_PLUGINS, () => + runSecurityAudit({ + config: cfg, + includeFilesystem: false, + includeChannelSecurity: false, + ...options, + }), + ); } async function runAuditCases( @@ -299,12 +361,33 @@ async function runChannelSecurityAudit( cfg: OpenClawConfig, plugins: ChannelPlugin[], ): Promise { - return runSecurityAudit({ - config: cfg, - includeFilesystem: false, - includeChannelSecurity: true, - plugins, - }); + return withActiveAuditChannelPlugins(plugins, () => + runSecurityAudit({ + config: cfg, + includeFilesystem: false, + includeChannelSecurity: true, + plugins, + }), + ); +} + +async function withActiveAuditChannelPlugins( + plugins: ChannelPlugin[], + run: () => Promise, +): Promise { + const previousRegistry = getActivePluginRegistry(); + const registry = createEmptyPluginRegistry(); + registry.channels = plugins.map((plugin) => ({ + pluginId: plugin.id, + plugin, + source: "test", + })); + setActivePluginRegistry(registry); + try { + return await run(); + } finally { + setActivePluginRegistry(previousRegistry ?? createEmptyPluginRegistry()); + } } async function runInstallMetadataAudit( @@ -2191,12 +2274,14 @@ describe("security audit", () => { }, ]; - const res = await runSecurityAudit({ - config: cfg, - includeFilesystem: false, - includeChannelSecurity: true, - plugins, - }); + const res = await withActiveAuditChannelPlugins(plugins, () => + runSecurityAudit({ + config: cfg, + includeFilesystem: false, + includeChannelSecurity: true, + plugins, + }), + ); expect(res.findings).toEqual( expect.arrayContaining([ @@ -2255,12 +2340,14 @@ describe("security audit", () => { ] as const; await runChannelSecurityStateCases(cases, async (testCase) => { - const res = await runSecurityAudit({ - config: testCase.cfg, - includeFilesystem: false, - includeChannelSecurity: true, - plugins: [discordPlugin], - }); + const res = await withActiveAuditChannelPlugins([discordPlugin], () => + runSecurityAudit({ + config: testCase.cfg, + includeFilesystem: false, + includeChannelSecurity: true, + plugins: [discordPlugin], + }), + ); expect( res.findings.some( @@ -2463,13 +2550,16 @@ describe("security audit", () => { ] as const; await runChannelSecurityStateCases(cases, async (testCase) => { - const res = await runSecurityAudit({ - config: testCase.resolvedConfig, - sourceConfig: testCase.sourceConfig, - includeFilesystem: false, - includeChannelSecurity: true, - plugins: [testCase.plugin(testCase.sourceConfig)], - }); + const plugins = [testCase.plugin(testCase.sourceConfig)]; + const res = await withActiveAuditChannelPlugins(plugins, () => + runSecurityAudit({ + config: testCase.resolvedConfig, + sourceConfig: testCase.sourceConfig, + includeFilesystem: false, + includeChannelSecurity: true, + plugins, + }), + ); expect(res.findings, testCase.name).toEqual( expect.arrayContaining([ @@ -2500,12 +2590,14 @@ describe("security audit", () => { }, }; - const res = await runSecurityAudit({ - config: cfg, - includeFilesystem: false, - includeChannelSecurity: true, - plugins: [plugin], - }); + const res = await withActiveAuditChannelPlugins([plugin], () => + runSecurityAudit({ + config: cfg, + includeFilesystem: false, + includeChannelSecurity: true, + plugins: [plugin], + }), + ); const finding = res.findings.find( (entry) => entry.checkId === "channels.zalouser.account.read_only_resolution", @@ -2765,12 +2857,14 @@ describe("security audit", () => { }, }; - const res = await runSecurityAudit({ - config: cfg, - includeFilesystem: false, - includeChannelSecurity: true, - plugins: [pluginWithProtoDefaultAccount], - }); + const res = await withActiveAuditChannelPlugins([pluginWithProtoDefaultAccount], () => + runSecurityAudit({ + config: cfg, + includeFilesystem: false, + includeChannelSecurity: true, + plugins: [pluginWithProtoDefaultAccount], + }), + ); const dangerousMatchingFinding = res.findings.find( (entry) => entry.checkId === "channels.discord.allowFrom.dangerous_name_matching_enabled", diff --git a/src/security/audit.ts b/src/security/audit.ts index 61f8c07e146..465aa703c1a 100644 --- a/src/security/audit.ts +++ b/src/security/audit.ts @@ -120,6 +120,9 @@ let auditDeepModulePromise: Promise | let auditChannelModulePromise: | Promise | undefined; +let pluginRegistryLoaderModulePromise: + | Promise + | undefined; let gatewayProbeDepsPromise: | Promise<{ buildGatewayConnectionDetails: typeof import("../gateway/call.js").buildGatewayConnectionDetails; @@ -148,6 +151,11 @@ async function loadAuditChannelModule() { return await auditChannelModulePromise; } +async function loadPluginRegistryLoaderModule() { + pluginRegistryLoaderModulePromise ??= import("../plugins/runtime/runtime-registry-loader.js"); + return await pluginRegistryLoaderModulePromise; +} + async function loadGatewayProbeDeps() { gatewayProbeDepsPromise ??= Promise.all([ import("../gateway/call.js"), @@ -1455,6 +1463,14 @@ export async function runSecurityAudit(opts: SecurityAuditOptions): Promise