refactor(auto-reply): share directive level resolution

This commit is contained in:
Peter Steinberger
2026-02-16 01:45:51 +00:00
parent 273d70741f
commit 22c1210a16
3 changed files with 60 additions and 27 deletions

View File

@@ -1,7 +1,7 @@
import type { ReplyPayload } from "../types.js";
import type { ApplyInlineDirectivesFastLaneParams } from "./directive-handling.params.js";
import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "./directives.js";
import { handleDirectiveOnly } from "./directive-handling.impl.js";
import { resolveCurrentDirectiveLevels } from "./directive-handling.levels.js";
import { isDirectiveOnly } from "./directive-handling.parse.js";
export async function applyInlineDirectivesFastLane(
@@ -48,19 +48,12 @@ export async function applyInlineDirectivesFastLane(
}
const agentCfg = params.agentCfg;
const resolvedDefaultThinkLevel =
(sessionEntry?.thinkingLevel as ThinkLevel | undefined) ??
(agentCfg?.thinkingDefault as ThinkLevel | undefined) ??
(await modelState.resolveDefaultThinkingLevel());
const currentThinkLevel = resolvedDefaultThinkLevel;
const currentVerboseLevel =
(sessionEntry?.verboseLevel as VerboseLevel | undefined) ??
(agentCfg?.verboseDefault as VerboseLevel | undefined);
const currentReasoningLevel =
(sessionEntry?.reasoningLevel as ReasoningLevel | undefined) ?? "off";
const currentElevatedLevel =
(sessionEntry?.elevatedLevel as ElevatedLevel | undefined) ??
(agentCfg?.elevatedDefault as ElevatedLevel | undefined);
const { currentThinkLevel, currentVerboseLevel, currentReasoningLevel, currentElevatedLevel } =
await resolveCurrentDirectiveLevels({
sessionEntry,
agentCfg,
resolveDefaultThinkingLevel: () => modelState.resolveDefaultThinkingLevel(),
});
const directiveAck = await handleDirectiveOnly({
cfg,

View File

@@ -0,0 +1,41 @@
import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "../thinking.js";
export async function resolveCurrentDirectiveLevels(params: {
sessionEntry?: {
thinkingLevel?: unknown;
verboseLevel?: unknown;
reasoningLevel?: unknown;
elevatedLevel?: unknown;
};
agentCfg?: {
thinkingDefault?: unknown;
verboseDefault?: unknown;
elevatedDefault?: unknown;
};
resolveDefaultThinkingLevel: () => Promise<ThinkLevel | undefined>;
}): Promise<{
currentThinkLevel: ThinkLevel | undefined;
currentVerboseLevel: VerboseLevel | undefined;
currentReasoningLevel: ReasoningLevel;
currentElevatedLevel: ElevatedLevel | undefined;
}> {
const resolvedDefaultThinkLevel =
(params.sessionEntry?.thinkingLevel as ThinkLevel | undefined) ??
(params.agentCfg?.thinkingDefault as ThinkLevel | undefined) ??
(await params.resolveDefaultThinkingLevel());
const currentThinkLevel = resolvedDefaultThinkLevel;
const currentVerboseLevel =
(params.sessionEntry?.verboseLevel as VerboseLevel | undefined) ??
(params.agentCfg?.verboseDefault as VerboseLevel | undefined);
const currentReasoningLevel =
(params.sessionEntry?.reasoningLevel as ReasoningLevel | undefined) ?? "off";
const currentElevatedLevel =
(params.sessionEntry?.elevatedLevel as ElevatedLevel | undefined) ??
(params.agentCfg?.elevatedDefault as ElevatedLevel | undefined);
return {
currentThinkLevel,
currentVerboseLevel,
currentReasoningLevel,
currentElevatedLevel,
};
}

View File

@@ -1,7 +1,7 @@
import type { OpenClawConfig } from "../../config/config.js";
import type { SessionEntry } from "../../config/sessions.js";
import type { MsgContext } from "../templating.js";
import type { ElevatedLevel, ReasoningLevel, ThinkLevel, VerboseLevel } from "../thinking.js";
import type { ElevatedLevel } from "../thinking.js";
import type { ReplyPayload } from "../types.js";
import type { createModelSelectionState } from "./model-selection.js";
import type { TypingController } from "./typing.js";
@@ -13,6 +13,7 @@ import {
isDirectiveOnly,
persistInlineDirectives,
} from "./directive-handling.js";
import { resolveCurrentDirectiveLevels } from "./directive-handling.levels.js";
import { clearInlineDirectives } from "./get-reply-directives-utils.js";
type AgentDefaults = NonNullable<OpenClawConfig["agents"]>["defaults"];
@@ -122,19 +123,17 @@ export async function applyInlineDirectiveOverrides(params: {
typing.cleanup();
return { kind: "reply", reply: undefined };
}
const resolvedDefaultThinkLevel =
(sessionEntry?.thinkingLevel as ThinkLevel | undefined) ??
(agentCfg?.thinkingDefault as ThinkLevel | undefined) ??
(await modelState.resolveDefaultThinkingLevel());
const {
currentThinkLevel: resolvedDefaultThinkLevel,
currentVerboseLevel,
currentReasoningLevel,
currentElevatedLevel,
} = await resolveCurrentDirectiveLevels({
sessionEntry,
agentCfg,
resolveDefaultThinkingLevel: () => modelState.resolveDefaultThinkingLevel(),
});
const currentThinkLevel = resolvedDefaultThinkLevel;
const currentVerboseLevel =
(sessionEntry?.verboseLevel as VerboseLevel | undefined) ??
(agentCfg?.verboseDefault as VerboseLevel | undefined);
const currentReasoningLevel =
(sessionEntry?.reasoningLevel as ReasoningLevel | undefined) ?? "off";
const currentElevatedLevel =
(sessionEntry?.elevatedLevel as ElevatedLevel | undefined) ??
(agentCfg?.elevatedDefault as ElevatedLevel | undefined);
const directiveReply = await handleDirectiveOnly({
cfg,
directives,