openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
342 lines • 14.5 kB
TypeScript
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