refactor: unify typing dispatch lifecycle and policy boundaries

This commit is contained in:
Peter Steinberger
2026-02-26 17:36:09 +01:00
parent 6fd9ec97de
commit 273973d374
19 changed files with 420 additions and 164 deletions

View File

@@ -0,0 +1,35 @@
import { INTERNAL_MESSAGE_CHANNEL } from "../../utils/message-channel.js";
import type { TypingPolicy } from "../types.js";
export type ResolveRunTypingPolicyParams = {
requestedPolicy?: TypingPolicy;
suppressTyping?: boolean;
isHeartbeat?: boolean;
originatingChannel?: string;
systemEvent?: boolean;
};
export type ResolvedRunTypingPolicy = {
typingPolicy: TypingPolicy;
suppressTyping: boolean;
};
export function resolveRunTypingPolicy(
params: ResolveRunTypingPolicyParams,
): ResolvedRunTypingPolicy {
const typingPolicy = params.isHeartbeat
? "heartbeat"
: params.originatingChannel === INTERNAL_MESSAGE_CHANNEL
? "internal_webchat"
: params.systemEvent
? "system_event"
: (params.requestedPolicy ?? "auto");
const suppressTyping =
params.suppressTyping === true ||
typingPolicy === "heartbeat" ||
typingPolicy === "system_event" ||
typingPolicy === "internal_webchat";
return { typingPolicy, suppressTyping };
}