Files
openclaw/extensions/openai/index.ts
Peter Steinberger 6aa27d6ecd refactor: retire August compat windows (embedding API, pi aliases, target parser, spawning hook, setup exports, WhatsApp inbound aliases) (#124416)
* refactor(plugin-sdk): retire embedded Pi aliases

* refactor(channels): retire explicit target compatibility

* refactor(plugins): retire subagent spawning hook

* refactor(plugin-sdk): retire shipped channel setup exports

* refactor(whatsapp): retire inbound callback aliases

Proof: focused build and WhatsApp E2E green; broad WhatsApp suite 188/189 files green. extensions/whatsapp/src/monitor-inbox.policy.test.ts flakes only in the parallel batch and passes isolated (10/10).

* refactor(plugin-sdk): retire memory embedding registrar

Migrate every bundled provider and manifest to registerEmbeddingProvider and contracts.embeddingProviders. Preserve memory-specific batching, local-service acquisition, index identity, and auto-selection through the canonical generic registry adapter, then remove the parallel registrar, registry, diagnostics, contracts, tests, and docs.

* chore(plugin-sdk): tighten retired surface budgets

Pin the post-retirement public SDK surface to 144 entrypoints, 4,312 exports, 2,564 callable exports, and 1,133 deprecated exports; agent-harness-runtime now permits exactly nine deprecated exports.
2026-08-15 22:43:47 -07:00

93 lines
4.1 KiB
TypeScript

// Openai plugin entrypoint registers its OpenClaw integration.
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts";
import { adaptMemoryEmbeddingProviderAdapter } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
import { resolvePluginConfigObject } from "openclaw/plugin-sdk/plugin-config-runtime";
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { buildProviderToolCompatFamilyHooks } from "openclaw/plugin-sdk/provider-tools";
import { buildOpenAIImageGenerationProvider } from "./image-generation-provider.js";
import { openaiMediaUnderstandingProvider } from "./media-understanding-provider.js";
import { openAiMemoryEmbeddingProviderAdapter } from "./memory-embedding-adapter.js";
import { buildOpenAIProvider } from "./openai-provider.js";
import {
resolveOpenAIPromptOverlayMode,
resolveOpenAISystemPromptContribution,
} from "./prompt-overlay.js";
import {
acquireOpenAIQuicksilverBrowserSessionBroker,
releaseOpenAIQuicksilverBrowserSessionBroker,
} from "./realtime-quicksilver-session-owner.js";
import { OPENAI_QUICKSILVER_OFFER_PATH } from "./realtime-quicksilver-session.js";
import { buildOpenAIRealtimeTranscriptionProvider } from "./realtime-transcription-provider.js";
import { buildOpenAIRealtimeVoiceProvider } from "./realtime-voice-provider.js";
import { buildOpenAISpeechProvider } from "./speech-provider.js";
import { buildOpenAIVideoGenerationProvider } from "./video-generation-provider.js";
export default definePluginEntry({
id: "openai",
name: "OpenAI Provider",
description: "Bundled OpenAI provider plugins",
register(api) {
const quicksilverSession =
api.registrationMode === "full"
? acquireOpenAIQuicksilverBrowserSessionBroker({
getConfig: () => api.runtime.config.current() as OpenClawConfig,
logger: api.logger,
})
: undefined;
if (quicksilverSession) {
api.registerHttpRoute({
path: OPENAI_QUICKSILVER_OFFER_PATH,
auth: "plugin",
match: "exact",
handler: quicksilverSession.handler,
});
api.lifecycle.registerRuntimeLifecycle({
id: "openai-quicksilver-realtime-browser-session",
description: "Close OpenAI browser sidebands when the plugin stops",
cleanup: (ctx) => {
if (ctx.reason !== "disable") {
return undefined;
}
return releaseOpenAIQuicksilverBrowserSessionBroker(quicksilverSession);
},
});
}
const openAIToolCompatHooks = buildProviderToolCompatFamilyHooks("openai");
const buildProviderWithPromptContribution = <T extends ReturnType<typeof buildOpenAIProvider>>(
provider: T,
): T => ({
...provider,
...openAIToolCompatHooks,
resolveSystemPromptContribution: (ctx) => {
const runtimePluginConfig = resolvePluginConfigObject(ctx.config, "openai");
const pluginConfig =
runtimePluginConfig ??
(ctx.config ? undefined : (api.pluginConfig as Record<string, unknown>));
return resolveOpenAISystemPromptContribution({
config: ctx.config,
legacyPluginConfig: pluginConfig,
mode: resolveOpenAIPromptOverlayMode(pluginConfig),
modelProviderId: provider.id,
modelId: ctx.modelId,
trigger: ctx.trigger,
});
},
});
api.registerProvider(buildProviderWithPromptContribution(buildOpenAIProvider()));
api.registerEmbeddingProvider(
adaptMemoryEmbeddingProviderAdapter(openAiMemoryEmbeddingProviderAdapter),
);
api.registerImageGenerationProvider(buildOpenAIImageGenerationProvider());
api.registerRealtimeTranscriptionProvider(buildOpenAIRealtimeTranscriptionProvider());
api.registerRealtimeVoiceProvider(
buildOpenAIRealtimeVoiceProvider({
quicksilverBrowserSessionBroker: quicksilverSession?.broker,
logger: api.logger,
}),
);
api.registerSpeechProvider(buildOpenAISpeechProvider());
api.registerMediaUnderstandingProvider(openaiMediaUnderstandingProvider);
api.registerVideoGenerationProvider(buildOpenAIVideoGenerationProvider());
},
});