Merge remote-tracking branch 'origin/master' into hermes/hermes-1e775b03
Some checks failed
CI / verify (pull_request) Has been cancelled

# Conflicts:
#	docs/technical/README.md
#	src/components/custom-world-home/CustomWorldCreationHub.tsx
#	src/components/custom-world-home/creationWorkShelf.ts
#	src/components/platform-entry/PlatformEntryFlowShellImpl.tsx
#	src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx
This commit is contained in:
2026-05-12 15:02:47 +08:00
141 changed files with 13407 additions and 2277 deletions

View File

@@ -89,6 +89,8 @@ export type CreationWorkShelfItem = {
id: string;
kind: CreationWorkShelfKind;
status: CreationWorkShelfStatus;
isGenerating?: boolean;
hasUnreadUpdate?: boolean;
title: string;
summary: string;
updatedAt: string;
@@ -135,6 +137,9 @@ export function buildCreationWorkShelfItems(params: {
onClaimPuzzlePointIncentive?: (item: PuzzleWorkSummary) => void;
onOpenVisualNovelDetail?: (item: VisualNovelWorkSummary) => void;
onDeleteVisualNovel?: (item: VisualNovelWorkSummary) => void;
getItemState?: (
item: CreationWorkShelfItem,
) => { isGenerating?: boolean; hasUnreadUpdate?: boolean } | null;
}) {
const {
rpgItems,
@@ -164,6 +169,7 @@ export function buildCreationWorkShelfItems(params: {
onClaimPuzzlePointIncentive,
onOpenVisualNovelDetail,
onDeleteVisualNovel,
getItemState,
} = params;
return [
@@ -205,10 +211,21 @@ export function buildCreationWorkShelfItems(params: {
onDelete: onDeleteVisualNovel,
}),
),
].sort(
(left, right) =>
getShelfItemTime(right.updatedAt) - getShelfItemTime(left.updatedAt),
);
]
.map((item) => {
const state = getItemState?.(item);
return state
? {
...item,
isGenerating: state.isGenerating,
hasUnreadUpdate: state.hasUnreadUpdate,
}
: item;
})
.sort(
(left, right) =>
getShelfItemTime(right.updatedAt) - getShelfItemTime(left.updatedAt),
);
}
type RpgWorkShelfAdapter = {
@@ -434,14 +451,14 @@ function mapVisualNovelWorkToShelfItem(
canDelete: boolean,
adapter: WorkShelfAdapter<VisualNovelWorkSummary>,
): CreationWorkShelfItem {
const status =
item.publishStatus === 'published' ? 'published' : 'draft';
const status = item.publishStatus === 'published' ? 'published' : 'draft';
const publicWorkCode =
status === 'published' ? buildVisualNovelPublicWorkCode(item.profileId) : null;
status === 'published'
? buildVisualNovelPublicWorkCode(item.profileId)
: null;
const title = item.title?.trim() || '未命名视觉小说';
const summary =
item.description?.trim() ||
(status === 'draft' ? '未填写作品描述' : '');
item.description?.trim() || (status === 'draft' ? '未填写作品描述' : '');
return {
id: item.profileId,