feat: add group repair and dispatch rejection flows

This commit is contained in:
kris
2026-03-31 03:56:28 +08:00
parent 9c02ebb574
commit 4336dc22a7
21 changed files with 832 additions and 83 deletions

View File

@@ -11,6 +11,7 @@ let confirmDispatchPlanRoute: (typeof import("../src/app/api/v1/projects/[projec
let completeMasterTaskRoute: (typeof import("../src/app/api/v1/master-agent/tasks/[taskId]/complete/route"))["POST"];
let createAuthSession: (typeof import("../src/lib/boss-data"))["createAuthSession"];
let createProjectGroupChat: (typeof import("../src/lib/boss-data"))["createProjectGroupChat"];
let isDispatchableThreadProject: (typeof import("../src/lib/boss-data"))["isDispatchableThreadProject"];
let readState: (typeof import("../src/lib/boss-data"))["readState"];
let writeState: (typeof import("../src/lib/boss-data"))["writeState"];
let AUTH_SESSION_COOKIE = "";
@@ -37,6 +38,7 @@ async function setup() {
completeMasterTaskRoute = completeModule.POST;
createAuthSession = data.createAuthSession;
createProjectGroupChat = data.createProjectGroupChat;
isDispatchableThreadProject = data.isDispatchableThreadProject;
readState = data.readState;
writeState = data.writeState;
AUTH_SESSION_COOKIE = auth.AUTH_SESSION_COOKIE;
@@ -68,7 +70,7 @@ async function createAuthedRequest(url: string, method: "POST", body: unknown) {
async function ensureTwoSingleThreadProjects() {
const state = await readState();
const singles = state.projects.filter((project) => project.id !== "master-agent" && !project.isGroup);
const singles = state.projects.filter((project) => isDispatchableThreadProject(project));
if (singles.length >= 2) {
return singles;
}
@@ -79,7 +81,7 @@ async function ensureTwoSingleThreadProjects() {
...seed,
id: "boss-console-clone",
name: "Boss 移动控制台副线程",
deviceIds: ["win-gpu-01"],
deviceIds: [...seed.deviceIds],
updatedAt: "2026-03-30T10:00:00+08:00",
lastMessageAt: "2026-03-30T10:00:00+08:00",
preview: "副线程等待主 Agent 汇总阻塞点。",
@@ -114,7 +116,7 @@ async function ensureTwoSingleThreadProjects() {
});
const nextState = await readState();
return nextState.projects.filter((project) => project.id !== "master-agent" && !project.isGroup);
return nextState.projects.filter((project) => isDispatchableThreadProject(project));
}
async function createConfirmedDispatchExecution() {