合并 AI 设计多会话客户端
Some checks failed
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled

整合 Enter 发送与多会话交互,保留服务端持久 Conversation Session,并补齐迁移、回归、Electron E2E 与 canonical 文档。
This commit is contained in:
2026-08-11 16:18:52 +08:00
32 changed files with 2417 additions and 804 deletions

View File

@@ -12,6 +12,7 @@ import {
designAssetDownloadPath,
type DesignAsset,
type DesignAssetSaveResult,
type DesignConversation,
type DesignGenerationTask,
type DesignWorkspace,
type DesignWorkspaceBootstrap,
@@ -49,6 +50,10 @@ export function createImageWorkspaceTurnId(): string {
return createClientId('turn');
}
export function createImageWorkspaceConversationId(): string {
return createClientId('conversation');
}
function getErrorStatus(error: unknown): number {
if (error instanceof AppError && typeof error.details?.status === 'number') {
return error.details.status;
@@ -123,15 +128,42 @@ export function fetchImageWorkspaceProject(workspaceId: string): Promise<DesignW
);
}
export function createImageWorkspaceConversation(
workspaceId: string,
title = '新会话',
clientConversationId = createImageWorkspaceConversationId(),
): Promise<DesignConversation> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations`,
{
method: 'POST',
body: JSON.stringify({
clientConversationId,
title: title.trim(),
}),
},
);
}
export function fetchImageWorkspaceConversation(
workspaceId: string,
conversationId: string,
): Promise<DesignConversation> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}`,
);
}
export function sendImageWorkspaceMessage(
workspaceId: string,
conversationId: string,
expectedTurnRevision: number,
message: string,
clientTurnId = createImageWorkspaceTurnId(),
attachmentAssetIds: string[] = [],
): Promise<DesignWorkspace> {
): Promise<DesignConversation> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/messages`,
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}/messages`,
{
method: 'POST',
body: JSON.stringify({
@@ -146,12 +178,13 @@ export function sendImageWorkspaceMessage(
export function confirmImageWorkspaceGeneration(
workspaceId: string,
conversationId: string,
expectedTurnRevision: number,
quoteId: string,
clientTurnId = createImageWorkspaceTurnId(),
): Promise<DesignWorkspace> {
): Promise<DesignConversation> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/quotes/${encodeURIComponent(quoteId)}/confirm`,
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}/quotes/${encodeURIComponent(quoteId)}/confirm`,
{
method: 'POST',
body: JSON.stringify({
@@ -170,10 +203,13 @@ export function fetchImageWorkspaceTasks(
);
}
export async function openImageWorkspaceTaskEvents(workspaceId: string): Promise<EventSource> {
export async function openImageWorkspaceTaskEvents(
workspaceId: string,
conversationId: string,
): Promise<EventSource> {
await ensureHostApiToken();
return createHostEventSource(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/events`,
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}/events`,
);
}