feat: finish master-agent prompt and memory runtime

This commit is contained in:
kris
2026-04-01 04:56:07 +08:00
parent d316f0490e
commit ba01ae5393
19 changed files with 461 additions and 70 deletions

View File

@@ -27,7 +27,7 @@ export async function GET(
return NextResponse.json({ ok: false, message: "UNAUTHORIZED" }, { status: 401 });
}
const controls = await getProjectAgentControls(projectId);
const controls = await getProjectAgentControls(projectId, session.account);
return NextResponse.json({ ok: true, controls });
}
@@ -44,10 +44,6 @@ export async function POST(
if (projectId !== "master-agent") {
return NextResponse.json({ ok: false, message: "PROJECT_NOT_FOUND" }, { status: 404 });
}
if (session.role !== "highest_admin") {
return NextResponse.json({ ok: false, message: "FORBIDDEN" }, { status: 403 });
}
const rawBody = await request.text().catch(() => "");
let body: unknown;
try {
@@ -103,6 +99,7 @@ export async function POST(
...(hasReasoningEffortOverride ? { reasoningEffortOverride: payload.reasoningEffortOverride } : {}),
...(hasPromptOverride ? { promptOverride: payload.promptOverride } : {}),
},
session.account,
);
return NextResponse.json({ ok: true, controls: controls ?? null });
} catch (error) {

View File

@@ -39,7 +39,9 @@ export async function GET(
const [globalMemories, projectMemories] = await Promise.all([
listUserMasterMemories(session.account, { scope: "global" }),
listUserMasterMemories(session.account, { scope: "project", projectId }),
projectId === "master-agent"
? listUserMasterMemories(session.account, { scope: "project" })
: listUserMasterMemories(session.account, { scope: "project", projectId }),
]);
return NextResponse.json({

View File

@@ -28,7 +28,7 @@ export async function GET(
const [promptPolicy, userPrompt, projectControls] = await Promise.all([
getMasterAgentPromptPolicy(),
getUserMasterPrompt(session.account),
getProjectAgentControls(projectId),
getProjectAgentControls(projectId, session.account),
]);
return NextResponse.json({
@@ -99,13 +99,13 @@ export async function POST(
if (hasPromptOverride) {
await updateProjectAgentControls(projectId, {
promptOverride: payload.promptOverride,
});
}, session.account);
}
const [promptPolicy, userPrompt, projectControls] = await Promise.all([
getMasterAgentPromptPolicy(),
getUserMasterPrompt(session.account),
getProjectAgentControls(projectId),
getProjectAgentControls(projectId, session.account),
]);
return NextResponse.json({

View File

@@ -13,7 +13,7 @@ export async function GET(
}
const { projectId } = await context.params;
const state = await readState();
const detail = getProjectDetailView(state, projectId);
const detail = getProjectDetailView(state, projectId, session.account);
if (!detail) {
return NextResponse.json({ ok: false, message: "PROJECT_NOT_FOUND" }, { status: 404 });

View File

@@ -22,10 +22,10 @@ export default async function ProjectChatPage({
}: {
params: Promise<{ projectId: string }>;
}) {
await requirePageSession();
const session = await requirePageSession();
const { projectId } = await params;
const state = await readState();
const detail = getProjectDetailView(state, projectId);
const detail = getProjectDetailView(state, projectId, session.account);
const pendingDispatchPlan = detail?.project.isGroup
? latestPendingDispatchPlan(await listDispatchPlansByProject(projectId))
: null;

View File

@@ -16,13 +16,9 @@ export default async function MasterAgentPromptMemoryPage() {
await Promise.all([
getMasterAgentPromptPolicy(),
getUserMasterPrompt(session.account),
getProjectAgentControls("master-agent"),
getProjectAgentControls("master-agent", session.account),
listUserMasterMemories(session.account, { includeArchived: false, scope: "global" }),
listUserMasterMemories(session.account, {
includeArchived: false,
scope: "project",
projectId: "master-agent",
}),
listUserMasterMemories(session.account, { includeArchived: false, scope: "project" }),
]);
return (
@@ -35,8 +31,8 @@ export default async function MasterAgentPromptMemoryPage() {
<span className="font-semibold text-[#111111]">{session.account}</span>
<br />
{session.role === "highest_admin"
? "你是管理员,可以编辑全局主提示词当前对话附加提示词。"
: "你可以编辑自己的提示词记忆;管理员全局主提示词只读。"}
? "你是管理员,可以编辑全局主提示词当前对话设置和记忆按当前账号隔离。"
: "你可以编辑自己的提示词、当前对话设置和记忆;管理员全局主提示词只读。"}
</div>
</div>
<MasterAgentPromptMemoryClient