fix: consume canvas agent pending requests

This commit is contained in:
134 2026-06-23 22:55:55 +08:00
parent d5ac630d01
commit cd0037dc47
2 changed files with 47 additions and 6 deletions

View File

@ -23,6 +23,16 @@ function normalizeNodeId(value: unknown) {
return String(value || "").trim();
}
function shouldConsumePendingRequest(params: {
pendingNodeId?: string;
detailNodeId?: string;
hasDetail: boolean;
}) {
const pendingNodeId = normalizeNodeId(params.pendingNodeId);
const detailNodeId = normalizeNodeId(params.detailNodeId);
return !params.hasDetail || !pendingNodeId || pendingNodeId === detailNodeId;
}
export function storeCanvasAgentSlotFillRequest(
targetWindow: CanvasAgentPendingRequestWindow,
request: PendingCanvasAgentSlotFillRequest
@ -42,9 +52,13 @@ export function consumeCanvasAgentSlotFillRequest(
) {
const pending = getPendingCanvasAgentSlotFillRequest(targetWindow);
if (!pending) return null;
const pendingNodeId = normalizeNodeId(pending.nodeId);
const detailNodeId = normalizeNodeId(detail?.nodeId);
if (!pendingNodeId || pendingNodeId === detailNodeId) {
if (
shouldConsumePendingRequest({
pendingNodeId: pending.nodeId,
detailNodeId: detail?.nodeId,
hasDetail: Boolean(detail),
})
) {
delete targetWindow.__canvasAgentPendingSlotFillRequest;
}
return pending;
@ -69,9 +83,13 @@ export function consumeCanvasAgentAnnotationEditRequest(
) {
const pending = getPendingCanvasAgentAnnotationEditRequest(targetWindow);
if (!pending) return null;
const pendingNodeId = normalizeNodeId(pending.nodeId);
const detailNodeId = normalizeNodeId(detail?.nodeId);
if (!pendingNodeId || pendingNodeId === detailNodeId) {
if (
shouldConsumePendingRequest({
pendingNodeId: pending.nodeId,
detailNodeId: detail?.nodeId,
hasDetail: Boolean(detail),
})
) {
delete targetWindow.__canvasAgentPendingAnnotationEditRequest;
}
return pending;

View File

@ -3706,6 +3706,29 @@ test.describe("canvas chat pure helpers", () => {
expect(getPendingCanvasAgentAnnotationEditRequest(targetWindow)).toBeNull();
});
test("consumes pending canvas agent UI requests when no event detail is provided", () => {
const targetWindow = {} as CanvasAgentPendingRequestWindow;
const slotRequest = {
nodeId: "slot-1",
label: "主图槽",
};
const annotationRequest = {
nodeId: "image-annotated",
title: "白底主图",
annotationCount: 2,
};
storeCanvasAgentSlotFillRequest(targetWindow, slotRequest);
storeCanvasAgentAnnotationEditRequest(targetWindow, annotationRequest);
expect(consumeCanvasAgentSlotFillRequest(targetWindow)).toEqual(slotRequest);
expect(consumeCanvasAgentAnnotationEditRequest(targetWindow)).toEqual(
annotationRequest
);
expect(getPendingCanvasAgentSlotFillRequest(targetWindow)).toBeNull();
expect(getPendingCanvasAgentAnnotationEditRequest(targetWindow)).toBeNull();
});
test("keeps pending annotation edit targets eligible for the next canvas context", () => {
const nodes = [
{