feat: create dispatch plans from group messages

This commit is contained in:
kris
2026-03-30 01:49:07 +08:00
parent 74ea7151ad
commit 11724e9834
4 changed files with 277 additions and 10 deletions

View File

@@ -1,7 +1,10 @@
import { NextRequest, NextResponse } from "next/server";
import { requireRequestSession } from "@/lib/boss-auth";
import { appendProjectMessage, readState } from "@/lib/boss-data";
import { replyToMasterAgentUserMessage } from "@/lib/boss-master-agent";
import {
queueGroupDispatchPlan,
replyToMasterAgentUserMessage,
} from "@/lib/boss-master-agent";
export async function POST(
request: NextRequest,
@@ -24,10 +27,28 @@ export async function POST(
body: body.body,
kind: body.kind ?? "text",
});
let dispatchPlan = null;
let masterReply:
| { ok: boolean; reason?: string; message?: string; accountId?: string; requestId?: string }
| undefined;
const state = await readState();
const project = state.projects.find((item) => item.id === projectId);
const shouldCreateDispatchPlan =
project?.isGroup &&
project.id !== "master-agent" &&
(body.kind ?? "text") === "text" &&
message.body.trim().length > 0;
if (shouldCreateDispatchPlan) {
dispatchPlan = await queueGroupDispatchPlan({
groupProjectId: projectId,
requestMessageId: message.id,
requestText: message.body,
requestedBy: session.account,
});
}
if (projectId === "master-agent" && (body.kind ?? "text") === "text" && message.body.trim()) {
masterReply = await replyToMasterAgentUserMessage({
requestMessageId: message.id,
@@ -38,15 +59,15 @@ export async function POST(
});
}
const state = await readState();
const project = state.projects.find((item) => item.id === projectId);
const collaborationGate = project
const nextState = shouldCreateDispatchPlan ? await readState() : state;
const nextProject = nextState.projects.find((item) => item.id === projectId);
const collaborationGate = nextProject
? {
isGroup: project.isGroup,
collaborationMode: project.collaborationMode,
isGroup: nextProject.isGroup,
collaborationMode: nextProject.collaborationMode,
requiresMasterAgentApproval:
project.isGroup && project.collaborationMode === "approval_required",
approvalState: project.approvalState,
nextProject.isGroup && nextProject.collaborationMode === "approval_required",
approvalState: nextProject.approvalState,
}
: {
isGroup: false,
@@ -55,7 +76,7 @@ export async function POST(
approvalState: "not_required" as const,
};
return NextResponse.json({ ok: true, message, masterReply, collaborationGate });
return NextResponse.json({ ok: true, message, masterReply, dispatchPlan, collaborationGate });
} catch (error) {
return NextResponse.json(
{ ok: false, message: error instanceof Error ? error.message : "UNKNOWN_ERROR" },