

























@@ -1,67 +1,61 @@
11import type { OpenClawConfig } from "../../config/types.openclaw.js";
22import { normalizeOptionalString } from "../../shared/string-coerce.js";
3+import { inspectChannelAccount } from "../account-inspection.js";
34import { projectSafeChannelAccountSnapshotFields } from "../account-snapshot-fields.js";
4-import { inspectReadOnlyChannelAccount } from "../read-only-account-inspect.js";
55import type { ChannelPlugin } from "./types.plugin.js";
66import type { ChannelAccountSnapshot } from "./types.public.js";
7788// Channel docking: status snapshots flow through plugin.status hooks here.
9-async function buildSnapshotFromAccount<ResolvedAccount>(params: {
9+export async function buildChannelAccountSnapshotFromAccount<ResolvedAccount>(params: {
1010plugin: ChannelPlugin<ResolvedAccount>;
1111cfg: OpenClawConfig;
1212accountId: string;
1313account: ResolvedAccount;
1414runtime?: ChannelAccountSnapshot;
1515probe?: unknown;
1616audit?: unknown;
17+enabledFallback?: boolean;
18+configuredFallback?: boolean;
1719}): Promise<ChannelAccountSnapshot> {
20+let snapshot: ChannelAccountSnapshot;
1821if (params.plugin.status?.buildAccountSnapshot) {
19-const snapshot = await params.plugin.status.buildAccountSnapshot({
22+snapshot = await params.plugin.status.buildAccountSnapshot({
2023account: params.account,
2124cfg: params.cfg,
2225runtime: params.runtime,
2326probe: params.probe,
2427audit: params.audit,
2528});
26-return normalizeOptionalString(snapshot.accountId)
27- ? snapshot
28- : {
29- ...snapshot,
30-accountId: params.accountId,
31-};
32-}
33-const enabled = params.plugin.config.isEnabled
34- ? params.plugin.config.isEnabled(params.account, params.cfg)
35- : params.account && typeof params.account === "object"
36- ? (params.account as { enabled?: boolean }).enabled
37- : undefined;
38-const configured =
39-params.account && typeof params.account === "object" && "configured" in params.account
40- ? (params.account as { configured?: boolean }).configured
41- : params.plugin.config.isConfigured
42- ? await params.plugin.config.isConfigured(params.account, params.cfg)
29+} else {
30+const enabled = params.plugin.config.isEnabled
31+ ? params.plugin.config.isEnabled(params.account, params.cfg)
32+ : params.account && typeof params.account === "object"
33+ ? (params.account as { enabled?: boolean }).enabled
4334 : undefined;
35+const configured =
36+params.account && typeof params.account === "object" && "configured" in params.account
37+ ? (params.account as { configured?: boolean }).configured
38+ : params.plugin.config.isConfigured
39+ ? await params.plugin.config.isConfigured(params.account, params.cfg)
40+ : undefined;
41+snapshot = {
42+accountId: params.accountId,
43+ enabled,
44+ configured,
45+ ...projectSafeChannelAccountSnapshotFields(params.account),
46+ ...projectSafeChannelAccountSnapshotFields(params.runtime),
47+};
48+}
49+4450return {
45-accountId: params.accountId,
46- enabled,
47- configured,
48- ...projectSafeChannelAccountSnapshotFields(params.account),
51+ ...snapshot,
52+accountId: normalizeOptionalString(snapshot.accountId) ? snapshot.accountId : params.accountId,
53+enabled: snapshot.enabled ?? params.enabledFallback,
54+configured: snapshot.configured ?? params.configuredFallback,
55+ ...(params.probe !== undefined && snapshot.probe === undefined ? { probe: params.probe } : {}),
4956};
5057}
515852-async function inspectChannelAccount<ResolvedAccount>(params: {
53-plugin: ChannelPlugin<ResolvedAccount>;
54-cfg: OpenClawConfig;
55-accountId: string;
56-}): Promise<ResolvedAccount | null> {
57-return (params.plugin.config.inspectAccount?.(params.cfg, params.accountId) ??
58-(await inspectReadOnlyChannelAccount({
59-channelId: params.plugin.id,
60-cfg: params.cfg,
61-accountId: params.accountId,
62-}))) as ResolvedAccount | null;
63-}
64-6559export async function buildReadOnlySourceChannelAccountSnapshot<ResolvedAccount>(params: {
6660plugin: ChannelPlugin<ResolvedAccount>;
6761cfg: OpenClawConfig;
@@ -74,7 +68,7 @@ export async function buildReadOnlySourceChannelAccountSnapshot<ResolvedAccount>
7468if (!inspectedAccount) {
7569return null;
7670}
77-return await buildSnapshotFromAccount({
71+return await buildChannelAccountSnapshotFromAccount({
7872 ...params,
7973account: inspectedAccount as ResolvedAccount,
8074});
@@ -91,7 +85,7 @@ export async function buildChannelAccountSnapshot<ResolvedAccount>(params: {
9185const inspectedAccount = await inspectChannelAccount(params);
9286const account =
9387inspectedAccount ?? params.plugin.config.resolveAccount(params.cfg, params.accountId);
94-return await buildSnapshotFromAccount({
88+return await buildChannelAccountSnapshotFromAccount({
9589 ...params,
9690 account,
9791});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。