


























@@ -1,22 +1,22 @@
11import { isChannelVisibleInConfiguredLists } from "../channels/plugins/exposure.js";
22import { resolveChannelDefaultAccountId } from "../channels/plugins/helpers.js";
3-import {
4-getChannelPlugin,
5-listChannelPlugins,
6-normalizeChannelId,
7-} from "../channels/plugins/index.js";
3+import { getChannelPlugin, normalizeChannelId } from "../channels/plugins/index.js";
4+import { listReadOnlyChannelPluginsForConfig } from "../channels/plugins/read-only.js";
5+import type { ChannelPlugin } from "../channels/plugins/types.plugin.js";
86import type { ChannelId } from "../channels/plugins/types.public.js";
97import type { AgentBinding } from "../config/types.js";
108import type { OpenClawConfig } from "../config/types.openclaw.js";
119import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js";
12101311type ProviderAccountStatus = {
1412provider: ChannelId;
13+providerLabel?: string;
1514accountId: string;
1615name?: string;
1716state: "linked" | "not linked" | "configured" | "not configured" | "enabled" | "disabled";
1817enabled?: boolean;
1918configured?: boolean;
19+visibleInConfiguredLists?: boolean;
2020};
21212222function providerAccountKey(provider: ChannelId, accountId?: string) {
@@ -33,10 +33,12 @@ function isUnresolvedSecretRefResolutionError(error: unknown): boolean {
33333434function formatChannelAccountLabel(params: {
3535provider: ChannelId;
36+providerLabel?: string;
3637accountId: string;
3738name?: string;
3839}): string {
39-const label = getChannelPlugin(params.provider)?.meta.label ?? params.provider;
40+const label =
41+params.providerLabel ?? getChannelPlugin(params.provider)?.meta.label ?? params.provider;
4042const account = params.name?.trim()
4143 ? `${params.accountId} (${params.name.trim()})`
4244 : params.accountId;
@@ -52,7 +54,7 @@ function formatProviderState(entry: ProviderAccountStatus): string {
5254}
53555456async function resolveReadOnlyAccount(params: {
55-plugin: ReturnType<typeof listChannelPlugins>[number];
57+plugin: ChannelPlugin;
5658cfg: OpenClawConfig;
5759accountId: string;
5860}): Promise<unknown> {
@@ -67,7 +69,9 @@ export async function buildProviderStatusIndex(
6769): Promise<Map<string, ProviderAccountStatus>> {
6870const map = new Map<string, ProviderAccountStatus>();
697170-for (const plugin of listChannelPlugins()) {
72+for (const plugin of listReadOnlyChannelPluginsForConfig(cfg, {
73+includeSetupRuntimeFallback: false,
74+})) {
7175const accountIds = plugin.config.listAccountIds(cfg);
7276for (const accountId of accountIds) {
7377let account: unknown;
@@ -116,11 +120,13 @@ export async function buildProviderStatusIndex(
116120const name = snapshot?.name ?? (account as { name?: string }).name;
117121map.set(providerAccountKey(plugin.id, accountId), {
118122provider: plugin.id,
123+providerLabel: plugin.meta.label,
119124 accountId,
120125 name,
121126 state,
122127 enabled,
123128 configured,
129+visibleInConfiguredLists: isChannelVisibleInConfiguredLists(plugin.meta),
124130});
125131}
126132}
@@ -137,6 +143,13 @@ function resolveDefaultAccountId(cfg: OpenClawConfig, provider: ChannelId): stri
137143}
138144139145function shouldShowProviderEntry(entry: ProviderAccountStatus, cfg: OpenClawConfig): boolean {
146+if (entry.visibleInConfiguredLists !== undefined) {
147+if (!entry.visibleInConfiguredLists) {
148+const providerConfig = (cfg as Record<string, unknown>)[entry.provider];
149+return Boolean(entry.configured) || Boolean(providerConfig);
150+}
151+return Boolean(entry.configured);
152+}
140153const plugin = getChannelPlugin(entry.provider);
141154if (!plugin) {
142155return Boolean(entry.configured);
@@ -151,6 +164,7 @@ function shouldShowProviderEntry(entry: ProviderAccountStatus, cfg: OpenClawConf
151164function formatProviderEntry(entry: ProviderAccountStatus): string {
152165const label = formatChannelAccountLabel({
153166provider: entry.provider,
167+providerLabel: entry.providerLabel,
154168accountId: entry.accountId,
155169name: entry.name,
156170});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。