Merge a3894db3943e54bc26dfc24f241247df5c0b2133 into 598f1826d8b2bc969aace2c6459824737667218c

This commit is contained in:
caesargattuso 2026-03-20 23:15:54 -04:00 committed by GitHub
commit 8c451c5c2d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 51 additions and 3 deletions

View File

@ -33,4 +33,41 @@ describe("resolveCurrentDirectiveLevels", () => {
expect(result.currentThinkLevel).toBe("minimal");
expect(resolveDefaultThinkingLevel).not.toHaveBeenCalled();
});
// reasoningDefault tests
it("uses agent reasoningDefault when session reasoningLevel is absent", async () => {
const result = await resolveCurrentDirectiveLevels({
sessionEntry: {},
agentCfg: {
reasoningDefault: "on",
},
resolveDefaultThinkingLevel: vi.fn(),
});
expect(result.currentReasoningLevel).toBe("on");
});
it("session reasoningLevel overrides agent reasoningDefault", async () => {
const result = await resolveCurrentDirectiveLevels({
sessionEntry: {
reasoningLevel: "off",
},
agentCfg: {
reasoningDefault: "on",
},
resolveDefaultThinkingLevel: vi.fn(),
});
expect(result.currentReasoningLevel).toBe("off");
});
it("defaults reasoningLevel to off when neither session nor config is set", async () => {
const result = await resolveCurrentDirectiveLevels({
sessionEntry: {},
agentCfg: {},
resolveDefaultThinkingLevel: vi.fn(),
});
expect(result.currentReasoningLevel).toBe("off");
});
});

View File

@ -10,6 +10,7 @@ export async function resolveCurrentDirectiveLevels(params: {
};
agentCfg?: {
thinkingDefault?: unknown;
reasoningDefault?: unknown;
verboseDefault?: unknown;
elevatedDefault?: unknown;
};
@ -32,7 +33,9 @@ export async function resolveCurrentDirectiveLevels(params: {
(params.sessionEntry?.verboseLevel as VerboseLevel | undefined) ??
(params.agentCfg?.verboseDefault as VerboseLevel | undefined);
const currentReasoningLevel =
(params.sessionEntry?.reasoningLevel as ReasoningLevel | undefined) ?? "off";
(params.sessionEntry?.reasoningLevel as ReasoningLevel | undefined) ??
(params.agentCfg?.reasoningDefault as ReasoningLevel | undefined) ??
"off";
const currentElevatedLevel =
(params.sessionEntry?.elevatedLevel as ElevatedLevel | undefined) ??
(params.agentCfg?.elevatedDefault as ElevatedLevel | undefined);

View File

@ -360,6 +360,7 @@ export async function resolveReplyDirectives(params: {
let resolvedReasoningLevel: ReasoningLevel =
directives.reasoningLevel ??
(sessionEntry?.reasoningLevel as ReasoningLevel | undefined) ??
(agentCfg?.reasoningDefault as ReasoningLevel | undefined) ??
"off";
const resolvedElevatedLevel = elevatedAllowed
? (directives.elevatedLevel ??
@ -412,7 +413,8 @@ export async function resolveReplyDirectives(params: {
// be emitted as visible "Reasoning:" messages.
const reasoningExplicitlySet =
directives.reasoningLevel !== undefined ||
(sessionEntry?.reasoningLevel !== undefined && sessionEntry?.reasoningLevel !== null);
(sessionEntry?.reasoningLevel !== undefined && sessionEntry?.reasoningLevel !== null) ||
agentCfg?.reasoningDefault !== undefined;
const thinkingActive = resolvedThinkLevelWithDefault !== "off";
if (!reasoningExplicitlySet && resolvedReasoningLevel === "off" && !thinkingActive) {
resolvedReasoningLevel = await modelState.resolveDefaultReasoningLevel();

View File

@ -512,7 +512,8 @@ export function buildStatusMessage(args: StatusArgs): string {
const verboseLevel =
args.resolvedVerbose ?? args.sessionEntry?.verboseLevel ?? args.agent?.verboseDefault ?? "off";
const fastMode = args.resolvedFast ?? args.sessionEntry?.fastMode ?? false;
const reasoningLevel = args.resolvedReasoning ?? args.sessionEntry?.reasoningLevel ?? "off";
const reasoningLevel =
args.resolvedReasoning ?? args.sessionEntry?.reasoningLevel ?? args.agent?.reasoningDefault ?? "off";
const elevatedLevel =
args.resolvedElevated ??
args.sessionEntry?.elevatedLevel ??

View File

@ -187,6 +187,8 @@ export type AgentDefaultsConfig = {
memorySearch?: MemorySearchConfig;
/** Default thinking level when no /think directive is present. */
thinkingDefault?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive";
/** Default reasoning display level when no /reasoning directive is present. */
reasoningDefault?: "off" | "on" | "stream";
/** Default verbose level when no /verbose directive is present. */
verboseDefault?: "off" | "on" | "full";
/** Default elevated level when no /elevated directive is present. */

View File

@ -148,6 +148,9 @@ export const AgentDefaultsSchema = z
z.literal("adaptive"),
])
.optional(),
reasoningDefault: z
.union([z.literal("off"), z.literal("on"), z.literal("stream")])
.optional(),
verboseDefault: z.union([z.literal("off"), z.literal("on"), z.literal("full")]).optional(),
elevatedDefault: z
.union([z.literal("off"), z.literal("on"), z.literal("ask"), z.literal("full")])