Merge origin/master into codex/rpg-creation-cg-fix

This commit is contained in:
kdletters
2026-05-22 03:22:12 +08:00
142 changed files with 11156 additions and 4071 deletions

View File

@@ -1595,10 +1595,23 @@ function parseDraftGenerationStartedAtMs(value: string | null | undefined) {
function createMiniGameDraftGenerationStateFromStartedAt(
kind: MiniGameDraftGenerationKind,
startedAtMs: number,
metadata?: MiniGameDraftGenerationState['metadata'],
): MiniGameDraftGenerationState {
return {
...createMiniGameDraftGenerationState(kind),
startedAtMs,
...(metadata ? { metadata } : {}),
};
}
function createPuzzleDraftGenerationStateFromPayload(
payload: CreatePuzzleAgentSessionRequest | null | undefined,
): MiniGameDraftGenerationState {
return {
...createMiniGameDraftGenerationState('puzzle'),
metadata: {
puzzleAiRedraw: payload?.aiRedraw ?? true,
},
};
}
@@ -1956,6 +1969,8 @@ function buildPuzzleCompileActionFromFormPayload(
...(pictureDescription ? { pictureDescription } : {}),
referenceImageSrc: payload?.referenceImageSrc || null,
referenceImageSrcs: payload?.referenceImageSrcs ?? [],
referenceImageAssetObjectId: payload?.referenceImageAssetObjectId ?? null,
referenceImageAssetObjectIds: payload?.referenceImageAssetObjectIds ?? [],
imageModel: payload?.imageModel ?? null,
aiRedraw: payload?.aiRedraw ?? true,
candidateCount: 1,
@@ -1978,6 +1993,8 @@ function buildPuzzleFormPayloadFromSession(
pictureDescription,
referenceImageSrc: null,
referenceImageSrcs: [],
referenceImageAssetObjectId: null,
referenceImageAssetObjectIds: [],
imageModel: null,
aiRedraw: true,
};
@@ -2008,6 +2025,8 @@ function buildPuzzleFormPayloadFromAction(
? (payload.referenceImageSrc ?? null)
: (payload.referenceImageSrc ?? null),
referenceImageSrcs: payload.referenceImageSrcs ?? [],
referenceImageAssetObjectId: payload.referenceImageAssetObjectId ?? null,
referenceImageAssetObjectIds: payload.referenceImageAssetObjectIds ?? [],
imageModel:
payload.action === 'compile_puzzle_draft'
? (payload.imageModel ?? null)
@@ -4494,7 +4513,9 @@ export function PlatformEntryFlowShellImpl({
markPendingDraftGenerating('puzzle', session.sessionId);
selectionStageRef.current = 'puzzle-generating';
setSelectionStage('puzzle-generating');
const nextGenerationState = createMiniGameDraftGenerationState('puzzle');
const nextGenerationState = createPuzzleDraftGenerationStateFromPayload(
formPayload ?? buildPuzzleFormPayloadFromSession(session),
);
setPuzzleGenerationState(nextGenerationState);
setPuzzleBackgroundCompileTasks((current) => ({
...current,
@@ -4510,14 +4531,14 @@ export function PlatformEntryFlowShellImpl({
if (payload.action !== 'compile_puzzle_draft') {
return;
}
const generationState =
puzzleBackgroundCompileTasks[session.sessionId]?.generationState ??
puzzleGenerationState ??
createMiniGameDraftGenerationState('puzzle');
const formPayload =
buildPuzzleFormPayloadFromAction(payload) ??
puzzleBackgroundCompileTasks[session.sessionId]?.payload ??
buildPuzzleFormPayloadFromSession(session);
const generationState =
puzzleBackgroundCompileTasks[session.sessionId]?.generationState ??
puzzleGenerationState ??
createPuzzleDraftGenerationStateFromPayload(formPayload);
const recovered = await recoverCompletedPuzzleDraftGeneration({
sessionId: session.sessionId,
payload: formPayload,
@@ -5012,7 +5033,7 @@ export function PlatformEntryFlowShellImpl({
return;
}
const generationState = createMiniGameDraftGenerationState('puzzle');
const generationState = createPuzzleDraftGenerationStateFromPayload(payload);
setPuzzleBackgroundCompileTasks((current) => ({
...current,
[nextSession.sessionId]: {
@@ -5543,6 +5564,10 @@ export function PlatformEntryFlowShellImpl({
pictureDescription: payload.pictureDescription ?? '',
referenceImageSrc: payload.referenceImageSrc ?? null,
referenceImageSrcs: payload.referenceImageSrcs ?? [],
referenceImageAssetObjectId:
payload.referenceImageAssetObjectId ?? null,
referenceImageAssetObjectIds:
payload.referenceImageAssetObjectIds ?? [],
imageModel: payload.imageModel ?? null,
aiRedraw: payload.aiRedraw ?? true,
});
@@ -7488,7 +7513,10 @@ export function PlatformEntryFlowShellImpl({
);
const startPuzzleTestRunFromDraft = useCallback(
async (draft: PuzzleResultDraft) => {
async (
draft: PuzzleResultDraft,
options: { levelId?: string | null } = {},
) => {
if (isPuzzleBusy) {
return false;
}
@@ -7517,7 +7545,7 @@ export function PlatformEntryFlowShellImpl({
coverAssetId: draft.coverAssetId,
levels: draft.levels ?? [],
});
const run = startLocalPuzzleRun(item);
const run = startLocalPuzzleRun(item, options.levelId ?? null);
setSelectedPuzzleDetail(item);
setPuzzleRun(run);
setPuzzleRuntimeAuthMode('default');
@@ -9277,6 +9305,11 @@ export function PlatformEntryFlowShellImpl({
createMiniGameDraftGenerationStateFromStartedAt(
'puzzle',
parseDraftGenerationStartedAtMs(item.updatedAt),
{
puzzleAiRedraw:
buildPuzzleFormPayloadFromSession(latestSession).aiRedraw ??
true,
},
),
);
enterCreateTab();