1
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-04-20 09:54:17 +08:00
parent 67c584b4df
commit 50759f3c1e
159 changed files with 16938 additions and 16925 deletions

View File

@@ -7,6 +7,7 @@ import type {
CustomWorldProfileRecord,
} from '../../../packages/shared/src/contracts/runtime.js';
import type { RuntimeRepositoryPort } from '../repositories/runtimeRepository.js';
import { resolveCustomWorldCoverPresentation } from '../repositories/customWorldLibraryMetadata.js';
import { normalizeFoundationDraftProfile } from './customWorldAgentDraftCompiler.js';
import {
buildDraftSummaryFromIntent,
@@ -140,12 +141,19 @@ function resolveDraftRoleAssetProgress(session: CustomWorldAgentSessionRecord) {
};
}
function resolvePublishedCover(profile: Record<string, unknown>) {
const camp = toRecord(profile.camp);
const playableNpcs = toRecordArray(profile.playableNpcs);
const leadNpc = toRecord(playableNpcs[0]);
function resolveDraftCover(session: CustomWorldAgentSessionRecord) {
const draftProfile = toRecord(session.draftProfile);
if (!draftProfile) {
return {
imageSrc: null,
renderMode: 'image' as const,
characterImageSrcs: [],
};
}
return toText(camp?.imageSrc) || toText(leadNpc?.imageSrc) || null;
return resolveCustomWorldCoverPresentation(
draftProfile as CustomWorldProfileRecord,
);
}
function isLibraryEntry(
@@ -175,6 +183,7 @@ export async function listCustomWorldWorkSummaries(
const draftItems: CustomWorldWorkSummary[] = sessions.map((session) => {
const counts = resolveDraftCounts(session);
const roleAssetProgress = resolveDraftRoleAssetProgress(session);
const coverPresentation = resolveDraftCover(session);
return {
workId: `draft:${session.sessionId}`,
@@ -185,7 +194,9 @@ export async function listCustomWorldWorkSummaries(
normalizeFoundationDraftProfile(session.draftProfile)?.subtitle ||
formatDraftStageLabel(session.stage),
summary: resolveDraftSummary(session),
coverImageSrc: null,
coverImageSrc: coverPresentation.imageSrc,
coverRenderMode: coverPresentation.renderMode,
coverCharacterImageSrcs: coverPresentation.characterImageSrcs,
updatedAt: session.updatedAt,
publishedAt: null,
stage: session.stage,
@@ -213,6 +224,7 @@ export async function listCustomWorldWorkSummaries(
(libraryEntry ? toText(libraryEntry.updatedAt) : '') ||
toText(profileRecord.updatedAt) ||
new Date().toISOString();
const coverPresentation = resolveCustomWorldCoverPresentation(profileRecord);
const roleVisualReadyCount = playableNpcs.filter(
(entry) =>
Boolean(toText(entry.imageSrc)) &&
@@ -240,7 +252,9 @@ export async function listCustomWorldWorkSummaries(
'这个世界已经可以直接进入体验。',
coverImageSrc:
(libraryEntry ? libraryEntry.coverImageSrc : null) ||
resolvePublishedCover(profileRecord),
coverPresentation.imageSrc,
coverRenderMode: coverPresentation.renderMode,
coverCharacterImageSrcs: coverPresentation.characterImageSrcs,
updatedAt,
publishedAt:
(libraryEntry ? toText(libraryEntry.publishedAt) : '') ||