refactor: centralize typing mode signals

This commit is contained in:
Peter Steinberger
2026-01-07 22:18:11 +00:00
parent bac1608933
commit 434c25331e
13 changed files with 192 additions and 73 deletions

View File

@@ -66,8 +66,8 @@ import {
} from "./reply/session-updates.js";
import { createTypingController } from "./reply/typing.js";
import {
createTypingSignaler,
resolveTypingMode,
shouldStartTypingImmediately,
} from "./reply/typing-mode.js";
import type { MsgContext, TemplateContext } from "./templating.js";
import {
@@ -599,12 +599,16 @@ export async function getReplyFromConfig(
const wasMentioned = ctx.WasMentioned === true;
const isHeartbeat = opts?.isHeartbeat === true;
const typingMode = resolveTypingMode({
configured: agentCfg?.typingMode,
configured: sessionCfg?.typingMode ?? agentCfg?.typingMode,
isGroupChat,
wasMentioned,
isHeartbeat,
});
const shouldEagerType = shouldStartTypingImmediately(typingMode);
const typingSignals = createTypingSignaler({
typing,
mode: typingMode,
isHeartbeat,
});
const shouldInjectGroupIntro = Boolean(
isGroupChat &&
(isFirstTurnInSession || sessionEntry?.groupActivationNeedsSystemIntro),
@@ -798,8 +802,8 @@ export async function getReplyFromConfig(
},
};
if (shouldEagerType) {
await typing.startTypingLoop();
if (typingSignals.shouldStartImmediately) {
await typingSignals.signalRunStart();
}
return runReplyAgent({