UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

342 lines 14.5 kB
import { A as RealtimeVoiceProviderCapabilities, C as resolveAgentDir, D as RealtimeVoiceBrowserSession, E as RealtimeVoiceBridge, M as MediaUnderstandingProvider, O as RealtimeVoiceBrowserSessionCreateRequest, P as OpenClawConfig, S as PluginLogger, T as RealtimeVoiceProviderPlugin, a as readProviderTextResponse, b as OAuthCredentials, c as resolveProviderAuthProfileApiKey, i as readProviderJsonResponse, k as RealtimeVoiceGatewayControl, n as redactSensitiveText, o as createRealtimeTranscriptionWebSocketSession, p as resolveProviderRequestHeaders$1, r as createProviderHttpError, s as isProviderAuthProfileConfigured, u as ProviderPlugin, v as ProviderAuthContext, w as RealtimeTranscriptionProviderPlugin, x as fetchWithSsrFGuard } from "../../plugin-entry-C8u6cSDu.js"; import "../../provider-http-BDtWYInw.js"; import "../../provider-model-shared-D6wBp930.js"; import "../../ssrf-runtime-ZHxOrB7Z.js"; import { DatabaseSync } from "node:sqlite"; import { ClientOptions, RawData } from "ws"; import { Agent, IncomingMessage, ServerResponse } from "node:http"; import "@openclaw/fs-safe/advanced"; import "@openclaw/fs-safe/secret"; import "@openclaw/fs-safe/root"; import "@openclaw/fs-safe/errors"; import "@openclaw/fs-safe/path"; import "@openclaw/fs-safe/secure-file"; import "@openclaw/fs-safe/walk"; import "@openclaw/fs-safe/durability"; import "@openclaw/fs-safe/store"; import "@openclaw/fs-safe/atomic"; //#region src/proxy-capture/env.d.ts type DebugProxySettings = { enabled: boolean; required: boolean; proxyUrl?: string; /** @deprecated Capture storage now lives in the shared state database. */ dbPath: string; /** @deprecated Capture payloads now live in the shared state database. */ blobDir: string; certDir: string; sessionId: string; sourceProcess: string; }; declare function resolveDebugProxySettings(env?: NodeJS.ProcessEnv): DebugProxySettings; declare function createDebugProxyWebSocketAgent(settings: DebugProxySettings): Agent | undefined; //#endregion //#region src/proxy-capture/types.d.ts type CaptureProtocol = "http" | "https" | "sse" | "ws" | "wss" | "connect"; type CaptureDirection = "outbound" | "inbound" | "local"; type CaptureEventKind = "connect" | "tls-handshake" | "request" | "response" | "ws-open" | "ws-frame" | "ws-close" | "error" | "retry-link"; type CaptureSessionRecord = { id: string; startedAt: number; endedAt?: number; mode: string; sourceScope: "openclaw"; sourceProcess: string; proxyUrl?: string; /** @deprecated Capture storage now lives in the shared state database. */ dbPath?: string; /** @deprecated Capture payloads now live in the shared state database. */ blobDir?: string; }; type CaptureBlobRecord = { blobId: string; path: string; encoding: "gzip"; sizeBytes: number; sha256: string; contentType?: string; }; type SharedCaptureBlobRecord = Omit<CaptureBlobRecord, "path"> & { path?: never; }; type CaptureEventRecord = { sessionId: string; ts: number; sourceScope: "openclaw"; sourceProcess: string; protocol: CaptureProtocol; direction: CaptureDirection; kind: CaptureEventKind; flowId: string; method?: string; host?: string; path?: string; status?: number; closeCode?: number; contentType?: string; headersJson?: string; dataText?: string; dataBlobId?: string; dataSha256?: string; errorText?: string; metaJson?: string; }; type CaptureQueryPreset = "double-sends" | "retry-storms" | "cache-busting" | "ws-duplicate-frames" | "missing-ack" | "error-bursts"; type CaptureQueryRow = Record<string, string | number | null>; type CaptureSessionSummary = { id: string; startedAt: number; endedAt?: number; mode: string; sourceProcess: string; proxyUrl?: string; eventCount: number; }; type CaptureObservedDimension = { value: string; count: number; }; type CaptureSessionCoverageSummary = { sessionId: string; totalEvents: number; unlabeledEventCount: number; providers: CaptureObservedDimension[]; apis: CaptureObservedDimension[]; models: CaptureObservedDimension[]; hosts: CaptureObservedDimension[]; localPeers: CaptureObservedDimension[]; }; //#endregion //#region src/proxy-capture/store.sqlite.d.ts type DebugProxyCaptureStoreOptions = { env?: NodeJS.ProcessEnv; }; declare class DebugProxyCaptureStoreImpl { readonly db: DatabaseSync; readonly dbPath: string; readonly blobDir: string; private readonly pathBased?; private closed; constructor(optionsOrDbPath?: DebugProxyCaptureStoreOptions | string, legacyBlobDir?: string); close(): void; get isClosed(): boolean; upsertSession(session: CaptureSessionRecord): void; endSession(sessionId: string, endedAt?: number): void; persistPayload(data: Buffer, contentType?: string): CaptureBlobRecord | SharedCaptureBlobRecord; recordEvent(event: CaptureEventRecord): void; private insertEvent; listSessions(limit?: number): CaptureSessionSummary[]; getSessionEvents(sessionId: string, limit?: number): Array<Record<string, unknown>>; summarizeSessionCoverage(sessionId: string): CaptureSessionCoverageSummary; readBlob(blobId: string): string | null; queryPreset(preset: CaptureQueryPreset, sessionId?: string): CaptureQueryRow[]; purgeAll(): { sessions: number; events: number; blobs: number; }; deleteSessions(sessionIds: string[]): { sessions: number; events: number; blobs: number; }; private deletePathBasedSessions; } type LegacyDebugProxyCaptureStore = Omit<DebugProxyCaptureStoreImpl, "persistPayload"> & { persistPayload(data: Buffer, contentType?: string): CaptureBlobRecord; }; type SharedDebugProxyCaptureStore = Omit<DebugProxyCaptureStoreImpl, "persistPayload"> & { persistPayload(data: Buffer, contentType?: string): SharedCaptureBlobRecord; }; declare function getDebugProxyCaptureStore(dbPath: string, blobDir: string): LegacyDebugProxyCaptureStore; declare function getDebugProxyCaptureStore(options?: DebugProxyCaptureStoreOptions): SharedDebugProxyCaptureStore; declare function closeDebugProxyCaptureStore(): void; declare function persistEventPayload(store: { persistPayload(data: Buffer, contentType?: string): CaptureBlobRecord | SharedCaptureBlobRecord; }, params: { data?: Buffer | string | null; contentType?: string; previewLimit?: number; }): { dataText?: string; dataBlobId?: string; dataSha256?: string; }; declare function safeJsonString(value: unknown): string | undefined; //#endregion //#region src/proxy-capture/runtime.d.ts type DebugProxyCaptureStoreLike = Pick<ReturnType<typeof getDebugProxyCaptureStore>, "upsertSession" | "endSession" | "recordEvent">; type DebugProxyCaptureRuntimeDeps = { getStore?: () => DebugProxyCaptureStoreLike; closeStore?: typeof closeDebugProxyCaptureStore; persistEventPayload?: (store: DebugProxyCaptureStoreLike, payload: Parameters<typeof persistEventPayload>[1]) => ReturnType<typeof persistEventPayload>; safeJsonString?: typeof safeJsonString; fetchTarget?: typeof globalThis; }; declare function captureWsEvent(params: { url: string; direction: "outbound" | "inbound" | "local"; kind: "ws-open" | "ws-frame" | "ws-close" | "error"; flowId: string; payload?: string | Buffer; closeCode?: number; errorText?: string; meta?: Record<string, unknown>; }, resolved?: DebugProxySettings, deps?: DebugProxyCaptureRuntimeDeps): void; //#endregion //#region src/infra/errors.d.ts declare function formatErrorMessage(err: unknown): string; //#endregion //#region extensions/openai/default-models.d.ts export declare const OPENAI_DEFAULT_MODEL = "openai/gpt-5.6-sol"; export declare const OPENAI_CODEX_DEFAULT_MODEL = "openai/gpt-5.6-sol"; export declare const OPENAI_DEFAULT_IMAGE_MODEL = "gpt-image-2"; export declare const OPENAI_DEFAULT_TTS_MODEL = "gpt-4o-mini-tts"; export declare const OPENAI_DEFAULT_TTS_VOICE = "alloy"; export declare const OPENAI_DEFAULT_AUDIO_TRANSCRIPTION_MODEL = "gpt-4o-transcribe"; export declare const OPENAI_DEFAULT_EMBEDDING_MODEL = "text-embedding-3-small"; export declare function applyOpenAIProviderConfig(cfg: OpenClawConfig): OpenClawConfig; export declare function applyOpenAIConfig(cfg: OpenClawConfig): OpenClawConfig; //#endregion //#region extensions/openai/media-understanding-provider.d.ts export declare const openaiMediaUnderstandingProvider: MediaUnderstandingProvider; //#endregion //#region extensions/openai/openai-chatgpt-oauth.runtime.d.ts export declare function loginOpenAICodexOAuth(params: { prompter: ProviderAuthContext["prompter"]; runtime: ProviderAuthContext["runtime"]; oauth: ProviderAuthContext["oauth"]; isRemote: boolean; openUrl: (url: string) => Promise<void>; signal?: AbortSignal; assertCurrent?: () => void; onManualCodeInput?: () => Promise<string>; localBrowserMessage?: string; }): Promise<OAuthCredentials | null>; //#endregion //#region extensions/openai/openai-chatgpt-oauth-flow.runtime.d.ts /** * Refresh OpenAI Codex OAuth token */ declare function refreshOpenAICodexToken$1(refreshToken: string): Promise<OAuthCredentials>; //#endregion //#region extensions/openai/openai-chatgpt-provider.runtime.d.ts export declare function refreshOpenAICodexToken(...args: Parameters<typeof refreshOpenAICodexToken$1>): Promise<Awaited<ReturnType<typeof refreshOpenAICodexToken$1>>>; //#endregion //#region extensions/openai/openai-provider.d.ts export declare function buildOpenAIProvider(): ProviderPlugin; //#endregion //#region extensions/openai/realtime-transcription-provider.d.ts export declare function buildOpenAIRealtimeTranscriptionProvider(): RealtimeTranscriptionProviderPlugin; //#endregion //#region extensions/openai/realtime-host.d.ts declare const openAIRealtimeHost: { resolveAgentDir: typeof resolveAgentDir; isProviderAuthProfileConfigured: typeof isProviderAuthProfileConfigured; resolveProviderAuthProfileApiKey: typeof resolveProviderAuthProfileApiKey; resolveProviderRequestHeaders: typeof resolveProviderRequestHeaders$1; createRealtimeTranscriptionWebSocketSession: typeof createRealtimeTranscriptionWebSocketSession; captureWsEvent: typeof captureWsEvent; createDebugProxyWebSocketAgent: typeof createDebugProxyWebSocketAgent; resolveDebugProxySettings: typeof resolveDebugProxySettings; fetchWithSsrFGuard: typeof fetchWithSsrFGuard; createProviderHttpError: typeof createProviderHttpError; readProviderJsonResponse: typeof readProviderJsonResponse; readProviderTextResponse: typeof readProviderTextResponse; formatErrorMessage: typeof formatErrorMessage; warn: (value: string) => string; redactSensitiveText: typeof redactSensitiveText; }; type OpenAIRealtimeHost = typeof openAIRealtimeHost; //#endregion //#region extensions/openai/realtime-quicksilver-wire.d.ts type OpenAIQuicksilverAuth = { type: "api-key"; token: string; } | { type: "oauth"; token: string; accountId: string; }; type OpenAIQuicksilverInitialItem = { role: "user" | "assistant"; text: string; }; //#endregion //#region extensions/openai/realtime-quicksilver-sideband.d.ts type OpenAIQuicksilverSocket = { readonly readyState: number; send(payload: string): void; close(code?: number, reason?: string): void; on(event: "message", listener: (data: RawData, isBinary: boolean) => void): OpenAIQuicksilverSocket; on(event: "error", listener: (error: Error) => void): OpenAIQuicksilverSocket; on(event: "close", listener: (code: number, reason: Buffer) => void): OpenAIQuicksilverSocket; once(event: "open", listener: () => void): OpenAIQuicksilverSocket; once(event: "error", listener: (error: Error) => void): OpenAIQuicksilverSocket; once(event: "close", listener: (code: number, reason: Buffer) => void): OpenAIQuicksilverSocket; off(event: "open", listener: () => void): OpenAIQuicksilverSocket; off(event: "message", listener: (data: RawData, isBinary: boolean) => void): OpenAIQuicksilverSocket; off(event: "error", listener: (error: Error) => void): OpenAIQuicksilverSocket; off(event: "close", listener: (code: number, reason: Buffer) => void): OpenAIQuicksilverSocket; }; type OpenAIQuicksilverSocketFactory = (url: string, options: ClientOptions) => OpenAIQuicksilverSocket; //#endregion //#region extensions/openai/realtime-quicksilver-session.d.ts type OpenAIQuicksilverSessionRequest = { initialItems?: OpenAIQuicksilverInitialItem[]; ownerConnId?: string; } & ((RealtimeVoiceBrowserSessionCreateRequest & { gaSession?: Record<string, unknown> & { model: string; }; gaSideband?: never; }) | (Omit<RealtimeVoiceBrowserSessionCreateRequest, "clientControl" | "gatewayControl"> & { clientControl: { owner: "gateway"; }; gatewayControl: RealtimeVoiceGatewayControl; gaSession: Record<string, unknown> & { model: string; }; gaSideband: { createBridge: (params: { apiKey: string; callId: string; onTerminal: () => void; }) => RealtimeVoiceBridge; }; })); declare function createOpenAIQuicksilverBrowserSessionBroker(params: { getConfig: () => OpenClawConfig | undefined; logger: Pick<PluginLogger, "debug" | "warn">; fetchImpl?: typeof fetch; webSocketFactory?: OpenAIQuicksilverSocketFactory; onCleanupComplete?: () => void; }): { broker: { capabilities: Partial<RealtimeVoiceProviderCapabilities> & { handlesAgentConsult: true; }; createBrowserSession: (request: OpenAIQuicksilverSessionRequest, auth: OpenAIQuicksilverAuth) => Promise<RealtimeVoiceBrowserSession>; cancelBrowserSession: (session: RealtimeVoiceBrowserSession) => Promise<void> | void; }; handler: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>; cleanup: () => Promise<void>; getSessionCounts: () => { pending: number; inFlight: number; active: number; reservations: number; }; }; //#endregion //#region extensions/openai/realtime-voice-provider-factory.d.ts type OpenAIQuicksilverBrowserSessionBroker = ReturnType<typeof createOpenAIQuicksilverBrowserSessionBroker>["broker"]; declare function buildOpenAIRealtimeVoiceProvider$1(context: OpenAIRealtimeHost, options?: { quicksilverBrowserSessionBroker?: OpenAIQuicksilverBrowserSessionBroker; logger?: Pick<PluginLogger, "debug" | "warn">; }): RealtimeVoiceProviderPlugin; //#endregion //#region extensions/openai/realtime-voice-provider.d.ts export declare function buildOpenAIRealtimeVoiceProvider(options?: Parameters<typeof buildOpenAIRealtimeVoiceProvider$1>[1]): RealtimeVoiceProviderPlugin; //#endregion