mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-09 16:21:15 +00:00
101 lines
2.7 KiB
TypeScript
101 lines
2.7 KiB
TypeScript
export type StreamingMode = "off" | "partial" | "block" | "progress";
|
|
export type SlackLegacyDraftStreamMode = "replace" | "status_final" | "append";
|
|
|
|
function normalizeStreamingMode(value: unknown): string | null {
|
|
if (typeof value !== "string") {
|
|
return null;
|
|
}
|
|
const normalized = value.trim().toLowerCase();
|
|
return normalized || null;
|
|
}
|
|
|
|
function parseStreamingMode(value: unknown): StreamingMode | null {
|
|
const normalized = normalizeStreamingMode(value);
|
|
if (
|
|
normalized === "off" ||
|
|
normalized === "partial" ||
|
|
normalized === "block" ||
|
|
normalized === "progress"
|
|
) {
|
|
return normalized;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function parseSlackLegacyDraftStreamMode(value: unknown): SlackLegacyDraftStreamMode | null {
|
|
const normalized = normalizeStreamingMode(value);
|
|
if (normalized === "replace" || normalized === "status_final" || normalized === "append") {
|
|
return normalized;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function mapSlackLegacyDraftStreamModeToStreaming(mode: SlackLegacyDraftStreamMode): StreamingMode {
|
|
if (mode === "append") {
|
|
return "block";
|
|
}
|
|
if (mode === "status_final") {
|
|
return "progress";
|
|
}
|
|
return "partial";
|
|
}
|
|
|
|
export function mapStreamingModeToSlackLegacyDraftStreamMode(mode: StreamingMode) {
|
|
if (mode === "block") {
|
|
return "append" as const;
|
|
}
|
|
if (mode === "progress") {
|
|
return "status_final" as const;
|
|
}
|
|
return "replace" as const;
|
|
}
|
|
|
|
export function resolveSlackStreamingMode(
|
|
params: {
|
|
streamMode?: unknown;
|
|
streaming?: unknown;
|
|
} = {},
|
|
): StreamingMode {
|
|
const parsedStreaming = parseStreamingMode(params.streaming);
|
|
if (parsedStreaming) {
|
|
return parsedStreaming;
|
|
}
|
|
const legacyStreamMode = parseSlackLegacyDraftStreamMode(params.streamMode);
|
|
if (legacyStreamMode) {
|
|
return mapSlackLegacyDraftStreamModeToStreaming(legacyStreamMode);
|
|
}
|
|
if (typeof params.streaming === "boolean") {
|
|
return params.streaming ? "partial" : "off";
|
|
}
|
|
return "partial";
|
|
}
|
|
|
|
export function resolveSlackNativeStreaming(
|
|
params: {
|
|
nativeStreaming?: unknown;
|
|
streaming?: unknown;
|
|
} = {},
|
|
): boolean {
|
|
if (typeof params.nativeStreaming === "boolean") {
|
|
return params.nativeStreaming;
|
|
}
|
|
if (typeof params.streaming === "boolean") {
|
|
return params.streaming;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
export function formatSlackStreamModeMigrationMessage(
|
|
pathPrefix: string,
|
|
resolvedStreaming: string,
|
|
): string {
|
|
return `Moved ${pathPrefix}.streamMode → ${pathPrefix}.streaming (${resolvedStreaming}).`;
|
|
}
|
|
|
|
export function formatSlackStreamingBooleanMigrationMessage(
|
|
pathPrefix: string,
|
|
resolvedNativeStreaming: boolean,
|
|
): string {
|
|
return `Moved ${pathPrefix}.streaming (boolean) → ${pathPrefix}.nativeStreaming (${resolvedNativeStreaming}).`;
|
|
}
|