需求:以设计项目组织固定设计 Agent 对话、方向确认和图片视频任务。 实现:新增 Works Square 云端适配与开发态本地适配,统一 Host API、Quote 确认、任务轮询及私有媒体 Range 代理。
121 lines
3.0 KiB
TypeScript
121 lines
3.0 KiB
TypeScript
export const IMAGE_WORKSPACE_UNAVAILABLE_CODE = 'IMAGE_WORKSPACE_UNAVAILABLE';
|
|
export const IMAGE_WORKSPACE_UNAVAILABLE_MESSAGE = 'AI 设计暂不可用';
|
|
export const IMAGE_WORKSPACE_API_PATH = '/api/works/image-workspace';
|
|
|
|
export type DesignMedium = 'image' | 'video';
|
|
export type DesignWorkspacePhase = 'shaping' | 'awaiting_confirmation' | 'blocked';
|
|
export type DesignTaskStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled';
|
|
export type DesignQuoteStatus = 'active' | 'consumed' | 'expired' | 'superseded';
|
|
|
|
export type DesignCapabilities = {
|
|
conversation: boolean;
|
|
generation: boolean;
|
|
image: boolean;
|
|
video: boolean;
|
|
};
|
|
|
|
export type DesignBrief = {
|
|
version: number;
|
|
status: 'draft' | 'ready' | 'confirmed';
|
|
medium: DesignMedium | null;
|
|
summary: string;
|
|
ready: boolean;
|
|
missingDecision: string | null;
|
|
};
|
|
|
|
export type DesignGenerationQuote = {
|
|
quoteId: string;
|
|
status: DesignQuoteStatus;
|
|
medium: DesignMedium;
|
|
briefVersion: number;
|
|
briefSummary: string;
|
|
quotedDesignPoints: number;
|
|
expiresAt: string;
|
|
};
|
|
|
|
export type DesignMessage = {
|
|
id: string;
|
|
role: 'user' | 'assistant';
|
|
kind: 'user' | 'reply' | 'choice' | 'confirmation' | 'safety_redirect' | 'failure';
|
|
text: string;
|
|
quickReplies: string[];
|
|
generationQuote: DesignGenerationQuote | null;
|
|
turnRevision: number;
|
|
createdAt: string;
|
|
};
|
|
|
|
export type DesignWorkspaceSummary = {
|
|
workspaceId: string;
|
|
title: string;
|
|
turnRevision: number;
|
|
viewRevision: number;
|
|
phase: DesignWorkspacePhase;
|
|
brief: DesignBrief;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type DesignWorkspace = DesignWorkspaceSummary & {
|
|
messages: DesignMessage[];
|
|
};
|
|
|
|
export type DesignAsset = {
|
|
assetId: string;
|
|
workspaceId: string;
|
|
mediaType: DesignMedium;
|
|
mimeType: string;
|
|
width: number;
|
|
height: number;
|
|
durationMilliseconds: number | null;
|
|
createdAt: string;
|
|
contentPath: string;
|
|
};
|
|
|
|
export type DesignGenerationTask = {
|
|
taskId: string;
|
|
workspaceId: string;
|
|
medium: DesignMedium;
|
|
status: DesignTaskStatus;
|
|
briefVersion: number;
|
|
briefSummary: string;
|
|
quoteId: string | null;
|
|
quotedDesignPoints: number | null;
|
|
failureCode: string | null;
|
|
resultAssets: DesignAsset[];
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type DesignWorkspaceBootstrap = {
|
|
capabilities: DesignCapabilities;
|
|
workspaces: DesignWorkspaceSummary[];
|
|
};
|
|
|
|
export type DesignCreateWorkspaceInput = {
|
|
clientWorkspaceId: string;
|
|
title: string;
|
|
};
|
|
|
|
export type DesignRenameWorkspaceInput = {
|
|
workspaceId: string;
|
|
title: string;
|
|
};
|
|
|
|
export type DesignSubmitMessageInput = {
|
|
workspaceId: string;
|
|
clientTurnId: string;
|
|
expectedTurnRevision: number;
|
|
message: string;
|
|
attachmentAssetIds?: string[];
|
|
};
|
|
|
|
export type DesignConfirmGenerationInput = {
|
|
workspaceId: string;
|
|
clientTurnId: string;
|
|
expectedTurnRevision: number;
|
|
quoteId: string;
|
|
};
|
|
|
|
export function designAssetContentPath(workspaceId: string, assetId: string): string {
|
|
return `${IMAGE_WORKSPACE_API_PATH}/workspaces/${encodeURIComponent(workspaceId)}/assets/${encodeURIComponent(assetId)}/content`;
|
|
}
|