feat: 流式展示设计 Agent 对话

需求:设计 Agent 对话与确认生成的回复需要实时展示。

实现:统一通过 Agent Gateway 提交 Turn,接收并去重 assistant delta,以 canonical Workspace 收口,并修复跨项目旧请求回写竞态。
This commit is contained in:
2026-08-02 21:21:50 +08:00
parent 518d7ab4cd
commit 90a249db31
9 changed files with 819 additions and 93 deletions

View File

@@ -42,6 +42,10 @@ function createClientId(prefix: string): string {
return `${prefix}-${id}`;
}
export function createImageWorkspaceTurnId(): string {
return createClientId('turn');
}
function getErrorStatus(error: unknown): number {
if (error instanceof AppError && typeof error.details?.status === 'number') {
return error.details.status;
@@ -120,13 +124,14 @@ export function sendImageWorkspaceMessage(
workspaceId: string,
expectedTurnRevision: number,
message: string,
clientTurnId = createImageWorkspaceTurnId(),
): Promise<DesignWorkspace> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/messages`,
{
method: 'POST',
body: JSON.stringify({
clientTurnId: createClientId('turn'),
clientTurnId,
expectedTurnRevision,
message: message.trim(),
attachmentAssetIds: [],
@@ -139,13 +144,14 @@ export function confirmImageWorkspaceGeneration(
workspaceId: string,
expectedTurnRevision: number,
quoteId: string,
clientTurnId = createImageWorkspaceTurnId(),
): Promise<DesignWorkspace> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/quotes/${encodeURIComponent(quoteId)}/confirm`,
{
method: 'POST',
body: JSON.stringify({
clientTurnId: createClientId('turn'),
clientTurnId,
expectedTurnRevision,
}),
},