fix(consult): BUG-945~949 领域截断、思考分片、Pass 4 按模式分流

schema 上限与执行上限解耦;校正思考改分片门;日期观察不删字,保证句与无分钟个人盘退回重写。
This commit is contained in:
jesse-ux
2026-09-18 13:17:35 +08:00
parent b4fcb9466f
commit e32ce6247e
22 changed files with 617 additions and 205 deletions
+5 -30
View File
@@ -39,7 +39,6 @@ import { createAdminSupabaseClient } from "@/lib/supabase/admin";
import { createServerSupabaseClient } from "@/lib/supabase/server";
import { streamTextResponse } from "@/lib/stream-text-response";
import { streamAgentResponse } from "@/lib/stream-agent-response";
import { detectMethodologyBookkeeping } from "@/lib/timing-output-guard";
import type { AgentExecutionReceipt, WorkflowReceipt } from "@/lib/consultation-agent-events";
import { consultationComposePrompt, consultationContinuePrompt, natalConsultationThinkingPlan, type PublicThinkingSection } from "@/lib/consultation-thinking-plan";
import {
@@ -62,7 +61,6 @@ import {
applyBirthTimeModeToWorkflowContext,
ACCEPTED_RANGE_READING_INSTRUCTION,
consultationBirthTimeModeSchema,
createBirthTimeModeOutputGuard,
shouldRunBirthChartWorkflow,
shouldRunDeclaredWindowWorkflow,
type ConsultationBirthTimeMode,
@@ -1004,10 +1002,7 @@ export async function POST(request: Request) {
retryForAnswer,
continueAfterLength,
continueAfterDisconnect: true,
transformText: createBirthTimeModeOutputGuard(
generalDailyContext ? "general_no_birth_time" : consultationMode,
false,
),
pass4Mode: generalDailyContext ? "general_no_birth_time" : consultationMode,
toolStatus: () => "ready",
receipt: executionReceipt,
headers: { "x-jyotish-birth-time-mode": consultationMode },
@@ -1107,7 +1102,7 @@ export async function POST(request: Request) {
retryForAnswer,
continueAfterLength,
continueAfterDisconnect: true,
transformText: createBirthTimeModeOutputGuard(consultationMode, false),
pass4Mode: consultationMode,
toolStatus: () => workflowStatus(state.workflowReceipt?.status),
receipt: executionReceipt,
headers: { "x-jyotish-birth-time-mode": consultationMode },
@@ -1188,10 +1183,10 @@ export async function POST(request: Request) {
const interpretFindings = async () => (
(state.thinkingPlan ?? []).map((section) => ({ id: section.id }))
);
const composeAnswer = async () => {
const composeAnswer = async (_: readonly { id: string; text?: string }[] = [], retryHint?: string) => {
const composed = await agent.stream([
...baseMessages,
{ role: "user" as const, content: consultationComposePrompt() },
{ role: "user" as const, content: `${consultationComposePrompt()}${retryHint ? `\n${retryHint}` : ""}` },
], {
...streamOptions,
maxSteps: AGENT_SLICE_MAX_STEPS,
@@ -1230,16 +1225,8 @@ export async function POST(request: Request) {
continueAfterLength,
interpretFindings,
composeAnswer,
pass4Violations: (text) => detectMethodologyBookkeeping(text).map((item) => item.kind),
pass4Mode: consultationMode,
continueAfterDisconnect: true,
transformText: (text) => createBirthTimeModeOutputGuard(
consultationMode,
state.workflowReceipt?.preciseTiming === "allowed",
{
currentTheme: consultationTheme,
minuteSensitiveThemes: state.workflowReceipt?.minuteSensitiveThemes,
},
)(text),
toolStatus: () => workflowStatus(state.workflowReceipt?.status),
receipt: executionReceipt,
headers: { "x-jyotish-birth-time-mode": consultationMode },
@@ -1313,10 +1300,6 @@ export async function POST(request: Request) {
: cancel,
);
return streamTextResponse(result.textStream, {
transformText: createBirthTimeModeOutputGuard(
generalDailyContext ? "general_no_birth_time" : consultationMode,
false,
),
mode: "mastra",
requestId,
continueAfterDisconnect: true,
@@ -1426,14 +1409,6 @@ export async function POST(request: Request) {
: cancel,
);
return streamTextResponse(result.textStream, {
transformText: createBirthTimeModeOutputGuard(
consultationMode,
workflowReceipt.preciseTiming !== "blocked",
{
currentTheme: consultationTheme,
minuteSensitiveThemes: workflowReceipt.minuteSensitiveThemes,
},
),
mode: "mastra",
requestId,
continueAfterDisconnect: true,