





















@@ -3,24 +3,7 @@
33import { normalizeOptionalLowercaseString } from "@openclaw/normalization-core/string-coerce";
44import type { ChannelMessageAdapterShape } from "../../channels/message/types.js";
55import { getChannelPlugin, getLoadedChannelPlugin } from "../../channels/plugins/index.js";
6-import { channelPluginHasNativeApprovalPromptUi } from "../../channels/plugins/native-approval-prompt.js";
76import type { ChannelPlugin } from "../../channels/plugins/types.plugin.js";
8-import type {
9-ChannelAgentPromptAdapter,
10-ChannelAllowlistAdapter,
11-ChannelCapabilities,
12-ChannelCommandAdapter,
13-ChannelConfigAdapter,
14-ChannelConversationBindingSupport,
15-ChannelDirectoryAdapter,
16-ChannelGroupAdapter,
17-ChannelMessageActionAdapter,
18-ChannelMessagingAdapter,
19-ChannelOutboundAdapter,
20-ChannelPairingAdapter,
21-ChannelStreamingAdapter,
22-ChannelThreadingAdapter,
23-} from "../../channels/plugins/types.public.js";
247import type { OpenClawConfig } from "../../config/types.openclaw.js";
258import { getActivePluginChannelRegistry, getActivePluginRegistry } from "../../plugins/runtime.js";
269import {
@@ -34,62 +17,6 @@ import {
3417resetOutboundChannelBootstrapStateForTests,
3518} from "./channel-bootstrap.runtime.js";
361937-type ChannelTargetResolver = NonNullable<ChannelMessagingAdapter["targetResolver"]>;
38-39-/** Prompt-facing channel capabilities exposed to outbound/runtime callers. */
40-export type ChannelPromptRuntime = {
41-messageToolHints?: ChannelAgentPromptAdapter["messageToolHints"];
42-messageToolCapabilities?: ChannelAgentPromptAdapter["messageToolCapabilities"];
43-reactionGuidance?: ChannelAgentPromptAdapter["reactionGuidance"];
44-hasNativeApprovalPromptUi?: boolean;
45-};
46-47-/** Read-only channel runtime facade assembled from a channel plugin. */
48-export type OutboundChannelRuntime = {
49-id: string;
50-label: string;
51-chatTypes: NonNullable<ChannelCapabilities["chatTypes"]>;
52-preferSessionLookupForAnnounceTarget?: ChannelPlugin["meta"]["preferSessionLookupForAnnounceTarget"];
53-actions?: ChannelMessageActionAdapter;
54-approvalCapability?: ChannelPlugin["approvalCapability"];
55-conversationBindings?: ChannelConversationBindingSupport;
56-allowlist?: ChannelAllowlistAdapter;
57-pairing?: ChannelPairingAdapter;
58-commands?: ChannelCommandAdapter;
59-defaultAccountId?: ChannelConfigAdapter<unknown>["defaultAccountId"];
60-directory?: ChannelDirectoryAdapter;
61-promptRuntime?: ChannelPromptRuntime;
62-inferTargetChatType?: ChannelMessagingAdapter["inferTargetChatType"];
63-normalizeTarget?: ChannelMessagingAdapter["normalizeTarget"];
64-looksLikeTargetId?: ChannelTargetResolver["looksLikeId"];
65-targetResolverHint?: string;
66-resolveMessagingTargetFallback?: ChannelTargetResolver["resolveTarget"];
67-resolveSessionTarget?: ChannelMessagingAdapter["resolveSessionTarget"];
68-formatTargetDisplay?: ChannelMessagingAdapter["formatTargetDisplay"];
69-resolveOutboundSessionRoute?: ChannelMessagingAdapter["resolveOutboundSessionRoute"];
70-buildCrossContextPresentation?: ChannelMessagingAdapter["buildCrossContextPresentation"];
71-transformReplyPayload?: ChannelMessagingAdapter["transformReplyPayload"];
72-resolveAllowFrom?: ChannelConfigAdapter<unknown>["resolveAllowFrom"];
73-resolveDefaultTo?: ChannelConfigAdapter<unknown>["resolveDefaultTo"];
74-formatAllowFrom?: ChannelPlugin["config"]["formatAllowFrom"];
75-allowFromFallback?: NonNullable<ChannelPlugin["elevated"]>["allowFromFallback"];
76-resolveGroupRequireMention?: ChannelGroupAdapter["resolveRequireMention"];
77-resolveGroupToolPolicy?: ChannelGroupAdapter["resolveToolPolicy"];
78-queueDebounceMs?: NonNullable<NonNullable<ChannelPlugin["defaults"]>["queue"]>["debounceMs"];
79-buildThreadingToolContext?: ChannelThreadingAdapter["buildToolContext"];
80-resolveAutoThreadId?: ChannelThreadingAdapter["resolveAutoThreadId"];
81-resolveReplyToMode?: ChannelThreadingAdapter["resolveReplyToMode"];
82-resolveReplyTransport?: ChannelThreadingAdapter["resolveReplyTransport"];
83-outbound?: ChannelOutboundAdapter;
84-resolveTarget?: ChannelOutboundAdapter["resolveTarget"];
85-textChunkLimit?: ChannelOutboundAdapter["textChunkLimit"];
86-shouldTreatDeliveredTextAsVisible?: ChannelOutboundAdapter["shouldTreatDeliveredTextAsVisible"];
87-shouldTreatRoutedTextAsVisible?: ChannelOutboundAdapter["shouldTreatRoutedTextAsVisible"];
88-targetsMatchForReplySuppression?: ChannelOutboundAdapter["targetsMatchForReplySuppression"];
89-hasStructuredReplyPayload?: ChannelMessagingAdapter["hasStructuredReplyPayload"];
90-blockStreamingCoalesceDefaults?: ChannelStreamingAdapter["blockStreamingCoalesceDefaults"];
91-};
92-9320/** Resets outbound channel bootstrap/resolution state for isolated tests. */
9421export function resetOutboundChannelResolutionStateForTest(): void {
9522resetOutboundChannelBootstrapStateForTests();
@@ -272,58 +199,6 @@ function resolveActivatedOutboundPluginFromRuntimeRegistries(
272199return resolveValueFromRuntimeRegistries(channel, resolveActivatedOutboundPlugin);
273200}
274201275-function toOutboundChannelRuntime(plugin: ChannelPlugin): OutboundChannelRuntime {
276-return {
277-id: plugin.id,
278-label: plugin.meta.label,
279-chatTypes: plugin.capabilities.chatTypes,
280-preferSessionLookupForAnnounceTarget: plugin.meta.preferSessionLookupForAnnounceTarget,
281-actions: plugin.actions,
282-approvalCapability: plugin.approvalCapability,
283-conversationBindings: plugin.conversationBindings,
284-allowlist: plugin.allowlist,
285-pairing: plugin.pairing,
286-commands: plugin.commands,
287-defaultAccountId: plugin.config.defaultAccountId,
288-directory: plugin.directory,
289-promptRuntime: {
290-messageToolHints: plugin.agentPrompt?.messageToolHints,
291-messageToolCapabilities: plugin.agentPrompt?.messageToolCapabilities,
292-reactionGuidance: plugin.agentPrompt?.reactionGuidance,
293-hasNativeApprovalPromptUi: channelPluginHasNativeApprovalPromptUi(plugin),
294-},
295-inferTargetChatType: plugin.messaging?.inferTargetChatType,
296-normalizeTarget: plugin.messaging?.normalizeTarget,
297-looksLikeTargetId: plugin.messaging?.targetResolver?.looksLikeId,
298-targetResolverHint: plugin.messaging?.targetResolver?.hint,
299-resolveMessagingTargetFallback: plugin.messaging?.targetResolver?.resolveTarget,
300-resolveSessionTarget: plugin.messaging?.resolveSessionTarget,
301-formatTargetDisplay: plugin.messaging?.formatTargetDisplay,
302-resolveOutboundSessionRoute: plugin.messaging?.resolveOutboundSessionRoute,
303-buildCrossContextPresentation: plugin.messaging?.buildCrossContextPresentation,
304-transformReplyPayload: plugin.messaging?.transformReplyPayload,
305-resolveAllowFrom: plugin.config?.resolveAllowFrom,
306-resolveDefaultTo: plugin.config?.resolveDefaultTo,
307-formatAllowFrom: plugin.config?.formatAllowFrom,
308-allowFromFallback: plugin.elevated?.allowFromFallback,
309-resolveGroupRequireMention: plugin.groups?.resolveRequireMention,
310-resolveGroupToolPolicy: plugin.groups?.resolveToolPolicy,
311-queueDebounceMs: plugin.defaults?.queue?.debounceMs,
312-buildThreadingToolContext: plugin.threading?.buildToolContext,
313-resolveAutoThreadId: plugin.threading?.resolveAutoThreadId,
314-resolveReplyToMode: plugin.threading?.resolveReplyToMode,
315-resolveReplyTransport: plugin.threading?.resolveReplyTransport,
316-outbound: plugin.outbound,
317-resolveTarget: plugin.outbound?.resolveTarget,
318-textChunkLimit: plugin.outbound?.textChunkLimit,
319-shouldTreatDeliveredTextAsVisible: plugin.outbound?.shouldTreatDeliveredTextAsVisible,
320-shouldTreatRoutedTextAsVisible: plugin.outbound?.shouldTreatRoutedTextAsVisible,
321-targetsMatchForReplySuppression: plugin.outbound?.targetsMatchForReplySuppression,
322-hasStructuredReplyPayload: plugin.messaging?.hasStructuredReplyPayload,
323-blockStreamingCoalesceDefaults: plugin.streaming?.blockStreamingCoalesceDefaults,
324-};
325-}
326-327202/** Resolves a deliverable outbound channel plugin, optionally bootstrapping it. */
328203export function resolveOutboundChannelPlugin(params: {
329204channel: string;
@@ -424,26 +299,3 @@ export function resolveOutboundChannelPluginForRead(params: {
424299}
425300return getChannelPlugin(channelId);
426301}
427-428-/** Resolves the read-only outbound runtime facade for a channel. */
429-export function resolveOutboundChannelRuntime(params: {
430-channel: string;
431-cfg?: OpenClawConfig;
432-}): OutboundChannelRuntime | undefined {
433-const plugin = resolveOutboundChannelPluginForRead(params);
434-return plugin ? toOutboundChannelRuntime(plugin) : undefined;
435-}
436-437-/** Reads an already-loaded channel plugin without bootstrapping. */
438-export function resolveLoadedOutboundChannelPluginForRead(params: {
439-channel: string;
440-}): ChannelPlugin | undefined {
441-const normalized = normalizeMessageChannel(params.channel) ?? params.channel.trim();
442-if (!normalized) {
443-return undefined;
444-}
445-return (
446-getLoadedChannelPlugin(normalized as Parameters<typeof getLoadedChannelPlugin>[0]) ??
447-resolveDirectFromRuntimeRegistries(normalized)
448-);
449-}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。