Files
openclaw/src/plugin-sdk/plugin-test-api.ts

100 lines
3.4 KiB
TypeScript

import {
attachPluginApiFacades,
type OpenClawPluginApiWithoutFacades,
} from "../plugins/api-facades.js";
import type { OpenClawPluginApi } from "./plugin-runtime.js";
export type TestPluginApiInput = Partial<OpenClawPluginApi>;
export function createTestPluginApi(api: TestPluginApiInput = {}): OpenClawPluginApi {
const { agent, lifecycle, runContext, session, ...flatApi } = api;
const mergedApi = {
id: "test-plugin",
name: "test-plugin",
source: "test",
registrationMode: "full",
config: {},
runtime: {} as OpenClawPluginApi["runtime"],
logger: { info() {}, warn() {}, error() {}, debug() {} },
registerTool() {},
registerHook() {},
registerHttpRoute() {},
registerHostedMediaResolver() {},
registerChannel() {},
registerGatewayMethod() {},
registerCli() {},
registerNodeCliFeature() {},
registerCliBackend() {},
registerTextTransforms() {},
registerService() {},
registerGatewayDiscoveryService() {},
registerReload() {},
registerNodeHostCommand() {},
registerNodeInvokePolicy() {},
registerSecurityAuditCollector() {},
registerConfigMigration() {},
registerMigrationProvider() {},
registerAutoEnableProbe() {},
registerProvider() {},
registerModelCatalogProvider() {},
registerSpeechProvider() {},
registerRealtimeTranscriptionProvider() {},
registerRealtimeVoiceProvider() {},
registerMediaUnderstandingProvider() {},
registerImageGenerationProvider() {},
registerMusicGenerationProvider() {},
registerVideoGenerationProvider() {},
registerWebFetchProvider() {},
registerWebSearchProvider() {},
registerInteractiveHandler() {},
onConversationBindingResolved() {},
registerCommand() {},
registerContextEngine() {},
registerCompactionProvider() {},
registerAgentHarness() {},
registerCodexAppServerExtensionFactory() {},
registerAgentToolResultMiddleware() {},
registerDetachedTaskRuntime() {},
registerSessionExtension() {},
enqueueNextTurnInjection: async (injection) => ({
enqueued: false,
id: "",
sessionKey: injection.sessionKey,
}),
registerTrustedToolPolicy() {},
registerToolMetadata() {},
registerControlUiDescriptor() {},
registerRuntimeLifecycle() {},
registerAgentEventSubscription() {},
emitAgentEvent: () => ({ emitted: false as const, reason: "test api" }),
setRunContext: () => false,
getRunContext: () => undefined,
clearRunContext() {},
registerSessionSchedulerJob: () => undefined,
registerSessionAction() {},
sendSessionAttachment: async () => ({ ok: false, error: "test plugin api" }),
scheduleSessionTurn: async () => undefined,
unscheduleSessionTurnsByTag: async () => ({ removed: 0, failed: 0 }),
registerMemoryCapability() {},
registerMemoryPromptSection() {},
registerMemoryPromptSupplement() {},
registerMemoryCorpusSupplement() {},
registerMemoryFlushPlan() {},
registerMemoryRuntime() {},
registerMemoryEmbeddingProvider() {},
resolvePath(input: string) {
return input;
},
on() {},
...flatApi,
} as OpenClawPluginApiWithoutFacades;
const withFacades = attachPluginApiFacades(mergedApi);
return {
...withFacades,
...(agent ? { agent } : {}),
...(lifecycle ? { lifecycle } : {}),
...(runContext ? { runContext } : {}),
...(session ? { session } : {}),
};
}