273 lines
6.5 KiB
TypeScript
273 lines
6.5 KiB
TypeScript
/**
|
|
* RPG Agent 草稿与资产覆盖率契约。
|
|
* 这一层只描述 foundation draft、草稿卡片与资产状态,不包含会话编排语义。
|
|
*/
|
|
|
|
export type RpgAgentDraftCardKind =
|
|
| 'world'
|
|
| 'camp'
|
|
| 'faction'
|
|
| 'character'
|
|
| 'landmark'
|
|
| 'thread'
|
|
| 'chapter'
|
|
| 'scene_chapter'
|
|
| 'carrier'
|
|
| 'sidequest_seed';
|
|
|
|
export type RpgAgentDraftCardStatus =
|
|
| 'suggested'
|
|
| 'confirmed'
|
|
| 'locked'
|
|
| 'warning';
|
|
|
|
export interface RpgAgentDraftCardSummary {
|
|
id: string;
|
|
kind: RpgAgentDraftCardKind;
|
|
title: string;
|
|
subtitle: string;
|
|
summary: string;
|
|
status: RpgAgentDraftCardStatus;
|
|
linkedIds: string[];
|
|
warningCount: number;
|
|
assetStatus?: RpgAgentRoleAssetStatus | null;
|
|
assetStatusLabel?: string | null;
|
|
}
|
|
|
|
export interface RpgAgentDraftCardDetailSection {
|
|
id: string;
|
|
label: string;
|
|
value: string;
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftFaction {
|
|
id: string;
|
|
name: string;
|
|
title?: string;
|
|
subtitle?: string;
|
|
publicGoal: string;
|
|
relatedConflict: string;
|
|
tension?: string;
|
|
playerRelation: string;
|
|
summary: string;
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftCharacter {
|
|
id: string;
|
|
name: string;
|
|
title: string;
|
|
role: string;
|
|
publicIdentity: string;
|
|
publicMask?: string;
|
|
currentPressure: string;
|
|
hiddenHook?: string;
|
|
relationToPlayer: string;
|
|
threadIds: string[];
|
|
summary: string;
|
|
skills?: Array<{
|
|
id: string;
|
|
name: string;
|
|
actionPreviewConfig?: Record<string, unknown> | null;
|
|
}>;
|
|
imageSrc?: string | null;
|
|
generatedVisualAssetId?: string | null;
|
|
generatedAnimationSetId?: string | null;
|
|
animationMap?: Record<string, unknown> | null;
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftLandmark {
|
|
id: string;
|
|
name: string;
|
|
description?: string;
|
|
purpose: string;
|
|
mood: string;
|
|
importance: string;
|
|
secret?: string;
|
|
imageSrc?: string | null;
|
|
generatedSceneAssetId?: string | null;
|
|
generatedScenePrompt?: string | null;
|
|
generatedSceneModel?: string | null;
|
|
characterIds: string[];
|
|
threadIds: string[];
|
|
summary: string;
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftThread {
|
|
id: string;
|
|
title: string;
|
|
type: 'main' | 'hidden';
|
|
conflictType?: string;
|
|
conflict: string;
|
|
stakes?: string;
|
|
characterIds: string[];
|
|
landmarkIds: string[];
|
|
summary: string;
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftChapter {
|
|
id: string;
|
|
title: string;
|
|
openingEvent: string;
|
|
playerGoal: string;
|
|
characterIds: string[];
|
|
landmarkIds: string[];
|
|
understandingShift: string;
|
|
summary: string;
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftCamp {
|
|
id: string;
|
|
name: string;
|
|
description: string;
|
|
mood: string;
|
|
imageSrc?: string | null;
|
|
generatedSceneAssetId?: string | null;
|
|
generatedScenePrompt?: string | null;
|
|
generatedSceneModel?: string | null;
|
|
summary: string;
|
|
}
|
|
|
|
export interface RpgAgentWorldAttributeSlot {
|
|
slotId: 'axis_a' | 'axis_b' | 'axis_c' | 'axis_d' | 'axis_e' | 'axis_f';
|
|
name: string;
|
|
}
|
|
|
|
export interface RpgAgentWorldAttributeSchema {
|
|
id: string;
|
|
worldId: string;
|
|
schemaVersion: number;
|
|
generatedFrom: {
|
|
worldType: 'CUSTOM' | 'WUXIA' | 'XIANXIA';
|
|
worldName: string;
|
|
settingSummary: string;
|
|
tone: string;
|
|
conflictCore: string;
|
|
};
|
|
slots: RpgAgentWorldAttributeSlot[];
|
|
}
|
|
|
|
export type RpgAgentSceneActStage =
|
|
| 'opening'
|
|
| 'expansion'
|
|
| 'turning_point'
|
|
| 'climax'
|
|
| 'aftermath';
|
|
|
|
export type RpgAgentSceneActAdvanceRule =
|
|
| 'after_primary_contact'
|
|
| 'after_active_step_complete'
|
|
| 'after_chapter_resolution';
|
|
|
|
export interface RpgAgentFoundationDraftSceneAct {
|
|
id: string;
|
|
title: string;
|
|
summary: string;
|
|
stageCoverage: RpgAgentSceneActStage[];
|
|
backgroundImageSrc?: string | null;
|
|
backgroundAssetId?: string | null;
|
|
encounterNpcIds: string[];
|
|
primaryNpcId: string;
|
|
oppositeNpcId: string;
|
|
eventDescription: string;
|
|
linkedThreadIds: string[];
|
|
actGoal: string;
|
|
transitionHook: string;
|
|
advanceRule: RpgAgentSceneActAdvanceRule;
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftSceneChapter {
|
|
id: string;
|
|
sceneId: string;
|
|
sceneName: string;
|
|
title: string;
|
|
summary: string;
|
|
sceneTaskDescription: string;
|
|
linkedThreadIds: string[];
|
|
linkedLandmarkIds: string[];
|
|
acts: RpgAgentFoundationDraftSceneAct[];
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftProfile {
|
|
name: string;
|
|
subtitle: string;
|
|
summary: string;
|
|
tone: string;
|
|
playerGoal: string;
|
|
majorFactions: string[];
|
|
coreConflicts: string[];
|
|
playableNpcs: RpgAgentFoundationDraftCharacter[];
|
|
storyNpcs: RpgAgentFoundationDraftCharacter[];
|
|
landmarks: RpgAgentFoundationDraftLandmark[];
|
|
camp?: RpgAgentFoundationDraftCamp | null;
|
|
themePack?: Record<string, unknown> | null;
|
|
storyGraph?: Record<string, unknown> | null;
|
|
attributeSchema: RpgAgentWorldAttributeSchema;
|
|
factions: RpgAgentFoundationDraftFaction[];
|
|
threads: RpgAgentFoundationDraftThread[];
|
|
chapters: RpgAgentFoundationDraftChapter[];
|
|
sceneChapters: RpgAgentFoundationDraftSceneChapter[];
|
|
worldHook: string;
|
|
playerPremise: string;
|
|
openingSituation: string;
|
|
iconicElements: string[];
|
|
sourceAnchorSummary: string;
|
|
}
|
|
|
|
export interface RpgAgentFoundationDraftResult {
|
|
draftProfile: RpgAgentFoundationDraftProfile;
|
|
draftCards: RpgAgentDraftCardSummary[];
|
|
}
|
|
|
|
export interface RpgAgentDraftCardDetail {
|
|
id: string;
|
|
kind: RpgAgentDraftCardKind;
|
|
title: string;
|
|
sections: RpgAgentDraftCardDetailSection[];
|
|
linkedIds: string[];
|
|
locked: false;
|
|
editable: boolean;
|
|
editableSectionIds: string[];
|
|
warningMessages: string[];
|
|
assetStatus?: RpgAgentRoleAssetStatus | null;
|
|
assetStatusLabel?: string | null;
|
|
}
|
|
|
|
export type RpgAgentAssetPriorityTier = 'hero' | 'featured' | 'supporting';
|
|
|
|
export type RpgAgentRoleAssetStatus =
|
|
| 'missing'
|
|
| 'visual_ready'
|
|
| 'animations_ready'
|
|
| 'complete';
|
|
|
|
export interface RpgAgentRoleAssetSummary {
|
|
roleId: string;
|
|
roleName: string;
|
|
roleKind: 'playable' | 'story';
|
|
priorityTier: RpgAgentAssetPriorityTier;
|
|
portraitPath?: string | null;
|
|
generatedVisualAssetId?: string | null;
|
|
generatedAnimationSetId?: string | null;
|
|
status: RpgAgentRoleAssetStatus;
|
|
missingAnimations: string[];
|
|
nextPointCost: number;
|
|
}
|
|
|
|
export interface RpgAgentSceneAssetSummary {
|
|
sceneId: string;
|
|
sceneName: string;
|
|
actId?: string | null;
|
|
actTitle?: string | null;
|
|
imageSrc?: string | null;
|
|
assetId?: string | null;
|
|
status: 'missing' | 'ready';
|
|
nextPointCost: number;
|
|
}
|
|
|
|
export interface RpgAgentAssetCoverageSummary {
|
|
roleAssets: RpgAgentRoleAssetSummary[];
|
|
sceneAssets: RpgAgentSceneAssetSummary[];
|
|
allRoleAssetsReady: boolean;
|
|
allSceneAssetsReady: boolean;
|
|
}
|