




























@@ -113,6 +113,28 @@ function parseInlineDirectivesForTest(body: string) {
113113};
114114}
115115116+function mockCallInput(mock: { mock: { calls: unknown[][] } }, index = 0): Record<string, unknown> {
117+const call = mock.mock.calls[index];
118+expect(call).toBeDefined();
119+const input = call?.[0];
120+expect(typeof input).toBe("object");
121+expect(input).not.toBeNull();
122+return input as Record<string, unknown>;
123+}
124+125+function expectContinueResult(
126+value: Awaited<ReturnType<typeof resolveReplyDirectives>>,
127+fields: Record<string, unknown>,
128+) {
129+expect(value.kind).toBe("continue");
130+if (value.kind !== "continue") {
131+throw new Error(`expected continue result, got ${value.kind}`);
132+}
133+for (const [key, expected] of Object.entries(fields)) {
134+expect(value.result[key as keyof typeof value.result]).toEqual(expected);
135+}
136+}
137+116138async function resolveHelloWithModelDefaults(params: {
117139defaultThinking: "off" | "low";
118140defaultReasoning: "on";
@@ -357,36 +379,20 @@ describe("resolveReplyDirectives", () => {
357379skillFilter: undefined,
358380});
359381360-expect(mocks.resolveFastModeState).toHaveBeenCalledWith(
361-expect.objectContaining({
362-sessionEntry: targetSessionEntry,
363-}),
364-);
365-expect(mocks.createModelSelectionState).toHaveBeenCalledWith(
366-expect.objectContaining({
367-sessionEntry: targetSessionEntry,
368-parentSessionKey: "target-parent",
369-}),
370-);
371-expect(mocks.applyInlineDirectiveOverrides).toHaveBeenCalledWith(
372-expect.objectContaining({
373-sessionEntry: targetSessionEntry,
374-}),
375-);
376-expect(mocks.resolveReplyExecOverrides).toHaveBeenCalledWith(
377-expect.objectContaining({
378-sessionEntry: targetSessionEntry,
379-}),
382+expect(mockCallInput(mocks.resolveFastModeState).sessionEntry).toBe(targetSessionEntry);
383+const modelSelectionInput = mockCallInput(mocks.createModelSelectionState);
384+expect(modelSelectionInput.sessionEntry).toBe(targetSessionEntry);
385+expect(modelSelectionInput.parentSessionKey).toBe("target-parent");
386+expect(mockCallInput(mocks.applyInlineDirectiveOverrides).sessionEntry).toBe(
387+targetSessionEntry,
380388);
381-expect(result).toEqual({
382-kind: "continue",
383-result: expect.objectContaining({
384-resolvedThinkLevel: "high",
385-resolvedFastMode: true,
386-resolvedVerboseLevel: "full",
387-resolvedReasoningLevel: "high",
388-resolvedElevatedLevel: "on",
389-}),
389+expect(mockCallInput(mocks.resolveReplyExecOverrides).sessionEntry).toBe(targetSessionEntry);
390+expectContinueResult(result, {
391+resolvedThinkLevel: "high",
392+resolvedFastMode: true,
393+resolvedVerboseLevel: "full",
394+resolvedReasoningLevel: "high",
395+resolvedElevatedLevel: "on",
390396});
391397});
392398@@ -454,12 +460,9 @@ describe("resolveReplyDirectives", () => {
454460defaultReasoning: "on",
455461});
456462457-expect(result).toEqual({
458-kind: "continue",
459-result: expect.objectContaining({
460-resolvedThinkLevel: "off",
461-resolvedReasoningLevel: "on",
462-}),
463+expectContinueResult(result, {
464+resolvedThinkLevel: "off",
465+resolvedReasoningLevel: "on",
463466});
464467expect(resolveDefaultReasoningLevel).toHaveBeenCalledOnce();
465468});
@@ -471,12 +474,9 @@ describe("resolveReplyDirectives", () => {
471474sessionEntry: makeSessionEntry({ thinkingLevel: "off" }),
472475});
473476474-expect(result).toEqual({
475-kind: "continue",
476-result: expect.objectContaining({
477-resolvedThinkLevel: "off",
478-resolvedReasoningLevel: "off",
479-}),
477+expectContinueResult(result, {
478+resolvedThinkLevel: "off",
479+resolvedReasoningLevel: "off",
480480});
481481expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
482482});
@@ -487,12 +487,9 @@ describe("resolveReplyDirectives", () => {
487487defaultReasoning: "on",
488488});
489489490-expect(result).toEqual({
491-kind: "continue",
492-result: expect.objectContaining({
493-resolvedThinkLevel: "low",
494-resolvedReasoningLevel: "off",
495-}),
490+expectContinueResult(result, {
491+resolvedThinkLevel: "low",
492+resolvedReasoningLevel: "off",
496493});
497494expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
498495});
@@ -504,12 +501,9 @@ describe("resolveReplyDirectives", () => {
504501agentCfg: { reasoningDefault: "off" },
505502});
506503507-expect(result).toEqual({
508-kind: "continue",
509-result: expect.objectContaining({
510-resolvedThinkLevel: "off",
511-resolvedReasoningLevel: "off",
512-}),
504+expectContinueResult(result, {
505+resolvedThinkLevel: "off",
506+resolvedReasoningLevel: "off",
513507});
514508expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
515509});
@@ -521,11 +515,8 @@ describe("resolveReplyDirectives", () => {
521515agentCfg: { reasoningDefault: "stream" },
522516});
523517524-expect(result).toEqual({
525-kind: "continue",
526-result: expect.objectContaining({
527-resolvedReasoningLevel: "off",
528-}),
518+expectContinueResult(result, {
519+resolvedReasoningLevel: "off",
529520});
530521expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
531522});
@@ -537,11 +528,8 @@ describe("resolveReplyDirectives", () => {
537528defaultReasoning: "on",
538529});
539530540-expect(result).toEqual({
541-kind: "continue",
542-result: expect.objectContaining({
543-resolvedReasoningLevel: "off",
544-}),
531+expectContinueResult(result, {
532+resolvedReasoningLevel: "off",
545533});
546534expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
547535});
@@ -553,11 +541,8 @@ describe("resolveReplyDirectives", () => {
553541sessionEntry: makeSessionEntry({ reasoningLevel: "stream" }),
554542});
555543556-expect(result).toEqual({
557-kind: "continue",
558-result: expect.objectContaining({
559-resolvedReasoningLevel: "off",
560-}),
544+expectContinueResult(result, {
545+resolvedReasoningLevel: "off",
561546});
562547expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
563548});
@@ -570,11 +555,8 @@ describe("resolveReplyDirectives", () => {
570555commandAuthorized: true,
571556});
572557573-expect(result).toEqual({
574-kind: "continue",
575-result: expect.objectContaining({
576-resolvedReasoningLevel: "stream",
577-}),
558+expectContinueResult(result, {
559+resolvedReasoningLevel: "stream",
578560});
579561expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
580562});
@@ -587,11 +569,8 @@ describe("resolveReplyDirectives", () => {
587569ctx: { GatewayClientScopes: ["operator.admin"] },
588570});
589571590-expect(result).toEqual({
591-kind: "continue",
592-result: expect.objectContaining({
593-resolvedReasoningLevel: "stream",
594-}),
572+expectContinueResult(result, {
573+resolvedReasoningLevel: "stream",
595574});
596575expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
597576});
@@ -604,11 +583,8 @@ describe("resolveReplyDirectives", () => {
604583commandAuthorized: true,
605584});
606585607-expect(result).toEqual({
608-kind: "continue",
609-result: expect.objectContaining({
610-resolvedReasoningLevel: "stream",
611-}),
586+expectContinueResult(result, {
587+resolvedReasoningLevel: "stream",
612588});
613589expect(resolveDefaultReasoningLevel).not.toHaveBeenCalled();
614590});
@@ -667,11 +643,8 @@ describe("resolveReplyDirectives", () => {
667643skillFilter: undefined,
668644});
669645670-expect(result).toEqual({
671-kind: "continue",
672-result: expect.objectContaining({
673-cleanedBody: "",
674-}),
646+expectContinueResult(result, {
647+cleanedBody: "",
675648});
676649expect(sessionCtx.Body).toBe("");
677650expect(sessionCtx.BodyForAgent).toBe("");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。