refactor(reply): share verbose gate helpers

This commit is contained in:
Peter Steinberger
2026-02-18 18:14:55 +00:00
parent efd6ed9a56
commit 06b2df9fc7
2 changed files with 139 additions and 39 deletions

View File

@@ -11,54 +11,43 @@ const hasAudioMedia = (urls?: string[]): boolean =>
export const isAudioPayload = (payload: ReplyPayload): boolean =>
hasAudioMedia(payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : undefined));
export const createShouldEmitToolResult = (params: {
type VerboseGateParams = {
sessionKey?: string;
storePath?: string;
resolvedVerboseLevel: VerboseLevel;
}): (() => boolean) => {
// Normalize verbose values from session store/config so false/"false" still means off.
const fallbackVerbose = normalizeVerboseLevel(String(params.resolvedVerboseLevel ?? "")) ?? "off";
return () => {
if (!params.sessionKey || !params.storePath) {
return fallbackVerbose !== "off";
}
try {
const store = loadSessionStore(params.storePath);
const entry = store[params.sessionKey];
const current = normalizeVerboseLevel(String(entry?.verboseLevel ?? ""));
if (current) {
return current !== "off";
}
} catch {
// ignore store read failures
}
return fallbackVerbose !== "off";
};
};
export const createShouldEmitToolOutput = (params: {
sessionKey?: string;
storePath?: string;
resolvedVerboseLevel: VerboseLevel;
}): (() => boolean) => {
function resolveCurrentVerboseLevel(params: VerboseGateParams): VerboseLevel | undefined {
if (!params.sessionKey || !params.storePath) {
return undefined;
}
try {
const store = loadSessionStore(params.storePath);
const entry = store[params.sessionKey];
return normalizeVerboseLevel(String(entry?.verboseLevel ?? ""));
} catch {
// ignore store read failures
return undefined;
}
}
function createVerboseGate(
params: VerboseGateParams,
shouldEmit: (level: VerboseLevel) => boolean,
): () => boolean {
// Normalize verbose values from session store/config so false/"false" still means off.
const fallbackVerbose = normalizeVerboseLevel(String(params.resolvedVerboseLevel ?? "")) ?? "off";
return () => {
if (!params.sessionKey || !params.storePath) {
return fallbackVerbose === "full";
}
try {
const store = loadSessionStore(params.storePath);
const entry = store[params.sessionKey];
const current = normalizeVerboseLevel(String(entry?.verboseLevel ?? ""));
if (current) {
return current === "full";
}
} catch {
// ignore store read failures
}
return fallbackVerbose === "full";
return shouldEmit(resolveCurrentVerboseLevel(params) ?? fallbackVerbose);
};
}
export const createShouldEmitToolResult = (params: VerboseGateParams): (() => boolean) => {
return createVerboseGate(params, (level) => level !== "off");
};
export const createShouldEmitToolOutput = (params: VerboseGateParams): (() => boolean) => {
return createVerboseGate(params, (level) => level === "full");
};
export const finalizeWithFollowup = <T>(