openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
99 lines (98 loc) • 3.92 kB
JavaScript
import { a as asOptionalRecord } from "./record-coerce-TIsquoVR.mjs";
import { r as createLazyRuntimeModule } from "./lazy-runtime-CJrzFzqU.mjs";
import "./http-body-CZtbU96N.mjs";
import "./mime-CGDYrRzL.mjs";
import "./media-services-BJfFhBn8.mjs";
import "./local-roots-CQtu4chZ.mjs";
import "./store-B9-NomZN.mjs";
import "./fetch-Bb8xDoaq.mjs";
import { a as chunkText } from "./chunk-BWbat9wI.mjs";
import "./defaults-CjQjJjHh.mjs";
import "./image-runtime-7C6AWIEf.mjs";
import "./audio-DTKvbww3.mjs";
import "./outbound-attachment-B9kI1l4M.mjs";
import "./agent-media-payload-B8N_-Tni.mjs";
import { t as sanitizeForPlainText } from "./sanitize-text-DNqwrwvR.mjs";
import "./qr-image-Gsr0r1z5.mjs";
import "./qr-terminal-BJZxPpi0.mjs";
import "./temp-files-DRN_5KcK.mjs";
import { t as resolveChannelMediaMaxBytes } from "./media-limits-Dz58NPxA.mjs";
//#region src/channels/plugins/outbound/direct-text-media.ts
function readNumberField(record, key) {
const value = record?.[key];
return typeof value === "number" ? value : void 0;
}
function createScopedChannelMediaMaxBytesResolver(channel) {
return (params) => resolveChannelMediaMaxBytes({
cfg: params.cfg,
accountId: params.accountId,
resolveChannelLimitMb: ({ cfg, accountId }) => {
const channelConfig = asOptionalRecord(cfg.channels?.[channel]);
return readNumberField(asOptionalRecord(asOptionalRecord(channelConfig?.accounts)?.[accountId]), "mediaMaxMb") ?? readNumberField(channelConfig, "mediaMaxMb");
}
});
}
function createDirectTextMediaOutbound(params) {
const sendDirect = async ({ cfg, to, text, accountId, deps, replyToId }, buildOptions, media) => {
const send = params.resolveSender(deps);
const maxBytes = params.resolveMaxBytes({
cfg,
accountId
});
const result = await send(to, text, buildOptions({
cfg,
mediaUrl: media?.mediaUrl,
mediaAccess: media?.mediaAccess,
mediaLocalRoots: media?.mediaAccess?.localRoots,
mediaReadFile: media?.mediaAccess?.readFile,
accountId,
replyToId,
maxBytes
}));
return {
channel: params.channel,
...result
};
};
const outbound = {
deliveryMode: "direct",
chunker: chunkText,
chunkerMode: "text",
textChunkLimit: 4e3,
sanitizeText: ({ text }) => sanitizeForPlainText(text),
sendPayload: async (ctx) => {
const { sendTextMediaPayload } = await import("./plugin-sdk/reply-payload.js");
return await sendTextMediaPayload({
channel: params.channel,
ctx,
adapter: outbound
});
},
sendText: (ctx) => sendDirect(ctx, params.buildTextOptions),
sendMedia: (ctx) => {
const { mediaUrl, mediaAccess, mediaLocalRoots, mediaReadFile } = ctx;
return sendDirect(ctx, params.buildMediaOptions, {
mediaUrl,
mediaAccess: mediaAccess ?? (mediaLocalRoots || mediaReadFile ? {
...mediaLocalRoots?.length ? { localRoots: mediaLocalRoots } : {},
...mediaReadFile ? { readFile: mediaReadFile } : {}
} : void 0)
});
}
};
return outbound;
}
//#endregion
//#region src/plugin-sdk/media-runtime.ts
/**
* @deprecated Broad public SDK barrel. Prefer focused media-store, media-mime,
* outbound-media, and capability runtime subpaths.
*/
const loadAudioPreflight = createLazyRuntimeModule(() => import("./audio-preflight-MVOJoMel.mjs"));
const loadMediaRunner = createLazyRuntimeModule(() => import("./runner-HVNcza3B.mjs"));
/** Transcribes the first audio attachment without loading the runner during plugin registration. */
const transcribeFirstAudio = async (...args) => (await loadAudioPreflight()).transcribeFirstAudio(...args);
/** Resolves an image model through the media runner when selection is requested. */
const resolveAutoImageModel = async (...args) => (await loadMediaRunner()).resolveAutoImageModel(...args);
//#endregion
export { createScopedChannelMediaMaxBytesResolver as i, transcribeFirstAudio as n, createDirectTextMediaOutbound as r, resolveAutoImageModel as t };