feat: polish web master-agent controls and dispatch recovery
This commit is contained in:
@@ -13,7 +13,7 @@ import {
|
||||
} from "@/components/app-ui";
|
||||
import { requirePageSession } from "@/lib/boss-auth";
|
||||
import { listDispatchPlansByProject, readState } from "@/lib/boss-data";
|
||||
import { latestPendingDispatchPlan, latestRejectedDispatchPlan } from "@/lib/dispatch-plan-ui";
|
||||
import { resolveDispatchPlanComposerState } from "@/lib/dispatch-plan-ui";
|
||||
import { formatTimestampLabel, getProjectDetailView } from "@/lib/boss-projections";
|
||||
|
||||
export const dynamic = "force-dynamic";
|
||||
@@ -27,13 +27,9 @@ export default async function ProjectChatPage({
|
||||
const { projectId } = await params;
|
||||
const state = await readState();
|
||||
const detail = getProjectDetailView(state, projectId, session.account);
|
||||
const pendingDispatchPlan = detail?.project.isGroup
|
||||
? latestPendingDispatchPlan(await listDispatchPlansByProject(projectId))
|
||||
: null;
|
||||
const rejectedDispatchPlan =
|
||||
detail?.project.isGroup && !pendingDispatchPlan
|
||||
? latestRejectedDispatchPlan(await listDispatchPlansByProject(projectId))
|
||||
: null;
|
||||
const dispatchPlanState = detail?.project.isGroup
|
||||
? resolveDispatchPlanComposerState(await listDispatchPlansByProject(projectId))
|
||||
: resolveDispatchPlanComposerState([]);
|
||||
|
||||
if (!detail) notFound();
|
||||
|
||||
@@ -169,12 +165,13 @@ export default async function ProjectChatPage({
|
||||
</div>
|
||||
<ChatComposer
|
||||
projectId={detail.project.id}
|
||||
dispatchPlanRecoveryHint={dispatchPlanState.pendingDispatchPlan ? dispatchPlanState.recoveryHint : null}
|
||||
initialPendingDispatchPlan={
|
||||
pendingDispatchPlan
|
||||
dispatchPlanState.pendingDispatchPlan
|
||||
? {
|
||||
planId: pendingDispatchPlan.planId,
|
||||
summary: pendingDispatchPlan.summary,
|
||||
targets: (pendingDispatchPlan.targets ?? []).map((target) => ({
|
||||
planId: dispatchPlanState.pendingDispatchPlan.planId,
|
||||
summary: dispatchPlanState.pendingDispatchPlan.summary,
|
||||
targets: (dispatchPlanState.pendingDispatchPlan.targets ?? []).map((target) => ({
|
||||
projectId: target.projectId,
|
||||
threadDisplayName: target.threadDisplayName,
|
||||
})),
|
||||
@@ -182,11 +179,11 @@ export default async function ProjectChatPage({
|
||||
: null
|
||||
}
|
||||
initialRejectedDispatchPlan={
|
||||
rejectedDispatchPlan
|
||||
dispatchPlanState.rejectedDispatchPlan
|
||||
? {
|
||||
planId: rejectedDispatchPlan.planId,
|
||||
summary: rejectedDispatchPlan.summary,
|
||||
targets: (rejectedDispatchPlan.targets ?? []).map((target) => ({
|
||||
planId: dispatchPlanState.rejectedDispatchPlan.planId,
|
||||
summary: dispatchPlanState.rejectedDispatchPlan.summary,
|
||||
targets: (dispatchPlanState.rejectedDispatchPlan.targets ?? []).map((target) => ({
|
||||
projectId: target.projectId,
|
||||
threadDisplayName: target.threadDisplayName,
|
||||
})),
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { AppShell, PageNav, StatusBar } from "@/components/app-ui";
|
||||
import { MasterAgentPromptMemoryClient } from "@/components/master-agent-prompt-memory-client";
|
||||
import { requirePageSession } from "@/lib/boss-auth";
|
||||
import { MASTER_AGENT_CHAT_PAGE_ANCHORS } from "@/lib/master-agent-chat-menu";
|
||||
import {
|
||||
getMasterAgentPromptPolicy,
|
||||
getProjectAgentControls,
|
||||
@@ -43,6 +44,7 @@ export default async function MasterAgentPromptMemoryPage() {
|
||||
projectControls={projectControls}
|
||||
globalMemories={globalMemories}
|
||||
projectMemories={projectMemories}
|
||||
anchors={MASTER_AGENT_CHAT_PAGE_ANCHORS}
|
||||
/>
|
||||
</AppShell>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user