合并 AI 设计多会话客户端
整合 Enter 发送与多会话交互,保留服务端持久 Conversation Session,并补齐迁移、回归、Electron E2E 与 canonical 文档。
This commit is contained in:
@@ -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`,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user