1
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
import type {
|
||||
CustomWorldAgentStage,
|
||||
CustomWorldDraftCardSummary,
|
||||
CustomWorldSuggestedAction,
|
||||
} from '../../../packages/shared/src/contracts/customWorldAgent.js';
|
||||
import {
|
||||
getWorldFoundationCardId,
|
||||
normalizeFoundationDraftProfile,
|
||||
} from './customWorldAgentDraftCompiler.js';
|
||||
|
||||
export class CustomWorldAgentSuggestedActionService {
|
||||
// 统一维护 Agent 草稿阶段的建议动作,避免继续散落在 orchestrator 和 store 的兼容逻辑里。
|
||||
buildSuggestedActions(
|
||||
params: {
|
||||
stage?: CustomWorldAgentStage;
|
||||
isReady?: boolean;
|
||||
draftProfile?: unknown;
|
||||
draftCards?: CustomWorldDraftCardSummary[];
|
||||
} = {},
|
||||
): CustomWorldSuggestedAction[] {
|
||||
const profile = normalizeFoundationDraftProfile(params.draftProfile);
|
||||
const actions: CustomWorldSuggestedAction[] = [
|
||||
{
|
||||
id: 'request_summary',
|
||||
type: 'request_summary',
|
||||
label:
|
||||
params.stage === 'object_refining' ||
|
||||
params.stage === 'visual_refining'
|
||||
? '总结当前世界底稿'
|
||||
: '总结当前设定',
|
||||
},
|
||||
];
|
||||
|
||||
if (params.stage === 'foundation_review' && params.isReady) {
|
||||
actions.push({
|
||||
id: 'draft_foundation',
|
||||
type: 'draft_foundation',
|
||||
label: '整理一版世界底稿',
|
||||
});
|
||||
return actions;
|
||||
}
|
||||
|
||||
if (
|
||||
(params.stage === 'object_refining' ||
|
||||
params.stage === 'visual_refining') &&
|
||||
profile
|
||||
) {
|
||||
const worldCardId =
|
||||
params.draftCards?.find((entry) => entry.kind === 'world')?.id ??
|
||||
getWorldFoundationCardId();
|
||||
const firstCharacter = [...profile.playableNpcs, ...profile.storyNpcs][0];
|
||||
const firstLandmark = profile.landmarks[0];
|
||||
|
||||
actions.push({
|
||||
id: 'refine_world',
|
||||
type: 'refine_focus_target',
|
||||
label: '先看世界总卡',
|
||||
targetId: worldCardId,
|
||||
});
|
||||
|
||||
if (firstCharacter) {
|
||||
actions.push({
|
||||
id: `refine-character-${firstCharacter.id}`,
|
||||
type: 'refine_focus_target',
|
||||
label: `精修角色:${firstCharacter.name}`,
|
||||
targetId: firstCharacter.id,
|
||||
});
|
||||
}
|
||||
|
||||
if (firstLandmark) {
|
||||
actions.push({
|
||||
id: `refine-landmark-${firstLandmark.id}`,
|
||||
type: 'refine_focus_target',
|
||||
label: `继续补地点:${firstLandmark.name}`,
|
||||
targetId: firstLandmark.id,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return actions;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user