





















@@ -1,57 +1,15 @@
1-import type { OpenClawConfig } from "../../../../config/config.js";
21import type { ChannelId } from "../../channel-id.types.js";
3-import type { ChannelPlugin } from "../../types.js";
4-import {
5-getBundledChannelPlugin,
6-listBundledChannelPluginIds,
7-listBundledChannelPlugins,
8-} from "./bundled-channel-plugin-loader.js";
9-import { channelPluginSurfaceKeys, type ChannelPluginSurface } from "./manifest.js";
10-11-type SurfaceContractEntry = {
12-id: string;
13-plugin: Pick<
14-ChannelPlugin,
15-| "id"
16-| "actions"
17-| "setup"
18-| "status"
19-| "outbound"
20-| "messaging"
21-| "threading"
22-| "directory"
23-| "gateway"
24->;
25-surfaces: readonly ChannelPluginSurface[];
26-};
27-28-type ThreadingContractEntry = {
29-id: string;
30-plugin: Pick<ChannelPlugin, "id" | "threading">;
31-};
2+import { listBundledChannelPluginIds } from "./bundled-channel-plugin-loader.js";
323334type ThreadingContractRef = {
345id: ChannelId;
356};
36737-type DirectoryContractEntry = {
38-id: string;
39-plugin: Pick<ChannelPlugin, "id" | "directory">;
40-coverage: "lookups" | "presence";
41-cfg?: OpenClawConfig;
42-accountId?: string;
43-};
44-458type DirectoryContractRef = {
469id: ChannelId;
4710coverage: "lookups" | "presence";
4811};
491250-let surfaceContractRegistryCache: SurfaceContractEntry[] | undefined;
51-const surfaceContractEntryCache = new Map<ChannelId, SurfaceContractEntry | null>();
52-let threadingContractRegistryCache: ThreadingContractEntry[] | undefined;
53-let directoryContractRegistryCache: DirectoryContractEntry[] | undefined;
54-5513const threadingContractPluginIds = new Set<ChannelId>([
5614"bluebubbles",
5715"discord",
@@ -82,14 +40,6 @@ const directoryContractPluginIds = new Set<ChannelId>([
8240"zalouser",
8341]);
844285-function toSurfaceContractEntry(plugin: ChannelPlugin): SurfaceContractEntry {
86-return {
87-id: plugin.id,
88- plugin,
89-surfaces: channelPluginSurfaceKeys.filter((surface) => Boolean(plugin[surface])),
90-};
91-}
92-9343function getBundledChannelPluginIdsForShard(params: {
9444shardIndex: number;
9545shardCount: number;
@@ -99,74 +49,13 @@ function getBundledChannelPluginIdsForShard(params: {
9949);
10050}
10151102-function getSurfaceContractEntry(id: ChannelId): SurfaceContractEntry | undefined {
103-if (surfaceContractEntryCache.has(id)) {
104-return surfaceContractEntryCache.get(id) ?? undefined;
105-}
106-const plugin = getBundledChannelPlugin(id);
107-const entry = plugin ? toSurfaceContractEntry(plugin) : null;
108-surfaceContractEntryCache.set(id, entry);
109-return entry ?? undefined;
110-}
111-112-export function getSurfaceContractRegistry(): SurfaceContractEntry[] {
113-surfaceContractRegistryCache ??= listBundledChannelPlugins().map(toSurfaceContractEntry);
114-return surfaceContractRegistryCache;
115-}
116-117-export function getSurfaceContractRegistryShard(params: {
118-shardIndex: number;
119-shardCount: number;
120-}): SurfaceContractEntry[] {
121-return getBundledChannelPluginIdsForShard(params).flatMap((id) => {
122-const entry = getSurfaceContractEntry(id);
123-return entry ? [entry] : [];
124-});
125-}
126-12752export function getSurfaceContractRegistryShardIds(params: {
12853shardIndex: number;
12954shardCount: number;
13055}): readonly ChannelId[] {
13156return getBundledChannelPluginIdsForShard(params);
13257}
13358134-export function getThreadingContractRegistry(): ThreadingContractEntry[] {
135-threadingContractRegistryCache ??= listBundledChannelPluginIds()
136-.filter((id) => threadingContractPluginIds.has(id))
137-.flatMap((id) => {
138-const entry = getSurfaceContractEntry(id);
139-return entry && entry.surfaces.includes("threading")
140- ? [
141-{
142-id: entry.id,
143-plugin: entry.plugin,
144-},
145-]
146- : [];
147-});
148-return threadingContractRegistryCache;
149-}
150-151-export function getThreadingContractRegistryShard(params: {
152-shardIndex: number;
153-shardCount: number;
154-}): ThreadingContractEntry[] {
155-return getBundledChannelPluginIdsForShard(params)
156-.filter((id) => threadingContractPluginIds.has(id))
157-.flatMap((id) => {
158-const entry = getSurfaceContractEntry(id);
159-return entry && entry.surfaces.includes("threading")
160- ? [
161-{
162-id: entry.id,
163-plugin: entry.plugin,
164-},
165-]
166- : [];
167-});
168-}
169-17059export function getThreadingContractRegistryShardRefs(params: {
17160shardIndex: number;
17261shardCount: number;
@@ -178,44 +67,6 @@ export function getThreadingContractRegistryShardRefs(params: {
1786717968const directoryPresenceOnlyIds = new Set(["whatsapp", "zalouser"]);
18069181-export function getDirectoryContractRegistry(): DirectoryContractEntry[] {
182-directoryContractRegistryCache ??= listBundledChannelPluginIds()
183-.filter((id) => directoryContractPluginIds.has(id))
184-.flatMap((id) => {
185-const entry = getSurfaceContractEntry(id);
186-return entry && entry.surfaces.includes("directory")
187- ? [
188-{
189-id: entry.id,
190-plugin: entry.plugin,
191-coverage: directoryPresenceOnlyIds.has(entry.id) ? "presence" : "lookups",
192-},
193-]
194- : [];
195-});
196-return directoryContractRegistryCache;
197-}
198-199-export function getDirectoryContractRegistryShard(params: {
200-shardIndex: number;
201-shardCount: number;
202-}): DirectoryContractEntry[] {
203-return getBundledChannelPluginIdsForShard(params)
204-.filter((id) => directoryContractPluginIds.has(id))
205-.flatMap((id) => {
206-const entry = getSurfaceContractEntry(id);
207-return entry && entry.surfaces.includes("directory")
208- ? [
209-{
210-id: entry.id,
211-plugin: entry.plugin,
212-coverage: directoryPresenceOnlyIds.has(entry.id) ? "presence" : "lookups",
213-},
214-]
215- : [];
216-});
217-}
218-21970export function getDirectoryContractRegistryShardRefs(params: {
22071shardIndex: number;
22172shardCount: number;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。