feat: 完善图像工作区与创作工具体验
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

This commit is contained in:
inman
2026-08-16 14:08:02 +08:00
parent bfcb88cfef
commit 26b52d76e3
92 changed files with 16678 additions and 2975 deletions

View File

@@ -13,6 +13,9 @@ import {
type DesignAsset,
type DesignAssetSaveResult,
type DesignConversation,
type DesignDeleteWorkspaceResult,
type DesignGenerationParameters,
type DesignGenerationQuote,
type DesignGenerationTask,
type DesignWorkspace,
type DesignWorkspaceBootstrap,
@@ -122,6 +125,15 @@ export function renameImageWorkspaceProject(
);
}
export function deleteImageWorkspaceProject(
workspaceId: string,
): Promise<DesignDeleteWorkspaceResult> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}`,
{ method: 'DELETE' },
);
}
export function fetchImageWorkspaceProject(workspaceId: string): Promise<DesignWorkspace> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}`,
@@ -182,6 +194,8 @@ export function confirmImageWorkspaceGeneration(
expectedTurnRevision: number,
quoteId: string,
clientTurnId = createImageWorkspaceTurnId(),
finalPrompt?: string,
generationParameters?: DesignGenerationParameters,
): Promise<DesignConversation> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/conversations/${encodeURIComponent(conversationId)}/quotes/${encodeURIComponent(quoteId)}/confirm`,
@@ -190,6 +204,29 @@ export function confirmImageWorkspaceGeneration(
body: JSON.stringify({
clientTurnId,
expectedTurnRevision,
...(finalPrompt === undefined ? {} : { finalPrompt }),
...(generationParameters === undefined ? {} : { generationParameters }),
}),
},
);
}
export function updateImageWorkspaceGenerationQuote(
workspaceId: string,
quoteId: string,
finalPrompt: string,
generationParameters: DesignGenerationParameters,
): Promise<DesignGenerationQuote> {
return requestData(
`${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/generation-quotes/${encodeURIComponent(quoteId)}`,
{
method: 'PATCH',
body: JSON.stringify({
finalPrompt,
model: generationParameters.model,
resolution: generationParameters.resolution,
aspectRatio: generationParameters.aspectRatio,
durationSeconds: generationParameters.durationSeconds,
}),
},
);
@@ -219,12 +256,15 @@ export async function resolveImageWorkspaceAssetUrl(contentPath: string): Promis
return `${getHostApiBase()}${contentPath}${separator}token=${encodeURIComponent(token)}`;
}
const IMAGE_FILE_EXTENSIONS: Record<string, string> = {
const ASSET_FILE_EXTENSIONS: Record<string, string> = {
'image/gif': 'gif',
'image/jpeg': 'jpg',
'image/png': 'png',
'image/svg+xml': 'svg',
'image/webp': 'webp',
'video/mp4': 'mp4',
'video/quicktime': 'mov',
'video/webm': 'webm',
};
function assetDownloadFileName(asset: DesignAsset): string {
@@ -232,7 +272,8 @@ function assetDownloadFileName(asset: DesignAsset): string {
.replace(/[^a-zA-Z0-9_-]+/g, '-')
.replace(/^-+|-+$/g, '')
.slice(0, 32) || 'image';
const extension = IMAGE_FILE_EXTENSIONS[asset.mimeType.toLowerCase()] ?? 'png';
const extension = ASSET_FILE_EXTENSIONS[asset.mimeType.toLowerCase()]
?? (asset.mediaType === 'video' ? 'mp4' : 'png');
return `Makelore-AI-Design-${safeAssetId}.${extension}`;
}